首页
/ Azure Functions 项目中的请求遥测数据过滤方案解析

Azure Functions 项目中的请求遥测数据过滤方案解析

2025-07-06 08:07:45作者:蔡怀权

在分布式系统架构中,Azure Functions 作为后端服务常常需要与前端负载均衡组件(如 Azure Front Door)配合使用。一个典型的场景是:多个地理分布的 Function App 实例通过健康检查端点(probe endpoint)向负载均衡器报告自身状态。然而,这类高频调用的健康检查请求会产生大量不必要的 Application Insights 遥测数据,导致监控成本上升和有效数据稀释。

核心问题分析

Azure Functions 运行时默认会收集所有 HTTP 触发函数的请求遥测数据(Request Telemetry),这些数据包含响应状态码、持续时间等关键指标。虽然通过 host.json 可以控制日志级别:

{
  "version": "2.0",
  "logging": {
    "logLevel": {
      "Function.probe_endpt": "None"
    }
  }
}

但该配置仅影响日志输出,无法阻止请求级遥测数据的生成和上报。这是由 Functions 运行时的设计决定的——请求遥测属于基础设施层面的监控数据,与业务日志属于不同维度。

技术解决方案

方案一:自定义遥测处理器(推荐)

通过实现 ITelemetryProcessor 接口,可以在数据发送到 Application Insights 前进行动态过滤:

public class HealthProbeFilter : ITelemetryProcessor
{
    private readonly ITelemetryProcessor _next;

    public HealthProbeFilter(ITelemetryProcessor next)
    {
        _next = next;
    }

    public void Process(ITelemetry item)
    {
        if (item is RequestTelemetry request && 
            request.Url.AbsolutePath.Contains("/api/probe"))
        {
            return;
        }
        _next.Process(item);
    }
}

注册处理器需在 Startup.cs 中配置:

builder.Services.AddApplicationInsightsTelemetryProcessor<HealthProbeFilter>();

方案二:采样策略调整

对于需要保留部分样本的场景,可配置自适应采样:

{
  "ApplicationInsights": {
    "SamplingSettings": {
      "IsEnabled": true,
      "MaxTelemetryItemsPerSecond": 5,
      "ExcludedTypes": "Request"
    }
  }
}

架构建议

  1. 端点分离设计:将健康检查端点部署为独立的 Function App,配置不同的 Application Insights 实例
  2. 轻量级协议:考虑改用 TCP 健康检查替代 HTTP 检查
  3. 监控分层:对业务请求和健康检查请求使用不同的监控指标

未来演进方向

Azure Functions 团队正在评估按函数粒度控制请求遥测的特性需求。可能的实现方式包括:

  • 在函数绑定属性中添加遥测控制标记
  • 支持基于路由模式的 host.json 配置
  • 提供运行时环境变量覆盖能力

当前建议采用自定义遥测处理器的方案,该方式具有最好的灵活性和可控性,且不影响系统原有监控体系的其他维度数据收集。

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
27
13
docsdocs
OpenHarmony documentation | OpenHarmony开发者文档
Dockerfile
643
4.19 K
leetcodeleetcode
🔥LeetCode solutions in any programming language | 多种编程语言实现 LeetCode、《剑指 Offer(第 2 版)》、《程序员面试金典(第 6 版)》题解
Java
69
21
Dora-SSRDora-SSR
Dora SSR 是一款跨平台的游戏引擎,提供前沿或是具有探索性的游戏开发功能。它内置了Web IDE,提供了可以轻轻松松通过浏览器访问的快捷游戏开发环境,特别适合于在新兴市场如国产游戏掌机和其它移动电子设备上直接进行游戏开发和编程学习。
C++
57
7
flutter_flutterflutter_flutter
暂无简介
Dart
885
211
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
386
273
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
1.52 K
868
nop-entropynop-entropy
Nop Platform 2.0是基于可逆计算理论实现的采用面向语言编程范式的新一代低代码开发平台,包含基于全新原理从零开始研发的GraphQL引擎、ORM引擎、工作流引擎、报表引擎、规则引擎、批处理引引擎等完整设计。nop-entropy是它的后端部分,采用java语言实现,可选择集成Spring框架或者Quarkus框架。中小企业可以免费商用
Java
12
1
giteagitea
喝着茶写代码!最易用的自托管一站式代码托管平台,包含Git托管,代码审查,团队协作,软件包和CI/CD。
Go
24
0
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
124
191