Google cloud trace agent does not appear to work in my typescript project

187 Views Asked by At

I'm using google cloud trace inside GKE. Everything appears to work fine if I import the library as an argument when running node in the docker image, however if I import the client library in my code itself, I see no traces generated

As per the documentation, google cloud trace must be the first element imported in the application. To manage this in typescript with import statements, I have moved it to a dedicated file which I them import as the first module in my index.ts file. Here's what that looks like:

index.ts:

// Trace MUST be the first import before any external modules
import './app/services/trace';
import 'source-map-support/register';
import makeApp from './app/app';
// ...
makeApp().then(app => app.listen(port));

app/services/trace.ts:

import * as TraceAgent from '@google-cloud/trace-agent';

if (process.env.NODE_ENV === 'production') {
    TraceAgent.start({
        ignoreUrls: ['/livez', '/healthz', '/metrics'], // ignore internal only endpoints
        ignoreMethods: ['OPTIONS'],
        contextHeaderBehavior: 'ignore', // Ignore any incoming context headers. Stop outsiders forcing requests to be traced.
        samplingRate: 10,
        serviceContext: {
            service: 'my-service-name',
            version: process.env.VERSION || 'v0.0.0'
        }
    });
}

export default TraceAgent;

app/app.ts

import express from 'express';
// ...
export default async function makeApp() {
    const app = express();
    // ...
    return app
}

My typescript target is configured as es2022 with module set to commonjs. And the resulting compiled index.js looks like this

"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
// Trace MUST be the first import before any external modules
require("./app/services/trace");
require("source-map-support/register");
const app_1 = __importDefault(require("./app/app"));
//...

From what I understand, that means that @google-cloud/trace-agent is indeed being imported first, and while it does import fine and the start method is called, I still see no traces being generated when imported like this in my code.

0

There are 0 best solutions below