EventFlow在ApplicationInsight门户上未显示正确的遥测类型。相反,它们显示为TRACE

时间:2018-08-01 06:16:41

标签: .net azure-service-fabric azure-application-insights event-flow

在我的示例项目中,我正在使用EventFlow收集诊断数据并将其输出到ApplicationInsight。还可以通过ApplicationInsight进行日志记录。诊断数据显示在ApplicationInsight门户上,但是所有遥测类型均显示为TRACE(即使诊断发送的遥测类型为REQUEST)。但是,如果我直接使用ApplicationInsight(没有EventFlow)登录,它将在ApplicationInsight中正确显示正确的遥测类型。下面是我使用的EventFlow配置文件和示例代码。

顺便说一下,我的示例应用程序是ASP.NET Core2 Web API。

eventFlowConfig.json

{

   "inputs": [
           { "type": "ApplicationInsights" }
  ],
  "outputs": [
    // Please update the instrumentationKey.
    {
      "type": "ApplicationInsights",
      "instrumentationKey": "xxxxxxxxxxx"
    }
  ],
  "schemaVersion": "2016-08-11"
}

示例代码

public void ConfigureServices(IServiceCollection services)
        {
            services.AddApplicationInsightsTelemetry();
            services.AddApplicationInsightsTelemetryProcessor<EventFlowTelemetryProcessor>();
            services.AddMvc();
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            var telemetryConfiguration = app.ApplicationServices.GetService<TelemetryConfiguration>();
            var eventFlowTelmetryProcessor = (EventFlowTelemetryProcessor)telemetryConfiguration
                                                .TelemetryProcessors
                                                .First(x => x.GetType() == typeof(EventFlowTelemetryProcessor));

            if (eventFlowTelmetryProcessor != null)
            {
                var diagnosticPipeline = app.ApplicationServices.GetService<DiagnosticPipeline>();
                eventFlowTelmetryProcessor.Pipeline = diagnosticPipeline;
            }

            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseMvc();
        }

在这里,我附上了ApplicationInsight的屏幕截图,以更加清晰。在这里,它具有一些遥测类型为REQUEST的诊断数据,但即使诊断数据也显示为TRACE。

ApplicationInsight screenshot

1 个答案:

答案 0 :(得分:0)

发生这种情况是因为事件流 AppInsights Ouput 使用 TrackTrace 处理所有输入事件\遥测,并将这些事件发送到 ApplicationInsights上的>“跟踪” 表。

它还使用AppInsights事件类型(请求)来设置这些事件的LogLevel,例如Informational,Trace,Debug。

由于这种不必要的处理,您在到达目的地的途中丢失了一些东西。为什么不直接登录到appInsights,而不是添加此额外开销以解析到eventFlow然后发送给AppInsights?