Application Insights无法跟踪节点中间件中的请求

时间:2019-05-09 13:43:30

标签: node.js azure-application-insights koa strapi

我的CMS使用的是Strapi(基于Koa构建)。我添加了一个中间件,该中间件是在对服务器的每个请求上触发的。该中间件将初始化appInsights。

我能够从下面的代码中获取跟踪日志,但是在我的生命中,我没有得到任何请求结果。我将密钥用于Nuxt SPA上相同的AppInsights资源,该资源从Strapi后端获取其数据,为此,我可以看到所有请求。因此,应该正确设置资源。

这是中间件的代码。所有的跟踪消息和控制台日志都按预期注册。

const appInsights = require('applicationinsights');
module.exports = () => {
  let isInit = false;
  return {
    initialize: function(cb) {
      strapi.app.use(async (ctx, next) => {
        if (!isInit) {
          appInsights.setup().start();
          appInsights.defaultClient.trackTrace({
            message: 'STRAPI: trace on init'
          });
          console.log('app insights setup');
          isInit = true;
        }
        await next();
        appInsights.defaultClient.trackNodeHttpRequest({
          request: ctx.request,
          response: ctx.response
        });
        appInsights.defaultClient.trackTrace({
          message: 'STRAPI: trace on all http calls'
        });
        console.log('track node http request');
      });
      cb();
    }
  };
};

1 个答案:

答案 0 :(得分:1)

您必须放上

appInsights.setup().start();
appInsights.defaultClient.trackTrace({
  message: 'STRAPI: trace on init'
});
console.log('app insights setup');

strapi.app.use之外的

module.exports = () => {
  return {
    initialize: function(cb) {
      appInsights.setup().start();

      appInsights.defaultClient.trackTrace({
        message: 'STRAPI: trace on init'
      });

      console.log('app insights setup');

      strapi.app.use(async (ctx, next) => {
        await next();

        appInsights.defaultClient.trackNodeHttpRequest({
          request: ctx.request,
          response: ctx.response
        });

        appInsights.defaultClient.trackTrace({
          message: 'STRAPI: trace on all http calls'
        });

        console.log('track node http request');
      });

      cb();
    }
  };
};

通过这种方式,服务器启动时,您的start将被调用一次。