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可观测性白皮书
相关推荐
名字还没想好☜1 小时前
Go 的 database/sql 连接池实战:SetMaxOpenConns 怎么配、连接泄漏怎么查
数据库·sql·golang·go·数据库连接池
圣殿骑士-Khtangc1 小时前
Go-Docker多阶段构建与容器化最佳实践
golang
灯澜忆梦6 小时前
【基于GO的Web开发3】gin框架_HTML渲染
前端·golang·gin
码农大叔的博客1 天前
golang示例:switch
开发语言·后端·golang
圣殿骑士-Khtangc1 天前
Go面试核心考点之GMP调度器源码级深度解析
golang
xcLeigh2 天前
Go入门:无类型常量与类型常量的区别
服务器·开发语言·golang
泡沫冰@2 天前
GO 语言基础
开发语言·算法·golang
骇客野人2 天前
电商商城微服务架构设计方案(SpringCloud/Go+Vue3+MySQL+ES+RocketMQ)
spring cloud·微服务·golang
码农大叔的博客2 天前
golang示例:for九九乘法表
开发语言·算法·golang