如何将Azure Function Apps的4xx错误标记为Application Insights中的失败?
把Azure Function Apps收到的我方服务4xx响应标记为Application Insights失败并配置告警
一、让4xx响应在Application Insights里显示为失败
默认情况下,Application Insights不会把大部分4xx请求标记为失败,要实现这个需求,有两种常用方法:
方法1:自定义遥测处理器(推荐)
在你的Azure Function里加一个自定义遥测处理器,自动把我方服务返回的4xx请求标记为失败。以C#函数为例:
- 新建一个处理器类:
public class Custom4xxFailureProcessor : ITelemetryProcessor { private readonly ITelemetryProcessor _nextProcessor; public Custom4xxFailureProcessor(ITelemetryProcessor next) { _nextProcessor = next; } public void Process(ITelemetry telemetryItem) { if (telemetryItem is RequestTelemetry reqTelemetry) { // 只针对我方服务的请求,这里替换成你的服务域名或标识 if (reqTelemetry.Url.Host.Contains("your-internal-service.com") && reqTelemetry.ResponseCode.StartsWith("4")) { reqTelemetry.Success = false; } } _nextProcessor.Process(telemetryItem); } }
- 在Startup类里注册这个处理器:
[assembly: FunctionsStartup(typeof(YourFuncApp.Startup))] namespace YourFuncApp { public class Startup : FunctionsStartup { public override void Configure(IFunctionsHostBuilder builder) { builder.Services.AddSingleton<ITelemetryProcessor, Custom4xxFailureProcessor>(); } } }
部署后,符合条件的4xx请求就会被标记为失败,自动出现在Application Insights的「失败请求」界面里。
方法2:手动标记失败请求
如果不想改遥测处理器,也可以在调用我方服务的代码里,收到4xx响应时手动记录失败请求:
var requestStartTime = DateTimeOffset.UtcNow; var response = await httpClient.SendAsync(yourRequest); if ((int)response.StatusCode >= 400 && (int)response.StatusCode < 500) { var telemetryClient = new TelemetryClient(); var reqTelemetry = new RequestTelemetry { Name = "InternalServiceCall", Url = yourRequest.RequestUri, ResponseCode = ((int)response.StatusCode).ToString(), Success = false, Duration = DateTimeOffset.UtcNow - requestStartTime }; telemetryClient.TrackRequest(reqTelemetry); }
二、配置邮件告警
当4xx被标记为失败后,你可以设置告警自动发邮件:
- 打开你的Application Insights资源,左侧菜单点「警报」>「创建」>「警报规则」
- 选信号:信号类型选「日志」,然后输入自定义Kusto查询:
requests | where success == false | where responseCode startswith "4" | where url contains "your-internal-service.com"
- 设阈值:比如设置“5分钟内出现1次及以上”,评估频率设为5分钟
- 加操作组:创建或选择已有的操作组,添加「电子邮件」动作,填好收件邮箱
- 保存规则:给告警起个名字,比如「内部服务4xx失败告警」,保存后就会自动触发邮件通知。
三、指定界面显示与替代方案
只要用上面的方法把Success设为false,这些失败请求就会自动出现在Application Insights的「调查」>「失败请求」界面里——这应该就是你说的指定界面。
如果因为特殊情况无法在目标界面显示,还有这些替代方案:
- 自定义仪表板:在Azure门户建一个自定义仪表板,添加「失败请求」的图表,筛选出我方服务的4xx请求,把这个仪表板设为常用入口
- 保存自定义日志视图:在Application Insights的「日志」页面,把上面的Kusto查询保存为自定义视图,下次直接打开就能看
- 记录为异常:把4xx响应当成异常来跟踪(用
TrackException方法),这样可以在「异常」界面查看,同时异常类的告警也能触发邮件通知
内容的提问来源于stack exchange,提问作者Aidan Do
相关产品推荐
相关产品推荐

