1. 概述
Jaeger有几个组件:
- Jaeger-agent:一个无状态的进程,负责接收并转发数据到Jaeger-collector。
- Jaeger-collector:一个有状态的进程,负责接收并聚合数据,以及提供查询服务。
- Jaeger-query:一个有状态的进程,负责接收查询请求,并返回结果。
2. 部署
2.1 Jaeger-agen
Jaeger-agent可以部署到node上,所有的数据会发送到collector,collector会聚合数据,query负责查询。然后此node上的所有Application都可以连接此agnet,然后agent把数据发给collector。
1 | # 14250是Jaeger collector的grpc端口 |
2.2 Jaeger-collector
Jaeger-collector接受数据,然后内部有个队列,类似logstash,把接受的数据都转发个后端存储,比如Elasticsearch, cassandra. 这里有个非常tricky的地方,在使用命令行部署Jaeger-collector和Jaeger-query的时候,需要先指定环境变量export SPAN_STORAGE_TYPE=elasticsearch
,这里是我很迷惑的地方,为啥要先指定环境变量SPAN_STORAGE_TYPE
,不能也作为参数吗。1
Jaeger-agent和Jaeger-collector都可以支持多种协议,如HTPP, gprc。默认是grpc,而且当要使用HTTP的时候,建议直接连接Collector,而不是Agent。因为Agent使用的UDP接受数据,而非HTTP,并且是grpc的方式,数据结构是protobuffer, 所以对于Web或者mobile的tracing数据,适合用HTTP协议,所以可以发给Jaeger-collector,或者使用一个log service做转发。 2
1 | # 14250是给Jaeger-agent用的grpc端口,4318是标准的OTLP的HTTP端口。 |
Jagerger使用的是Opentracing协议,目前已经不维护了,Opentracing协议已经被OpenTelemetry协议取代了。所以不要继续使用Jager的SDK,而应该使用OpenTelemetry的SDK。
2.3 Jaeger-query
Jaeger-query负责查询,可以查询span,也可以查询traces。它是连接后端的存储服务,如ES。它的前端是用React写的SPA,后端是用go写的。然后把前端build并且压缩后,和后端代码一起打包成一个二进制文件,然后启动。
1 | # Jager-ui源码根目录 |