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

如何在Blazor交互式服务器应用中按需禁用Application Insights?

按需禁用Blazor Interactive Server中的Application Insights

可以通过配置开关+自定义Telemetry处理器或条件化服务注册的方式实现,既满足不同环境的需求,又不会产生无效连接字符串的错误日志,具体方案如下:

方案1:自定义TelemetryProcessor拦截追踪请求

这种方式保留Application Insights服务的初始化,但根据配置开关直接忽略所有追踪调用,适合需要保留SDK依赖但禁用数据上报的场景。

  1. 添加环境配置开关
    在不同环境的配置文件中添加启用/禁用开关:
  • 本地开发(appsettings.Development.json):
{
  "ApplicationInsights": {
    "Enabled": false
  }
}
  • 开发槽(appsettings.Staging.json):
{
  "ApplicationInsights": {
    "Enabled": false
  }
}
  • 生产槽(appsettings.Production.json):
{
  "ApplicationInsights": {
    "Enabled": true
  }
}
  1. 实现自定义Telemetry处理器
    创建一个处理器类,根据配置决定是否处理追踪数据:
public class DisableTelemetryProcessor : ITelemetryProcessor
{
    private readonly ITelemetryProcessor _nextProcessor;
    private readonly IConfiguration _config;

    public DisableTelemetryProcessor(ITelemetryProcessor nextProcessor, IConfiguration config)
    {
        _nextProcessor = nextProcessor;
        _config = config;
    }

    public void Process(ITelemetry telemetryItem)
    {
        // 读取配置,若禁用则直接跳过后续处理
        if (!_config.GetValue<bool>("ApplicationInsights:Enabled"))
        {
            return;
        }
        _nextProcessor.Process(telemetryItem);
    }
}
  1. 注册处理器到服务容器
    在Program.cs中添加处理器注册:
builder.Services.AddApplicationInsightsTelemetry();
// 添加自定义处理器,优先级高于默认处理器
builder.Services.AddApplicationInsightsTelemetryProcessor<DisableTelemetryProcessor>();
  1. 开发槽的临时启用
    负载测试时,直接在Azure应用服务开发槽的应用设置中添加ApplicationInsights__Enabled并设为true,该配置会覆盖本地配置文件,测试完成后改回false即可,无需重新部署。

方案2:条件化注册Application Insights服务

这种方式更彻底,当禁用时不会初始化任何Application Insights相关服务,而是注入一个空实现的TelemetryClient,避免不必要的资源开销。

在Program.cs中根据配置条件注册服务:

var aiEnabled = builder.Configuration.GetValue<bool>("ApplicationInsights:Enabled");

if (aiEnabled)
{
    builder.Services.AddApplicationInsightsTelemetry();
    // 其他AI相关配置(如采样、自定义处理器等)
}
else
{
    // 注册禁用状态的TelemetryClient,确保依赖注入不报错
    builder.Services.AddSingleton<ITelemetryClient>(_ => 
        new TelemetryClient { DisableTelemetry = true });
}

同样通过不同环境的配置文件和Azure槽位设置控制ApplicationInsights:Enabled的值,实现本地禁用、开发槽按需启用、生产始终启用的需求。

注意事项

  • 不要使用无效连接字符串的方式禁用,这会产生大量错误日志,干扰问题排查。
  • 两种方案都可以通过Azure应用服务的槽位配置动态调整,无需修改代码重新部署。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 00:00:04