AppInsight成功依赖项过滤规则部署失效及成本优化咨询
问题1:Call status与dependency.Success的对应关系
你在Azure门户中看到的Call status: true完全对应DependencyTelemetry对象的Success属性,二者是直接映射的关系,不存在字段不匹配的问题。
问题2:本地生效线上不生效的常见原因
你的自定义处理器本地生效、线上失效最可能的两个原因:
- 配置节点拼写错误:你提到的配置节点名
TelemetruyProcessors拼写有误,正确名称应为TelemetryProcessors,拼写错误会导致配置无法被读取加载。 - 框架兼容性问题:如果你使用的是ASP.NET Core/.NET Core+版本的应用,Application Insights默认不会读取
ApplicationInsights.config文件的配置,这类框架需要通过代码注入的方式注册自定义处理器。
过滤成功依赖项的最佳方案
推荐按优先级选择以下方案:
修正自定义处理器的注册逻辑
- 如果你使用的是ASP.NET (.NET Framework)应用,先修正配置节点拼写,修正后重启应用即可生效。
- 如果你使用的是.NET Core/.NET 5+应用,移除config中的配置,在服务注册代码中添加如下逻辑:
// Program.cs 或者 Startup.cs 的 ConfigureServices 方法中 services.AddApplicationInsightsTelemetryProcessor<TelemetryFilter>();优化过滤逻辑避免丢失排查所需数据
不建议直接过滤所有成功依赖项,可添加阈值判断保留慢调用、异常相关的必要数据,参考优化后的代码:
public class TelemetryFilter : ITelemetryProcessor { private ITelemetryProcessor Next { get; set; } public TelemetryFilter(ITelemetryProcessor next) { Next = next; } public void Process(ITelemetry item) { var dependency = item as DependencyTelemetry; // 仅过滤成功且耗时低于1s的普通依赖项,慢调用、失败调用全部保留 if (dependency != null && dependency.Success == true && dependency.Duration.TotalMilliseconds < 1000) { return; } Next.Process(item); } }
- 轻量化替代方案
如果不需要100%精准过滤所有成功依赖,也可以直接在Azure门户的Application Insights配置页开启引入采样,无需修改代码即可按比例过滤冗余数据,成本控制效果也比较好。
内容的提问来源于stack exchange,提问作者Alexander Zhidkov
相关产品推荐
相关产品推荐

