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

Angular应用中过滤2xx/3xx响应的Azure Application Insights遥测数据

解决Angular中过滤Azure Application Insights 2xx/3xx响应遥测的问题

一、正确阻止遥测发送的核心方案

需通过**遥测处理器(Telemetry Processor)**在数据发送前拦截过滤,以下是可落地的实现步骤:

  1. 创建自定义遥测处理器
    实现ITelemetryProcessor接口,精准拦截请求类遥测并过滤成功响应:
import { ITelemetryProcessor, Envelope } from "@microsoft/applicationinsights-web";

export class SuccessResponseFilterProcessor implements ITelemetryProcessor {
    process(envelope: Envelope, next: (envelope: Envelope) => void): void {
        // 仅针对请求遥测(RequestData)执行过滤逻辑
        if (envelope.data.baseType === "RequestData") {
            const requestData = envelope.data.baseData;
            const statusCode = requestData.responseCode;
            // 判断状态码是否为2xx或3xx,支持字符串/数字类型的状态码
            const isSuccessCode = (typeof statusCode === "string" 
                ? (statusCode.startsWith("2") || statusCode.startsWith("3")) 
                : (statusCode >= 200 && statusCode < 400));
            
            if (isSuccessCode) {
                // 不调用next(),直接阻止该条遥测发送
                return;
            }
        }
        // 非目标遥测正常传递发送
        next(envelope);
    }
}
  1. 注册处理器到Application Insights初始化配置
    在Angular的初始化入口(如app.module.ts或独立AI服务)中,将自定义处理器加入配置:
import { ApplicationInsights } from "@microsoft/applicationinsights-web";
import { SuccessResponseFilterProcessor } from "./success-response-filter.processor";

const appInsights = new ApplicationInsights({
    config: {
        instrumentationKey: "YOUR_INSTRUMENTATION_KEY",
        // 注册自定义过滤处理器
        telemetryProcessors: [new SuccessResponseFilterProcessor()]
    }
});
appInsights.loadAppInsights();

二、Envelope.baseData与Envelope.data的属性使用

Envelope是AI遥测的封装容器,核心字段说明及操作方式如下:

  • envelope.data:包含遥测类型标识(baseType)和实际业务数据(baseData)
  • envelope.data.baseData:存储对应类型遥测的具体字段(如请求遥测的responseCode、url等)

1. 读取属性示例

以请求遥测为例,读取关键业务字段:

// 获取响应状态码
const statusCode = envelope.data.baseData.responseCode;
// 获取请求URL
const requestUrl = envelope.data.baseData.url;
// 获取请求耗时
const duration = envelope.data.baseData.duration;

2. 修改/添加属性示例

在发送前自定义遥测数据,比如添加业务标签:

if (envelope.data.baseType === "RequestData") {
    // 新增自定义属性
    envelope.data.baseData.properties = {
        ...envelope.data.baseData.properties,
        "business-module": "checkout"
    };
    // 修改现有属性格式
    envelope.data.baseData.responseCode = `HTTP-${envelope.data.baseData.responseCode}`;
}

注:所有属性修改必须在调用next(envelope)前完成,否则无法生效。

三、过滤失效的常见排查点

若已实现处理器但2xx/3xx日志仍存在,检查以下内容:

  • 确认处理器已正确加入telemetryProcessors数组,未被其他配置覆盖
  • 验证responseCode的类型:部分场景下状态码可能是数字而非字符串,需匹配对应判断逻辑
  • 扩展过滤范围:若成功响应属于依赖项遥测(DependencyData),需在处理器中补充对应类型的判断
  • 检查采样配置:AI采样仅对通过处理器的遥测生效,不会影响过滤逻辑,但需确保采样规则未意外保留目标遥测

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 12:01:01