接入阿里云Jaeger踩了个大坑,竟然是因为Jaeger的NodeJS SDK和Golang的实现不一样

本文讲述了作者在使用阿里云ARMS中的Jaeger链路跟踪时遇到的问题,主要在于NodeJS SDK与Golang实现的不同,导致远程采样策略配置出错。通过阅读源代码,作者找到了解决方案,指出SDK应更灵活地遵循OpenTracing API,并建议服务提供商遵守规范。
摘要由CSDN通过智能技术生成

点击上方蓝色“飞雪无情”关注我,设个星标,第一时间看文章

最近需要对NodeJS中的调用进行链路跟踪,所以需要使用Jaeger进行跟踪,这里我们选用的是阿里云ARMS中的Jaeger链路跟踪,但是在Golang项目中使用没问题的链路跟踪,却在NodeJS踩了个大坑。

什么是Jaeger

Jaeger 是用于追踪分布式服务之间事务的开源软件。它用来监控复杂的微服务环境并对其进行故障排除。它实现了OpenTracing API,非常好用,同时它也是CNCF毕业的项目,使用Go语言编写。类似的开源软件还有skywalking等。

接入Jaeger

在Golang语言中接入Jaeger非常简单,仅需几行代码就可以搞定:

// SDK上报需要:设置链路追踪的网关(不同region对应不同的值,从http://tracing.console.aliyun.com/ 的配置查看中获取)
const TracingAnalysisEndpoint = "http://tracing-analysis-dc-hz.aliyuncs.com/adapt_xxxxxx_xxxxx/api/traces"

sender := transport.NewHTTPTransport(
    TracingAnalysisEndpoint,
  )
  tracer, _ := jaeger.NewTracer(service,
    jaeger.NewConstSampler(true),
    jaeger.NewRemoteReporter(sender, jaeger.ReporterOptions.Logger(jaeger.StdLogger)),
  )

这里的TracingAnalysisEndpoint 是链路跟踪的接入点,我这里是以阿里云的为例,你也可以换成自己的。
service 表示微服务的名称,同时我这里使用ConstSampler固定采样率

有了 tracer 后就可以使用它来创建自己的span进行链路跟踪了:

// 创建Span。
span := tracer.StartSpan("myspan")
// 设置Tag。
clientSpan.SetTag("mytag", "123")
// 透传traceId。
tracer.Inject(span.Context(), opentracing.HTTPHeaders, opentracing.HTTPHeadersCarrier(req.Header))
...
defer  span.Finish()

这里不再对链路跟踪展开讲,感兴趣的可以参考 OpenTracing API。

远程采样策略配置

在上面的示例中,我们使用的是固定的采样率,但是这种方式很不灵活,粒度也比较粗,针对这样情况,jaeger支持远程采样策略配置,其实就是在服务端配置后,客户端拉取使用,这样方式可以让服务端控制客户端的采样率,同时也可以根据每个span定制不同的采样率,所以非常方便。

在Go语言中,使用远程采样策略配置同样简单,客户端把上面示例中的 jaeger.NewConstSampler 换成 jaeger.N

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值