jaeger
是开源的,端对端的分布式链路追踪系统。支持多种编程语言和多种存储方式
开始
首先需要启动一个jaeger
服务,官网有着docker
启动开发版jaeger
的方式:
$ docker run -d --name jaeger \
-e COLLECTOR_ZIPKIN_HTTP_PORT=9411 \
-p 5775:5775/udp \
-p 6831:6831/udp \
-p 6832:6832/udp \
-p 5778:5778 \
-p 16686:16686 \
-p 14268:14268 \
-p 14250:14250 \
-p 9411:9411 \
jaegertracing/all-in-one:1.17
这样一个开发版的jaeger
服务就部署好了
上面这么多端口,官网也有介绍,我这里做一下搬运:
Port | Protocol | Component | Function |
---|---|---|---|
5775 | UDP | agent | accept zipkin.thrift over compact thrift protocol (deprecated, used by legacy clients only) |
6831 | UDP | agent | accept jaeger.thrift over compact thrift protocol |
6832 | UDP | agent | accept jaeger.thrift over binary thrift protocol |
5778 | HTTP | agent | serve configs |
16686 | HTTP | query | serve frontend |
14268 | HTTP | collector | accept jaeger.thrift directly from clients |
14250 | HTTP | collector | accept model.proto |
9411 | HTTP | collector | Zipkin compatible endpoint (optional) |
- 其中
16686
端口是WebUI
端口,可以在网页上查看链路的情况,如下图 - 另外本次要用到的tcp端口是: 6831
引入maven
依赖(2.2.6.RELEASE
和Hoxton.SR3
):
<dependency>
<groupId>io.opentracing.contrib</groupId>
<artifactId>opentracing-spring-jaeger-cloud-starter</artifactId>
<version>3.1.1</version>
<exclusions>
<exclusion>
<groupId>io.opentracing.contrib</groupId>
<artifactId>opentracing-spring-rabbitmq-starter</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.opentracing.contrib</groupId>
<artifactId>opentracing-spring-rabbitmq-starter</artifactId>
<version>3.0.0</version>
</dependency>
这里说明一下opentracing-spring-jaeger-cloud-starter:3.1.1
版本默认的rabbitmq链路追踪会有一个空指针的bug,需要手动引入更高版本的opentracing-spring-rabbitmq-starter
才行,所以上面的maven
文件才这样做
配置文件(consul
配置中心):
opentracing:
jaeger:
udp-sender:
host: 192.168.1.104
port: 6831
- 所有的配置都在
JaegerConfigurationProperties
配置文件上- RemoteReporter: 链路报告的配置
flushInterval
:刷新间隔maxQueueSize
:最大(消息?)队列大小
HttpSender
/UdpSender
:以不同的形式配置jaeger
的地址ConstSampler
:是否每条链路都采样ProbabilisticSampler
:采集百分比,比如10条采集一条则为0.1
RateLimitingSampler
:采样器限速RemoteControlledSampler
:未知
- RemoteReporter: 链路报告的配置
- 一些默认的配置
- 如果没有没有给定
spring.application.name
或者opentracing.jaeger.service-name
的值则默认展示的应用名称为:unknown-spring-boot
CompositeReporter
提供了一些默认的配置:LoggingReporter
把追踪日志打印在控制台;RemoteReporter
的默认配置是UdpSender
,指向localhost:6831
ConstSampler
的值为true
。 这意味着每条链路都将被采样- 使用
NoopMetricsFactory
,实际上这意味着不会collec指标
- 如果没有没有给定
在所有的项目都加上opentracing-spring-jaeger-cloud-starter
链路追踪后,可以访问一写接口,然后去到jaeger
网页上查看:
每条链路都可以点进去看详情:
另外说明一点的是jaeger
追踪是按照模块区分好了的:
也就意味着如果你的项目没有用到这个组件的化是可以移除的。这样可以让jar
包苗条一点
总结
之前用的是zipkin
,从部署程度来说jaeger
要友好一点。代码配置上都差不多。
两者最近都属于活跃开发中,值得注意的是jaeger比openzipkin晚诞生4年,但start及watch的数量已有后者的一半了,可谓发展迅猛。另外还有一点值得注意的是jaeger是Cloud Native Computing Foundation的项目,因此云原生的项目都会支持它。 来源