如何在Application Insights的AppRequests表中屏蔽URL敏感数据?
解决Application Insights AppRequests表敏感URL数据屏蔽问题
你对Application Insights的理解是正确的:AppRequests表的条目确实由SDK自动生成,对应应用收到的每一个API请求,无需手动写入自定义日志,因此自定义日志的屏蔽方案不适用于这类自动收集的遥测数据。针对这类自动记录的敏感URL,有两种可靠的处理方式:
1. 代码层面通过遥测处理器修改请求数据
这是最灵活且推荐的方案,能在数据发送到Azure之前完成敏感信息屏蔽,避免敏感数据流出应用边界。以.NET应用为例,步骤如下:
- 创建实现
ITelemetryProcessor的自定义处理器类,在Process方法中解析并修改请求的Url字段:
public class SensitiveUrlProcessor : ITelemetryProcessor { private readonly ITelemetryProcessor _next; private readonly List<string> _sensitiveParams = new List<string> { "name", "phone" }; // 自定义敏感参数列表 public SensitiveUrlProcessor(ITelemetryProcessor next) { _next = next; } public void Process(ITelemetry item) { if (item is RequestTelemetry requestTelemetry) { var url = new Uri(requestTelemetry.Url.ToString()); var queryParams = HttpUtility.ParseQueryString(url.Query); foreach (var param in _sensitiveParams) { if (queryParams[param] != null) { queryParams[param] = "***"; } } var newUrl = new UriBuilder(url) { Query = queryParams.ToString() }.Uri.ToString(); requestTelemetry.Url = new Uri(newUrl); } _next.Process(item); } }
- 在
Program.cs(.NET 6+)或Startup.cs中注册该处理器:
builder.Services.AddApplicationInsightsTelemetry(); builder.Services.AddSingleton<ITelemetryProcessor, SensitiveUrlProcessor>();
其他语言(如Java、Python)也有对应的遥测扩展/处理器机制,核心逻辑一致:拦截自动收集的请求遥测,修改敏感字段后再发送。
2. 云端配置数据过滤规则
如果不想修改代码,可以在Azure门户的Application Insights实例中配置数据过滤规则,直接在云端处理传入的遥测:
- 进入目标Application Insights资源,依次点击「数据收集」->「数据过滤」
- 点击「添加过滤规则」,规则类型选择「替换」,目标表选择
AppRequests,目标字段选择Url - 设置匹配条件:比如匹配包含
name=的内容,替换为name=***;多敏感参数可添加多条规则 - 保存规则后,后续新生成的AppRequests条目会自动应用屏蔽
注意:云端过滤仅对新数据生效,无法修改已存储的历史数据;若需处理历史数据,需导出到存储后自行清理。
内容的提问来源于stack exchange,提问作者Jonathan Hagen
相关产品推荐
相关产品推荐

