Search code examples
node.jsazureloggingappinsights

Configure the Azure AppInsights for Node.js application


Even after configuring the Azure AppInsights for Node.js application, I get the NodeClient with properties like enableAutoCollectConsole,enableAutoDependencyCorrelation, etc as undefined. Please tell me what is wrong? Reference link: https://github.com/microsoft/ApplicationInsights-node.js/issues/560

appInsights.defaultClient NodeClient {
  _telemetryProcessors: [],
  config: Config {
    _endpointBase: 'https://dc.services.visualstudio.com',
    _connectionString: undefined,
    _instrumentationKey: '3e9532',
    correlationHeaderExcludedDomains: [
      '*.core.windows.net',
      '*.core.chinacloudapi.cn',
      '*.core.cloudapi.de',
      '*.core.usgovcloudapi.net',
      '*.core.microsoft.scloud',
      '*.core.eaglex.ic.gov'
    ],
    correlationIdRetryIntervalMs: 30000,
    disableAllExtendedMetrics: false,
    disableAppInsights: false,
    disableStatsbeat: false,
    distributedTracingMode: undefined,
    enableAutoCollectConsole: undefined,
    enableLoggerErrorToTrace: undefined,
    enableAutoCollectDependencies: undefined,
    enableAutoCollectIncomingRequestAzureFunctions: undefined,
    enableAutoCollectExceptions: undefined,
    enableAutoCollectExtendedMetrics: undefined,
    enableAutoCollectExternalLoggers: undefined,
    enableAutoCollectHeartbeat: undefined,
    enableAutoCollectPerformance: undefined,
    enableAutoCollectPreAggregatedMetrics: undefined,
    enableAutoCollectRequests: undefined,
    enableAutoDependencyCorrelation: undefined,
    enableInternalDebugLogging: undefined,
    enableInternalWarningLogging: undefined,
    enableResendInterval: undefined,
    enableMaxBytesOnDisk: undefined,
    enableSendLiveMetrics: undefined,
    enableUseAsyncHooks: undefined,
    enableUseDiskRetryCaching: undefined,
    endpointUrl: 'https://centralindia-0.in.applicationinsights.azure.com/v2.1/track',
    extendedMetricDisablers: undefined,
    ignoreLegacyHeaders: false,
    maxBatchIntervalMs: 15000,
    maxBatchSize: 250,
    proxyHttpUrl: undefined,
    proxyHttpsUrl: undefined,
    quickPulseHost: 'centralindia.livediagnostics.monitor.azure.com',
    samplingPercentage: 100,
    enableWebInstrumentation: false,
    _webInstrumentationConnectionString: '',
    webInstrumentationConfig: null,
    webInstrumentationSrc: '',
    enableAutoWebSnippetInjection: false,
    _profileQueryEndpoint: 'https://centralindia-0.in.applicationinsights.azure.com/',
    correlationId: 'cid-v1:'
  },

Code: index.js


const express = require('express');
const querystring = require('querystring');
const url = require('url');
const appInsights = require('./appInsightsSetup'); // Import the appInsights setup from the separate file

const app = express();
const port = 3000;

app.get('/', (req, res) => {
    console.log("appInsights.defaultClient", appInsights.defaultClient)
    // Track the incoming request
    appInsights.defaultClient.trackRequest({
        name: req.path,
        url: req.url,
        duration: Date.now() - req.startTime,
        resultCode: res.statusCode,
        success: true
    });

    res.send('Hello World!');
});

app.get('/stdout', (req, res) => {
    let logStr = querystring.parse(url.parse(req.url).query).log;
    // logStr = "logging stdout"
    process.stdout.write(logStr + '\n');
    console.log('console: ' + logStr + '\n');

    // Track the custom event
    appInsights.defaultClient.trackEvent({ name: 'stdout', properties: { log: logStr } });

    res.send('Received\n');
});

app.get('/stderr', (req, res) => {
    let errStr = querystring.parse(url.parse(req.url).query).log;
    process.stderr.write(errStr + '\n');
    console.log('console: ' + errStr + '\n');

    // Track the custom event
    appInsights.defaultClient.trackEvent({ name: 'stderr', properties: { log: errStr } });

    res.send('Received\n');
});

// Middleware to record request start time
app.use((req, res, next) => {
    req.startTime = Date.now();
    next();
});

app.listen(port, () => console.log(`Example app listening on port ${port}!`));

appInsightsSetup.js

const appInsights = require('applicationinsights');

appInsights.setup("InstrumentationKey=;IngestionEndpoint=")
    .setAutoDependencyCorrelation(false)
    .setAutoCollectRequests(true)
    .setAutoCollectPerformance(false)
    .setAutoCollectExceptions(false)
    .setAutoCollectDependencies(false)
    .setAutoCollectConsole(true, true)
    .setUseDiskRetryCaching(true)
    .setSendLiveMetrics(false)
    .setInternalLogging(true)
    .start();

module.exports = appInsights;

Solution

    • Configure the Azure AppInsights for Node.js application.

    appInsightsSetup.js:

    const  appInsights = require('applicationinsights');
    // Replace 'YOUR_INSTRUMENTATION_KEY' with your actual Application Insights instrumentation key
    const  instrumentationKey = '886e0430-1007-4bc';
    appInsights.setup(instrumentationKey)
    .setAutoDependencyCorrelation(false)
    .setAutoCollectRequests(true)
    .setAutoCollectPerformance(false)
    .setAutoCollectExceptions(false)
    .setAutoCollectDependencies(false)
    .setAutoCollectConsole(true)
    .setUseDiskRetryCaching(true)
    .setSendLiveMetrics(false)
    .setInternalLogging(true)
    .start();
    module.exports = appInsights;
    

    index.js /main.js:

    const  express = require('express');
    const  querystring = require('querystring');
    const  url = require('url');
    const  appInsights = require('./appInsightsSetup');
    const  app = express();
    const  port = 3000;
    // Middleware to record request start time
    app.use((req,  res,  next)  =>  {
    req.startTime = Date.now();
    next();
    });
    app.get('/',  (req,  res)  =>  {
    // Track the incoming request
    appInsights.defaultClient.trackRequest({
    name:  req.path,
    url:  req.url,
    duration:  Date.now() - req.startTime,
    resultCode:  res.statusCode,
    success:  true
    });
    res.send('Hello World!');
    });
    app.get('/stdout',  (req,  res)  =>  {
    let  logStr = querystring.parse(url.parse(req.url).query).log;
    process.stdout.write(logStr + '\n');
    console.log('console: ' + logStr + '\n');
    // Track the custom event
    appInsights.defaultClient.trackEvent({  name:  'stdout',  properties:  {  log:  logStr  }  });
    res.send('Received\n');
    });
    app.get('/stderr',  (req,  res)  =>  {
    let  errStr = querystring.parse(url.parse(req.url).query).log;
    process.stderr.write(errStr + '\n');
    console.log('console: ' + errStr + '\n');
    // Track the custom event
    appInsights.defaultClient.trackEvent({  name:  'stderr',  properties:  {  log:  errStr  }  });
    res.send('Received\n');
    });
    app.listen(port,  ()  =>  console.log(`Example app listening on port ${port}!`));
    
    
    • Install npm install applicationinsights express querystring url .

    • The behavior you're experiencing, where certain properties like enableAutoCollectConsole and enableAutoDependencyCorrelation are showing as undefined in the NodeClient object, is expected due to the way the applicationinsights package handles these configurations internally.

    • The telemetry tracking is working as expected and you are seeing data being collected in the Azure portal, you can rest assured that your setup is functioning correctly, despite the properties appearing as undefined in the NodeClient object.

    • The behavior you are observing is not an issue, and you can proceed with confidence that your Azure AppInsights setup is working as intended. Seeing telemetry data being collected in the Azure portal and your application is functioning correctly, there is no need to be concerned about the undefined values for these properties in the NodeClient object.

    Output:

    enter image description here

    enter image description here

    enter image description here

    enter image description here