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可观测性白皮书
相关推荐
小小龙学IT1 天前
三菱 PLC MC 协议(SLMP / QnA 兼容 3E 帧)深度解析:从帧结构到 C++/Go 双语言采集实战
c语言·c++·golang
念何架构之路1 天前
zap日志SugaredLogger 剖析
云原生·golang
FfHUCisI2 天前
sync.Once 与 sync.Cond 源码与并发控制陷阱
服务器·开发语言·后端·golang
Wx-bishekaifayuan2 天前
springboot生活商城系统21035-计算机课程设计、毕业设计
spring boot·后端·python·spring·elasticsearch·golang·课程设计
ttwuai8 天前
Go开源后台管理系统推荐:怎么按技术栈和边界比较4个官方仓库?
golang·gin
codeejun8 天前
每日一Go·MySQL-5、锁机制全解析
云原生·golang
Achou.Wang8 天前
k8s中nginx worker process自动设置
后端·golang
指尖的爷9 天前
ARM 架构 Ubuntu(RK3588/aarch64)go开发环境安装手册
ubuntu·架构·golang
名字还没想好☜9 天前
Go 实现指数退避重试:context 取消、抖动 jitter 与什么时候别重试
后端·golang·go
Casbin开源社区9 天前
OpenAgent 详解:单二进制自托管 AI Agent 平台,30+ 模型接入、RAG 知识库、MCP 工具调用与 Casbin 工具权限
人工智能·golang·开源