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

如何在Application Insights中按事件最终结果统计函数重试成功率

队列触发函数Application Insights按最终结果统计成功率的解决办法

1. 给同一条队列消息的所有执行加唯一标识

每条队列消息都自带唯一的MessageId,你需要在函数代码里把这个ID注入到Application Insights的遥测属性中,以此关联同一条消息的多次重试执行:

  • C#示例:
var telemetry = new TelemetryClient();
telemetry.Context.Properties["QueueMsgId"] = message.Id;
// 自动收集或手动打点的遥测数据都会带上这个标识
  • Python示例:
def main(msg: QueueMessage):
    import logging
    from opencensus.ext.azure.log_exporter import AzureLogHandler

    logger = logging.getLogger(__name__)
    logger.addHandler(AzureLogHandler(connection_string="你的AI连接字符串"))
    # 将消息ID放入自定义维度
    logger.info("Processing message", extra={"custom_dimensions": {"QueueMsgId": msg.id}})

2. 用Kusto查询统计最终成功率

在Application Insights的日志查询界面,执行以下Kusto语句,按消息ID分组后取每条消息最后一次执行的结果,以此计算真实成功率:

requests
| where cloud_RoleName == "你的函数应用名称"
| where operation_Name startswith "你的队列触发函数名称"
| extend QueueMsgId = customDimensions.QueueMsgId
// 按消息ID分组,提取时间最晚的一次执行的成功状态
| summarize FinalStatus = arg_max(timestamp, success) by QueueMsgId
// 统计最终成功数与总消息数,计算成功率
| summarize SuccessTotal = countif(FinalStatus.success == true), TotalMessages = count()
| extend SuccessRate = SuccessTotal * 100.0 / TotalMessages
| project SuccessRate, SuccessTotal, TotalMessages

这个查询会直接忽略中间的重试失败,只以每条消息的最终处理结果为统计依据。

3. 做成可视化面板(可选)

将上述查询保存为Application Insights的自定义查询,再添加到仪表盘,就能随时查看按最终结果统计的成功率,无需重复执行查询。

4. 过滤重试失败的遥测(进阶可选)

如果不想让重试阶段的失败请求干扰默认的成功率统计,可以编写遥测处理器过滤这类数据:

  • C#中实现ITelemetryProcessor,通过队列消息的DequeueCount(重试次数)判断,若未达到最大重试次数且执行失败,则跳过该条遥测:
public class RetrySkipProcessor : ITelemetryProcessor
{
    private readonly ITelemetryProcessor _next;
    private const int MaxRetries = 5; // 你的函数重试次数上限

    public RetrySkipProcessor(ITelemetryProcessor next) => _next = next;

    public void Process(ITelemetry item)
    {
        if (item is RequestTelemetry req && req.Properties.TryGetValue("QueueDequeueCount", out var countStr)
            && int.TryParse(countStr, out var dequeueCount))
        {
            // 过滤重试阶段的失败请求
            if (dequeueCount < MaxRetries && !req.Success)
                return;
        }
        _next.Process(item);
    }
}

然后在Startup.cs中注册该处理器:

public override void Configure(IFunctionsHostBuilder builder)
{
    builder.Services.AddApplicationInsightsTelemetryProcessor<RetrySkipProcessor>();
}

注意:此方法会删除重试失败的遥测数据,若需要保留这些数据用于调试,建议优先使用查询统计的方案。


内容的提问来源于stack exchange,提问作者myob-hankun

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 20:10:26