通过 Jaeger 上报 Go 应用数据

8588ll · · 2318 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

在使用链路追踪控制台追踪应用的链路数据之前,需要通过客户端将应用数据上报至链路追踪。本文介绍如何通过 Jaeger 客户端上报 Go 应用数据。 背景信息 数据是如何上报的? 不通过 Agent 而直接上报数据的原理如下图所示。 Report Tracing Data Directly 通过 Agent 上报数据的原理如下图所示。 Report Tracing Data By Agent 如何获取接入点信息? 登录链路追踪控制台,在概览页面上打开查看 Token 开关。 单击需要使用的链路数据采集客户端(Jaeger 或 Zipkin)按钮。 在下方表格中相应地域的相关信息列中,单击接入点信息末尾的复制按钮。 Tracing Analysis Endpoint Section 提示:如果应用部署于阿里云生产环境,则选择内网接入点,否则选择公网接入点。对于 Zipkin,一般情况下请使用 v2 版接入点,v1 版接入点仅限对 Zipkin 十分了解的高阶用户使用。 快速开始 运行以下命令,在 GOPATH 目录下载 Demo 文件。 wget http://arms-apm.oss-cn-hangzhou.aliyuncs.com/tools/tracingtest.zip && unzip tracingtest.zip 修改配置。 注意: 请将 <endpoint> 替换成控制台概览页面上相应客户端和相应地域的接入点。关于获取接入点信息的方法,请参考背景信息中的“如何获取接入点信息”。 sender := transport.NewHTTPTransport( // 设置网关,网关因地域而异。 "<endpoint>", ) 运行以下命令上传数据。 go run main.go http done grpc done 注意: 如果出现以下错误,说明用户名和密码不正确,请更正并重试。 go run main.go http done 2018/09/17 21:11:54 ERROR: error when flushing the buffer: error from collector: 403 2018/09/17 21:11:54 ERROR: error when flushing the buffer: error from collector: 403 登录链路追踪控制台。执行上一步骤后等待 30 秒,即可查看上报的数据。 直接上报数据 引入 jaeger-client-go。 包路径:github.com/uber/jaeger-client-go 版本号:>=2.11.0以 glide 为例,您需要在 glide.yaml 中加入以下配置: package: github.com/uber/jaeger-client-go version: ^2.11.0 subpackages: transport 创建 Trace 对象。 注意: 请将 <endpoint> 替换成控制台概览页面上相应客户端和相应地域的接入点。关于获取接入点信息的方法,请参考背景信息中的“如何获取接入点信息”。 func NewJaegerTracer(service string) (opentracing.Tracer, io.Closer) { sender := transport.NewHTTPTransport( // 设置网关,网关因地域而异。 "<endpoint>", ) tracer, closer:= jaeger.NewTracer(service, jaeger.NewConstSampler(true), jaeger.NewRemoteReporter(sender)) return tracer, closer } 创建 span 实例对象和数据透传。 如果没有 parentSpan: // 创建 Span span := tracer.StartSpan("myspan") // 设置 Tag clientSpan.SetTag("mytag", "123") // 透传 traceId tracer.Inject(span.Context(), opentracing.HTTPHeaders, opentracing.HTTPHeadersCarrier(req.Header)) ... defer span.Finish() 如果有 parentSpan: // 从 HTTP/RPC 对象解析出 spanCtx spanCtx, _ := tracer.Extract(opentracing.HTTPHeaders, opentracing.HTTPHeadersCarrier(r.Header)) span := tracer.StartSpan("myspan", opentracing.ChildOf(spanCtx)) ... defer span.Finish()

有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2318 次点击  ∙  2 赞  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传