如何过滤OpenTelemetry发送到Azure Application Insights的http.client_open_connections指标以减少数据量
如何过滤OpenTelemetry发送到Azure Application Insights的http.client_open_connections指标以减少数据量
别担心,我完全懂你遇到的糟心事——从TelemetryClient切换到OpenTelemetry后,那一堆高频上报的http.client_open_connections指标直接把Application Insights的配额撑爆了,这确实头疼。我来给你分享两种简单有效的过滤方法,帮你快速解决这个问题:
方法一:用AddView快速排除单个指标
这是最简洁的方式,只需要在你的Metrics配置里加一行代码,就能直接禁用指定指标的上报:
修改你现有的WithMetrics配置块,加入AddView来关闭http.client_open_connections:
.WithMetrics(x => { x.AddSqlClientInstrumentation(); // 新增这行:禁用http.client_open_connections指标的上报 x.AddView("http.client_open_connections", new MetricStreamConfiguration { Enabled = false }); })
这种方式适合只需要排除少数几个指标的场景,代码改动极小,见效特别快。
方法二:自定义Metrics处理器(适合复杂过滤需求)
如果你之后需要更灵活的过滤规则(比如同时排除多个指标,或者根据指标的具体属性过滤),可以自定义一个Metrics处理器:
- 先创建一个处理器类:
public class FilterUnwantedMetricsProcessor : BaseProcessor<Metric> { // 这里可以添加所有需要排除的指标名称 private readonly HashSet<string> _excludedMetrics = new HashSet<string> { "http.client_open_connections", // 比如如果还想排除其他冗余指标,像"http.client_current_requests"也可以加在这里 }; public override void OnEnd(Metric metric) { // 如果是要排除的指标,就跳过不上报 if (_excludedMetrics.Contains(metric.Name)) return; base.OnEnd(metric); } }
- 然后在你的OpenTelemetry配置里注册这个处理器:
.WithMetrics(x => { x.AddSqlClientInstrumentation(); // 添加自定义过滤处理器 x.AddProcessor<FilterUnwantedMetricsProcessor>(); })
完成配置后重启你的ASP.NET Core应用,再去Application Insights的Logs里查看CustomMetrics,应该就看不到http.client_open_connections的条目了,配额消耗也会明显变慢。如果还有其他高频上报的冗余指标,都可以用类似的方法过滤掉~
备注:内容来源于stack exchange,提问作者Thomas
相关产品推荐
相关产品推荐

