【问题标题】:Cannot get live metrics stream on deployed webapi application无法在已部署的 webapi 应用程序上获取实时指标流
【发布时间】:2017-07-17 19:07:04
【问题描述】:

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

但是,在部署应用程序时,我看不到实时指标流(它显示“不可用:您的应用程序处于离线状态或使用较旧的 SDK)。有趣的是,我仍然可以在搜索功能中看到应用程序的日志 -所以应用程序自己的日志记录工作正常,但实时指标数据收集不工作。

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 打开任何其他“自我记录”,以查看它为什么在收集或发送实时指标时遇到问题?

【问题讨论】:

  • AI 程序集的最新版本是否都已部署?您可以通过搜索中出现的内容查看sdkVersion 字段输出来确定吗?

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


【解决方案1】:

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

【讨论】:

  • 我有一个自定义构建过程,将 applicationinsights.config 放入 /bin。谢谢!如果 applicationinsights 将一些调试信息发送到门户以帮助解决此类问题,那就太好了。
【解决方案2】:

您可以尝试以下方法并告诉我们是否有效吗?

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

    QuickPulseTelemetryModule quickPulseModule = new QuickPulseTelemetryModule();
    QuickPulseTelemetryProcessor quickPulseTelemetryProcessor = TelemetryConfiguration.Active.TelemetryProcessors.OfType<QuickPulseTelemetryProcessor>().Single();
    quickPulseModule.RegisterTelemetryProcessor(quickPulseTelemetryProcessor);
    quickPulseModule.Initialize(TelemetryConfiguration.Active);
    
  3. 确保在应用程序的整个生命周期中都保留对模块的引用。

如果上述失败表明在配置中未找到 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();

【讨论】:

  • 我试过了,应用程序无法在该新代码的第一行(它正在创建 QuickPul​​seTelemetryModule 的位置)以“InvalidOperationException:序列不包含元素”开始。
  • 您确定异常出现在第一行而不是第二行吗?如果配置未正确加载,听起来像是 .Single() 可能抛出的东西。
  • 更新了上面的答案。
  • 你是对的 - 错误消息中有一个错误,但我尝试将该代码包装在一个聚合异常中,并用一个字符串指示它的位置 - 这绝对是第二行,创建处理器。我检查了 applicationinsights.config 文件的位置——它在 bin 目录中。我把它移到了根目录,嘿,我现在有了 Live Metrics!您要添加一个更简单的答案“检查 applicationinsights.config 的位置”,我会将其标记为答案吗?
猜你喜欢
  • 2015-08-16
  • 1970-01-01
  • 2012-09-11
  • 2012-04-17
  • 1970-01-01
  • 2020-05-08
  • 2021-02-20
  • 2014-09-10
  • 1970-01-01
相关资源
最近更新 更多