当前位置: 首页 > news >正文

Go语言分布式追踪:OpenTelemetry实战

Go语言分布式追踪:OpenTelemetry实战

1. OpenTelemetry概述

OpenTelemetry(OTel)是CNCF的可观测性框架,提供了一套统一的追踪、指标、日志收集标准。本文重点介绍分布式追踪的实现。

2. 追踪客户端实现

package otel import ( "context" "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/exporters/jaeger" "go.opentelemetry.io/otel/sdk/trace" ) type Tracer struct { tracer *trace.Tracer } func NewTracer(serviceName, endpoint string) (*Tracer, error) { exporter, err := jaeger.NewRawExporter( jaeger.WithCollectorEndpoint(endpoint), ) if err != nil { return nil, err } tp := trace.NewTracerProvider( trace.WithBatcher(exporter), trace.WithResource( resource.NewWithAttributes( semconv.ServiceNameKey.String(serviceName), ), ), ) otel.SetTracerProvider(tp) return &Tracer{ tracer: otel.Tracer(serviceName), }, nil } func (t *Tracer) StartSpan(ctx context.Context, name string, attrs ...attribute.KeyValue) (context.Context, *trace.Span) { return t.tracer.Start(ctx, name, trace.WithAttributes(attrs...)) } func (t *Tracer) AddEvent(ctx context.Context, name string, attrs ...attribute.KeyValue) { span := trace.SpanFromContext(ctx) span.AddEvent(name, trace.WithAttributes(attrs...)) }

3. gRPC拦截器集成

func (s *Server) StreamInterceptor() grpc.ServerStreamInterceptor { return func(srv interface{}, ss grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) error { ctx, span := tracer.StartSpan(ss.Context(), info.FullMethod) defer span.End() return handler(srv, serverStream{ss, ctx}) } } type serverStream struct { grpc.ServerStream ctx context.Context } func (s *serverStream) Context() context.Context { return s.ctx }

4. HTTP中间件集成

func Middleware(tracer *Tracer) gin.HandlerFunc { return func(c *gin.Context) { ctx, span := tracer.StartSpan( c.Request.Context(), c.FullPath(), attribute.String("http.method", c.Request.Method), ) defer span.End() c.Request = c.Request.WithContext(ctx) c.Next() span.SetAttributes( attribute.Int("http.status", c.Writer.Status()), ) } }

5. 总结

OpenTelemetry为Go语言提供了完整的分布式追踪能力,通过统一的标准和丰富的SDK支持,可以轻松实现微服务架构下的全链路追踪。

http://www.jsqmd.com/news/779278/

相关文章:

  • 【Docker Desktop】win11上部署gitlab代码仓库管理系统
  • 并发与并行编程模型演进:从锁到Actor到协程——测试视角下的缺陷模式与质量保障
  • Windows Defender终极移除方案:5分钟彻底解决系统性能瓶颈
  • 基数统计-原理和应用场景
  • 宝塔面板如何监控网站存活_配置心跳检测与告警通知
  • AI4S企业品牌定位怎么做:从复杂能力到市场判断,企业到底卡在了哪一步
  • 保姆级教程:用Docker Compose一键部署青龙面板,告别手动敲命令
  • Serial RapidIO技术解析与嵌入式系统应用
  • 圣禾堂在线正式成为AIT创瑞科技授权代理商,全品类元器件现货供应保障升级
  • 综合能源站“柔性容量”建设方案——以台区分布式储能实现变压器动态增容
  • 安川弧焊机器人焊接节气装置选型指南:实现节气40%-60%的节气效果
  • javascript中函数解析过程
  • 全国求职辅导公司怎么找?核心标准与靠谱平台解析 - 得赢
  • Pine Script V6开发效率革命:AI编辑器配置实战指南
  • 航空板块集体冲高,汇添富航空ETF(159257.SZ)单日涨近3%
  • SP3232EEY-L/TR:3V-5.5V宽压收发器 MaxLinear原厂方案,为工业通信与智能设备提供通用串行接口
  • H27Q1T8QAM6R-BCF海力士闪存H27Q1TLYEB9R-BCF
  • 优质百度蜘蛛池租赁服务:选择、运用与核心价值解析
  • 何帆律师团队|保险拒赔维权全指南(2026最新版) - 测评者007
  • 暗黑3技能连点器终极指南:5分钟掌握D3KeyHelper的完整配置技巧
  • 当AI遇上浏览器:一个漫画式的Playwright + CDP完全指南
  • 职场跳槽猎头公司评测:4家机构核心能力对比 - 得赢
  • 我是如何为客服系统自建文件服务器,节省运营成本的
  • ARC 218
  • 通过 Taotoken CLI 工具一键配置开发环境与常用 AI 工具
  • 学术界的“智能导航仪“来了!宏智树AI如何用自研大模型重构论文写作体验
  • Linux 开发环境虚拟化全指南
  • AI自动生成Git提交信息:llmc工具实战指南与Conventional Commits规范
  • 2026年4月目前热门的换电平台企业推荐,大功率换电柜/电动车电池充电柜/换电柜平台,换电平台服务商怎么选择 - 品牌推荐师
  • 如何设计MongoDB的金融交易流水表_防篡改与精确金额存储Decimal128.txt