Go可观测性三支柱Logs-Metrics-Traces集成实战

Go可观测性三支柱Logs-Metrics-Traces集成实战

文章导语

可观测性的三大支柱------日志(Logs)、指标(Metrics)、链路追踪(Traces)------为微服务系统提供了全方位的运行状态洞察。本文基于Zap+Prometheus+OpenTelemetry实现Go服务的完整可观测性。

一、结构化日志(Zap)

go 复制代码
func InitLogger() *zap.Logger {
    config := zap.NewProductionConfig()
    config.OutputPaths = []string{"stdout"}
    config.EncoderConfig.TimeKey = "timestamp"
    config.EncoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
    
    logger, _ := config.Build()
    return logger
}

// 使用
logger.Info("user created",
    zap.String("user_id", userID),
    zap.String("trace_id", traceID),
)

二、三支柱统一关联

go 复制代码
// 通过trace_id关联日志和链路
func LoggingMiddleware(logger *zap.Logger) gin.HandlerFunc {
    return func(c *gin.Context) {
        traceID := c.GetHeader("X-Trace-Id")
        if traceID == "" {
            traceID = uuid.New().String()
            c.Header("X-Trace-Id", traceID)
        }
        
        // 注入到logger
        ctxLogger := logger.With(zap.String("trace_id", traceID))
        c.Set("logger", ctxLogger)
        
        c.Next()
    }
}

三、全文总结

  1. Zap高性能结构化日志
  2. Prometheus指标暴露与Alert告警
  3. OpenTelemetry统一Trace标准
  4. trace_id关联三支柱数据

参考文献

  1. zap: https://github.com/uber-go/zap
  2. OpenTelemetry Go SDK
  3. CNCF可观测性白皮书
相关推荐
利威尔xu1 天前
2026-11-08-Go-defer-panic-recover面试
面试·golang
JWASX2 天前
【Go】map 源码解析 - group
后端·golang·map·源码分析
联犀3 天前
纯 Go 的 CAD 开源库 go-cad:直接解析 DWG/DXF,现在也能导出 PDF
开发语言·golang·pdf
FungLeo3 天前
成为全栈·Go 后端篇·三轮代码审阅之后:把可读性和证据做成工程规则
golang·go·ast·静态检查·成为全栈·代码审阅
联犀3 天前
联犀 Go SIMD 实战:视频转码从 16.5ms 到 5.46ms
开发语言·golang·音视频
紧跟先前的步伐4 天前
Go AI Agent 实战 28|Agent 的预算、超时与停止条件
开发语言·人工智能·后端·ai·golang
利威尔xu4 天前
2026-11-05-Go内存管理面试
面试·golang
Zenova EdgeOS5 天前
Go 工业边缘错误处理实战:用 errors 构建可追溯错误链
开发语言·数据库·golang
JavaPub-rodert6 天前
从零搭建通用管理后台:ShiyuAdmin 的 Go、React 与 RBAC 实践
开发语言·react.js·golang
microrain6 天前
SagooIoT 的数据接入层只有四张表,却能接住三种外部数据
物联网·golang·数据建模·sagooiot