OpenTracing API 自动埋点调研

一 基本术语

Trace : 表示系统中一次数据或者执行路径的轨迹,可以简单认为是多个Span有向无环图。

Span:Span代表系统中一次逻辑操作运行单元。Span之间会建立嵌套或者顺序排列建立逻辑因果关系。

二 Jaeger组件架构

 

无缓存队列的架构

 

 

有缓存队列架构

三 服务追踪

服务追踪过程

四 应用埋点

1 手动埋点工具Client

针对非java应用,目前只能通过手动埋点的方式上报服务追踪信息,对应的client列表如下 :

Language

GitHub Repo

Go

jaegertracing/jaeger-client-go

Java

jaegertracing/jaeger-client-java

Node.js

jaegertracing/jaeger-client-node

Python

jaegertracing/jaeger-client-python

C++

jaegertracing/jaeger-client-cpp

C#

jaegertracing/jaeger-client-csharp

 

2 手动埋点过程

1. 添加依赖 主要添加opentracing 和 jaeger相关依赖

2. 初始化Tracer对象,并注册到GlobalTracer


io.jaegertracing.Configuration config = new io.jaegertracing.Configuration("demo");

io.jaegertracing.Configuration.SenderConfiguration sender = new io.jaegertracing.Configuration.SenderConfiguration();

// endpoint 为jaeger collector url :14268/api/traces

sender.withEndpoint("http://collertor-host:14268/api/traces ");

config.withSampler(new io.jaegertracing.Configuration.SamplerConfiguration().withType("const").withParam(1));

config.withReporter(new io.jaegertracing.Configuration.ReporterConfiguration().withSender(sender).withMaxQueueSize(10000));

GlobalTracer.register(config.getTracer());

3. 具体方法体内部获取Tracer对象,并记录请求数据

Tracer tracer = GlobalTracer.get();
// 创建 Span
Span span = tracer.buildSpan("parentSpan").withTag("myTag", "spanFirst").start();
tracer.scopeManager().activate(span,false);
tracer.activeSpan().setTag("methodName", "testTracing");
// 业务逻辑
...
span.finish();

4. 多个微服务间通过Context传递Trace信息,比如在HTTP请求中使用Extract/Inject 方法在 HTTP Request Headers 上透传数据

//客户端Inject
tracer.inject(tracer.ac
  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值