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

使用Gin中间件时Azure Application Insight性能菜单操作名称为空

问题原因

Azure Application Insights的OPERATION NAME字段对应Go SDK请求遥测的Name属性以及遥测上下文的Operation.Name属性,你当前的实现存在两处遗漏:

  1. 调用NewRequestTelemetry时第一个入参仅传入了HTTP方法,没有传入可聚合的操作标识,且部分版本的SDK不会自动将请求名称同步到操作上下文
  2. 使用原始请求URI作为标识会导致带路径参数的请求无法聚合,无法生成统一的操作名称

修复步骤

1. 调整中间件逻辑,生成正确的操作名称

使用Gin提供的c.FullPath()获取路由模板,和HTTP方法拼接为标准的操作名称格式[METHOD] [ROUTE_TEMPLATE],同时显式赋值操作上下文的名称字段,避免SDK版本兼容问题。

2. 修改后的中间件核心代码

import "fmt" // 按需导入fmt包用于拼接操作名称

func InsightsWithConfig(config *InsightsConfig) gin.HandlerFunc {
    client := createTelemetryClient(config)
    return func(c *gin.Context) {
        url := c.Request.RequestURI
        start := time.Now()
        c.Next()
        end := time.Now()
        duration := end.Sub(start)
        clientIP := c.ClientIP()
        method := c.Request.Method
        statusCode := c.Writer.Status()
        userAgent := c.Request.UserAgent()
        bodySize := c.Writer.Size()

        // 新增:获取路由模板构造操作名称,无匹配路由时 fallback 到原始URI
        routePath := c.FullPath()
        if routePath == "" {
            routePath = url
        }
        operationName := fmt.Sprintf("%s %s", method, routePath)

        // 修改:第一个参数传入构造好的操作名称
        telemetry := appinsights.NewRequestTelemetry(operationName, url, duration, strconv.Itoa(statusCode))
        // 新增:显式赋值操作上下文名称,兼容不同SDK版本
        telemetry.Context.Operation.Name = operationName

        telemetry.Timestamp = end
        telemetry.MarkTime(start, end)
        telemetry.Source = clientIP
        telemetry.Success = statusCode >= 200 && statusCode < 400
        telemetry.Properties["user-agent"] = userAgent
        telemetry.Measurements["body-size"] = float64(bodySize)
        client.Track(telemetry)
    }
}

验证

修改上线后等待3-5分钟数据同步,即可在Performance菜单看到格式为GET /api/xxx/:id的操作名称,同路由模板的请求会自动聚合。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 15:36:04