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可观测性白皮书
相关推荐
大树9112 小时前
把 Java 项目从手动 SCP 升级到 Gitee Go 自动部署:一份踩坑实录
java·golang·gitee
lmy_loveF12 小时前
go 切换go version 版本
开发语言·后端·golang
智购科技自动贩卖机14 小时前
自动售货机嵌入式系统安全加固实践:从Go语言国密算法到硬件防拆的工程化落地
大数据·人工智能·后端·安全·golang·系统安全
妙码生花1 天前
使用git更新ai-go-admin框架
前端·人工智能·git·golang·typescript·php
王的宝库1 天前
GO常用标准库包
开发语言·后端·golang
平头哥AI1 天前
Day 13 | 一个函数回两个值:Go 的 error 是从哪冒出来的
开发语言·后端·golang
我不会起名字3221 天前
一天一道算法题(29):单调栈
java·数据结构·python·算法·leetcode·golang·单调栈
FfHUCisI1 天前
Golang 网络轮询器 netpoll:把阻塞 IO 变成事件通知
开发语言·网络·golang
李迟2 天前
Golang实践录:工程框架实践:搭建工程模板
开发语言·后端·golang