为什么我会看到从性能计数器数据中提取的数据激增?

Why am I seeing a large spike in Data ingestion from performance counter data?

通过查看我的 Application Insights 成本管理报告,我注意到与性能计数器相关的数据摄取量激增。

Link to larger image

但是,我没有发现同期请求数量激增有任何显着相关性。

Link to larger image

我该怎么做才能了解此问题的根本原因?

附加信息

经过一些调试,我终于弄明白了。

使用量在 9 月 7 日和 9 月 8 日达到峰值,然后在 9 日和 10 日逐渐减少。

我在 9 月 6 日所做的更改是 Microsoft.ApplicationInsights.AspNetCore 从版本 2.6.1 升级到版本 2.7.1。版本 2.7.1 内置了 ILogger 集成。

所以,我相信发生的事情是,在部署 Microsoft.ApplicationInsights.AspNetCore 的升级版本之后,我可能将日志记录的详细程度设置得对于性能计数器遥测数据来说太高了,随后将其更改了几次几天后,当我注意到它时。

我希望这可以帮助可能 运行 解决这个问题的其他人!

Application Insights 2.7.1 已默认启用ILogger 捕获,但它仅捕获Warning 或以上的日志消息。因此,除非您的应用程序生成大量警告或更高级别的 Ilogger 日志,否则这不应导致使用量激增。 如果报告的日志过多,可以更改此行为以进一步过滤日志。 https://docs.microsoft.com/en-us/azure/azure-monitor/app/ilogger#control-logging-level 从您分享的第一个屏幕截图来看,性能计数器似乎是唯一出现峰值的类型 - ilogger 集成无法解释此峰值,因为它仅报告日志。

更合乎逻辑的解释是 PerformanceCounter 模块本身在 2.7.1 之前的版本中不受支持。您可以使用 startup.cs

中 ConfigureServices() 方法中的以下片段删除性能计数器集合

使用Microsoft.ApplicationInsights.DependencyCollector; 使用 Microsoft.ApplicationInsights.Extensibility.PerfCounterCollector;

public void ConfigureServices(IServiceCollection services)
{
    services.AddApplicationInsightsTelemetry();

    // The following removes PerformanceCollectorModule to disable perf-counter collection.
    var performanceCounterService = services.FirstOrDefault<ServiceDescriptor>(t => t.ImplementationType == typeof(PerformanceCollectorModule));
    if (performanceCounterService != null)
    {
     services.Remove(performanceCounterService);
    }
}

现在有一种更简洁的方法来实现禁用 PerformanceCounterModule(以及其他导致 excessive/unneeded 日志记录的模块);

services.AddApplicationInsightsTelemetry(options =>
{
    options.EnablePerformanceCounterCollectionModule = false;
    options.InstrumentationKey = configuration["ApplicationInsights:InstrumentationKey"];
});