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

如何将Azure Function Apps的4xx错误标记为Application Insights中的失败?

把Azure Function Apps收到的我方服务4xx响应标记为Application Insights失败并配置告警

一、让4xx响应在Application Insights里显示为失败

默认情况下,Application Insights不会把大部分4xx请求标记为失败,要实现这个需求,有两种常用方法:

方法1:自定义遥测处理器(推荐)

在你的Azure Function里加一个自定义遥测处理器,自动把我方服务返回的4xx请求标记为失败。以C#函数为例:

  1. 新建一个处理器类:
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);
    }
}
  1. 在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被标记为失败后,你可以设置告警自动发邮件:

  1. 打开你的Application Insights资源,左侧菜单点「警报」>「创建」>「警报规则」
  2. 选信号:信号类型选「日志」,然后输入自定义Kusto查询:
requests
| where success == false
| where responseCode startswith "4"
| where url contains "your-internal-service.com"
  1. 设阈值:比如设置“5分钟内出现1次及以上”,评估频率设为5分钟
  2. 加操作组:创建或选择已有的操作组,添加「电子邮件」动作,填好收件邮箱
  3. 保存规则:给告警起个名字,比如「内部服务4xx失败告警」,保存后就会自动触发邮件通知。

三、指定界面显示与替代方案

只要用上面的方法把Success设为false,这些失败请求就会自动出现在Application Insights的「调查」>「失败请求」界面里——这应该就是你说的指定界面。

如果因为特殊情况无法在目标界面显示,还有这些替代方案:

  • 自定义仪表板:在Azure门户建一个自定义仪表板,添加「失败请求」的图表,筛选出我方服务的4xx请求,把这个仪表板设为常用入口
  • 保存自定义日志视图:在Application Insights的「日志」页面,把上面的Kusto查询保存为自定义视图,下次直接打开就能看
  • 记录为异常:把4xx响应当成异常来跟踪(用TrackException方法),这样可以在「异常」界面查看,同时异常类的告警也能触发邮件通知

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 19:18:36