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

Application Insights能否仅保留异常与日志禁用其余所有遥测?

Asp.Net Core 6 最小化接入Application Insights采集异常与日志的问题解答

问题1:将ApplicationInsightsServiceOptions所有公开可配置选项设为false,是否能够完全阻断其余所有遥测数据的上报?

不能。
ApplicationInsightsServiceOptions暴露的开关仅覆盖了SDK默认注册的几类高频采集模块的总开关,没有覆盖全量内置采集逻辑,仅靠修改这些配置无法彻底阻断所有非目标遥测上报。

问题2:Microsoft.ApplicationInsights.AspNetCore包中是否存在无法通过上述选项禁用的遥测采集内容?

存在,主要包含三类低数据量的内置采集逻辑:

  • 遥测基础元数据采集:SDK会自动给所有上报的遥测附加云角色名、实例ID、SDK版本、运行时版本这类上下文属性,属于遥测数据的基础标识逻辑,无公开配置可关闭,单条遥测附加的元数据仅几十字节,数据量极低。
  • 极低频内部心跳:默认SDK内置的存活检测逻辑,默认15分钟上报一次单条心跳标记应用状态,不在ServiceOptions的控制范围内,单实例日上报量不足1KB,几乎无成本。
  • 未显式移除的遥测初始化器/处理器附带采集:部分链路关联、属性注入逻辑不会跟随模块开关关闭,可能生成极少量无意义的遥测片段。

仅保留异常、日志采集的可落地配置方案

光修改ServiceOptions不够,需要手动移除不需要的遥测模块、初始化器,配合日志过滤规则实现最小化采集:

  1. 服务注册阶段先关闭所有公开可控的采集开关
builder.Services.AddApplicationInsightsTelemetry(options =>
{
    // 关闭所有公开配置项对应的非目标采集能力
    options.EnablePerformanceCounterCollectionModule = false;
    options.EnableRequestTrackingTelemetryModule = false;
    options.EnableDependencyTrackingTelemetryModule = false;
    options.EnableEventCounterCollectionModule = false;
    options.EnableAppServicesHeartbeatTelemetryModule = false;
    options.EnableAzureInstanceMetadataTelemetryModule = false;
    options.EnableQuickPulseMetricStream = false;
    options.EnableHeartbeat = false;
    options.AddAutoCollectedMetricExtractor = false;
    // 全量留存异常日志可关自适应采样,要进一步压成本可保持开启
    options.EnableAdaptiveSampling = false;
    // 配置你的Application Insights连接字符串
    options.ConnectionString = builder.Configuration["ApplicationInsights:ConnectionString"];
});
  1. 手动清理不需要的遥测模块与初始化器
builder.Services.Configure<TelemetryConfiguration>(config =>
{
    // 仅保留异常采集相关模块,其余全部移除
    var modulesToRemove = config.TelemetryModules
        .Where(m => 
            m is not UnhandledExceptionTelemetryModule &&
            m is not ExceptionTrackingTelemetryModule &&
            m is not DiagnosticsTelemetryModule
        )
        .ToList();
    foreach (var module in modulesToRemove)
    {
        config.TelemetryModules.Remove(module);
    }

    // 仅保留操作ID关联初始化器,其余全部移除
    var initializersToRemove = config.TelemetryInitializers
        .Where(i => i is not OperationIdTelemetryInitializer)
        .ToList();
    foreach (var initializer in initializersToRemove)
    {
        config.TelemetryInitializers.Remove(initializer);
    }
});
  1. 配置日志提供程序与过滤规则
// 注册Application Insights日志提供程序
builder.Logging.AddApplicationInsights(
    configureTelemetryConfiguration: (config) => 
        config.ConnectionString = builder.Configuration["ApplicationInsights:ConnectionString"],
    configureApplicationInsightsLoggerOptions: (options) => { }
);
// 配置日志过滤:全局默认仅上报Error及以上级别,避免低级别日志产生费用
builder.Logging.AddFilter<ApplicationInsightsLoggerProvider>("", LogLevel.Error);
// 如需上报特定类别的Information/Warning日志,可单独加规则,例:
// builder.Logging.AddFilter<ApplicationInsightsLoggerProvider>("MyApp.BusinessLayer", LogLevel.Warning);

配置完成后建议本地调试验证:通过SDK调试日志或Visual Studio的Application Insights本地搜索功能,确认上报的遥测只有Exception(异常)、Trace(日志)两类,无Request、Dependency、PerformanceCounter等高占比计费遥测后再上线。
前述无法通过配置关闭的元数据、心跳类数据,单应用月上报量不足1MB,远低于免费额度阈值,几乎不会产生可计费账单,完全满足成本控制要求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 08:24:15