无法在部署的webapi应用程序上获取实时指标流

时间:2017-07-17 19:07:05

标签: asp.net-web-api azure-application-insights

我有一个配置了Serilog日志记录的webapi应用程序,可以转到Application Insights。 当我的webapi应用程序在本地运行时,我可以通过Application Insights中的“搜索”看到应用程序的日志,我还可以看到实时指标流。

但是,当部署应用程序时,我看不到实时指标流(它说“不可用:您的应用程序处于脱机状态或使用较旧的SDK”。有趣的是,我仍然可以在搜索功能中看到应用程序的日志 - 所以应用程序拥有的日志记录正在运行,但不是Live Metrics数据集合。

AI troubleshooting documentation表示这可能是防火墙问题,但我已经确认我可以到达live metrics stream ports的端口443(rt.services.visualstudio.com和rt.applicationinsights .microsoft.com)来自该服务器的telnet。

服务器上的Application Insights Monitor显示该站点已“启用”。唯一的通知是“已通过应用程序项目代码为此应用程序启用了Application Insights。(...)”。最初我收到了关于无法收集指标的警告,但我将应用程序池的标识添加到相应的组中,并且该警告现已消失。

我所做的唯一真正的自定义是从applicationinsights.config文件中删除AI密钥,并在代码中设置它,以便我可以为每个环境提供不同的AI资源。

我在Startup.Configuration方法中设置检测密钥的代码如下:

    if (TelemetryConfiguration.Active != null)
    {
        TelemetryConfiguration.Active.InstrumentationKey = ConfigurationManager.AppSettings["ApplicationInsightsKey"];
    }

同样,这在本地工作,所以我认为问题不在于代码中AI键的设置。

是否还有其他“自我记录”,我可以为AI查看为什么它在收集或发送实时指标时遇到问题?

2 个答案:

答案 0 :(得分:0)

您是否可以尝试以下操作并告知我们是否有效?

  1. 从ApplicationInsights.config中删除QuickPul​​seTelemetryModule
  2. 在代码中
  3. ,在设置了检测键后,手动创建模块:

    QuickPulseTelemetryModule quickPulseModule = new QuickPulseTelemetryModule();
    QuickPulseTelemetryProcessor quickPulseTelemetryProcessor = TelemetryConfiguration.Active.TelemetryProcessors.OfType<QuickPulseTelemetryProcessor>().Single();
    quickPulseModule.RegisterTelemetryProcessor(quickPulseTelemetryProcessor);
    quickPulseModule.Initialize(TelemetryConfiguration.Active);
    
  4. 确保在整个应用程序的生命周期内保留对模块的引用。
  5. 如果上述操作失败表明配置中未找到QuickPul​​seTelemetryProcessor,请在部署到远程服务器时检查ApplicationInsights.config是否正确放置(事情在本地工作但在部署时不是指示文件未被拾取的事实 - 以及即使在配置文件中也没有在配置中找到QuickPul​​seTelemetryProcessor这一事实。比较ApplicationInsights.config在有效的本地设置中的位置和远程的。如果您遇到困难,可以尝试在代码中创建模块和处理器。为此,请从ApplicationInsights.config中删除QuickPul​​seTelemetryModule和QuickPul​​seTelemetryProcessor(即使这可能不重要),并在代码中执行以下操作:

    var quickPulseModule = new QuickPulseTelemetryModule();                
    quickPulseModule.Initialize(TelemetryConfiguration.Active);
    TelemetryConfiguration.Active.TelemetryProcessorChainBuilder.Use(next =>
                {
                    var processor = new QuickPulseTelemetryProcessor(next);
                    quickPulseModule.RegisterTelemetryProcessor(processor);
                    return processor;
                });
    
    TelemetryConfiguration.Active.TelemetryProcessorChainBuilder.Build();
    

答案 1 :(得分:0)

在部署应用程序的服务器上 - 检查ApplicationInsights.config的位置。根据许多因素(如部署模型或应用程序类型),该文件应位于/ bin文件夹中,或位于应用程序的根目录中。