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()
}
}
三、全文总结
- Zap高性能结构化日志
- Prometheus指标暴露与Alert告警
- OpenTelemetry统一Trace标准
- trace_id关联三支柱数据
参考文献
- zap: https://github.com/uber-go/zap
- OpenTelemetry Go SDK
- CNCF可观测性白皮书