分布式链路追踪教程(五)---Jaeger线上环境部署
本文主要记录了如何在生产环境中部署 Jaeger各个组件,包括 Agent、Collector、Query、Storage 等等。
1. 概述
测试部署时有官方提供的 all-in-one 的镜像,同时直接将数据存储在内存中,所以部署起来比较方便。
但是线上则建议单独部署各个组件和存储后端(这里采用ES存储)。
1. 架构
完整架构包含如下组件:
- 1)jaeger-agent
- 2)jaeger-collector
- 3)jaeger-query
- 4)jaeger-ingester
- 5)elasticsearch
- 6)kafka
2. 数据流
具体流程如下:
- 1)客户端通过 6831 端口上报数据给 agent
- 2)agent通过 14250 端口将数据发送给 collector
- 3)collector 将数据写入 kafka
- 4)Ingester 从 kafka中读取数据并写入存储后端
- 5)query 从存储后端查询数据并展示
2. 各组件介绍
暂时只部署collector
、agent
、query
和es
这四个组件。
其中collector
、query
和es
可以只部署一个。
但是agent
则建议部署在每一台需要追踪的主机上,这样可以离 client 近一点。
1. agent
jaeger-agent 是客户端代理,需要部署在每台主机上。
Port | Protocol | Function |
---|---|---|
6831 | UDP | 客户端上报jaeger.thrift compact协议数据,大部分客户端都使用这个 |
6832 | UDP | jaeger.thrift binary协议数据。为node客户端单独开的一个端口,因为node 不支持jaeger.thrift compact协议 |
5778 | HTTP | 服务器配置 |
5775 | UDP | zipkin.thrift compact 兼容zipkin的 |
14271 | HTTP | 健康检查和 metrics |
2. collector
收集器,可以部署多个。收集 agent 发来的数据并写入 db 或 kafka。
Port | Protocol | Function |
---|---|---|
14250 | gRPC | jaeger-agent通过该端口将收集的 span以 model.proto 格式发送到 collector |
14268 | HTTP | 客户端可以通过该端口直接将 span发送到 collector。 |
9411 | HTTP | 用于兼容 zipkin |
14269 | HTTP | 健康检查和 metrics |
3. query
UI 界面,主要做数据展示。
Port | Protocol | Function |
---|---|---|
16686 | HTTP | 默认url localhost:16686 |
16686 | gRPC | gRPC查询服务? |
16687 | HTTP | 健康检查和 metrics |
4. ingester
主要从 kafka 中读取数据并写入存储后端。
Port | Protocol | Function |
---|---|---|
14270 | HTTP | 健康检查和 metrics |
5. Storage Backends
用于存储收集的数据。
支持 Cassandra 和 Elasticsearch。
6.Kafka
可以在收集器和后端存储之间做缓冲。
3. docker-compose
使用 docker-compose进行部署。
首先创建一个 docker network。
|
然后将各个组件都放到一个网络里,这样会比较方便。
collector-query
这里暂时collector query 放在一起。
测试完成后可以把 LOG_LEVEL=debug 这个删掉。
|
es
|
kibana
为了方便管理ES中的数据还是部署一个kibana吧
注意:Kibana的版本必须和ES一致
|
agent
|
REPORTER_GRPC_HOST_PORT 用于指定collector的地址,这里是同一个网络所以能直接通过container_name 访问。
4. Metrics
默认情况下,Jaeger microservices以Prometheus格式公开指标。
只需要对外暴露相应端口号即可。
默认端口号如下
Component | Port |
---|---|
jaeger-agent | 14271 |
jaeger-collector | 14269 |
jaeger-query | 16687 |
jaeger-ingester | 14270 |
all-in-one | 14269 |
也可以自定义
- 1)
--admin-http-port
指定端口号 - 2)
--metrics-backend
指定指标数据格式,默认为Prometheus格式,可选格式为expvar. - 3)
--metrics-http-route
指定路由,默认为/metrics
一般用默认格式的就可以了。
在 Prometheus 中增加相应采集任务即可。
5. 参考
https://www.jaegertracing.io/docs/1.20/deployment/