23

55世纪最高邀请码18648287,通过 Jaeger 上报 Go 应用数据

 4 years ago
source link: https://www.tuicool.com/articles/NJbABfJ
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

55世纪最高邀请码 18648287 55世纪最高邀请码 18648287

在使用链路追踪控制台追踪应用的链路数据之前,需要通过客户端将应用数据上报至链路追踪。本文介绍如何通过 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中文网 QQ交流群:731990104 或 加微信入微信群:274768166 备注:入群; 公众号:Go语言中文网


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK