You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core中OpenTelemetry自动采集指标发送至AzureMonitor问题

问题解答

1. 图中数据是否为StatsBeat数据?

你提到的HeartBeatState、http.client.*、http.server.*不全是StatsBeat数据:

  • HeartBeatState属于App Insights的基础心跳遥测,用于监控应用存活状态,不属于StatsBeat;
  • http.client.*、http.server.*是OpenTelemetry针对HTTP请求自动采集的标准指标,来自ASP.NET Core内置的仪器(Instrumentation),也不属于StatsBeat;
  • StatsBeat是Azure Monitor SDK自身产生的遥测,用于追踪SDK的运行状态、版本信息等,指标名称通常带有StatsBeat前缀。

2. 若为StatsBeat数据,是否无使用成本?

StatsBeat数据确实是免费的,不会计入App Insights的用量配额,也不会产生额外费用。但你当前看到的http.client.*、http.server.*这类自动采集的HTTP指标属于常规遥测数据,会占用App Insights的用量额度,产生对应成本。

3. 设置APPLICATIONINSIGHTS_STATSBEAT_DISABLED=true能否关闭该数据采集?

这个环境变量仅对StatsBeat数据生效,无法关闭你提到的HeartBeatState、HTTP自动指标。所以你设置后仍能看到这些数据是正常的,因为它们不在该变量的控制范围内。

4. 能否在代码注册阶段关闭该自动采集?

可以通过修改OpenTelemetry的Metrics配置来实现,具体有两种常用方式:

方式一:仅保留自定义Meter,移除默认自动采集仪器

在WithMetrics配置中,明确移除ASP.NET Core自带的HTTP仪器,只保留你自定义的Meter:

public static IServiceCollection RegisterMetrics(this IServiceCollection services, string appInsightsConnectionString, string serviceName)
{
    var meterName = $"{serviceName}.Meters";

    services.AddOpenTelemetry()
        .WithMetrics(options =>
        {
            options.SetResourceBuilder(ResourceBuilder.CreateEmpty().AddService(serviceName));
            // 仅添加自定义Meter
            options.AddMeter(meterName);
            // 移除默认的HTTP客户端/服务端自动采集仪器
            options.RemoveInstrumentation<HttpClientInstrumentation>();
            options.RemoveInstrumentation<AspNetCoreInstrumentation>();
        })
        .UseAzureMonitor((options) =>
        {
            options.ConnectionString = appInsightsConnectionString;
            // 关闭HeartBeatState心跳数据
            options.DisableHeartbeat = true;
        });

    services.TryAddSingleton<IMetricsFactory>(x => new MetricsFactory(meterName, x.GetRequiredService<IMeterFactory>()));

    return services;
}

方式二:通过AddView精细过滤不需要的指标

如果需要针对特定指标做排除,可使用AddView配置:

public static IServiceCollection RegisterMetrics(this IServiceCollection services, string appInsightsConnectionString, string serviceName)
{
    var meterName = $"{serviceName}.Meters";

    services.AddOpenTelemetry()
        .WithMetrics(options =>
        {
            options.SetResourceBuilder(ResourceBuilder.CreateEmpty().AddService(serviceName));
            options.AddMeter(meterName);
            // 隐藏指定前缀的HTTP指标
            options.AddView("http.client.*", viewOpts => viewOpts.IsVisible = false);
            options.AddView("http.server.*", viewOpts => viewOpts.IsVisible = false);
        })
        .UseAzureMonitor((options) =>
        {
            options.ConnectionString = appInsightsConnectionString;
            options.DisableHeartbeat = true;
        });

    services.TryAddSingleton<IMetricsFactory>(x => new MetricsFactory(meterName, x.GetRequiredService<IMeterFactory>()));

    return services;
}

内容的提问来源于stack exchange,提问作者KennetRunner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 05:43:20