Docker安装Jaeger链路追踪平台
介绍
Jaeger 是一个开源的分布式追踪系统,最初由 Uber 开发并开源,现已成为云原生计算基金会(CNCF)的项目之一,它已经有 9 年的成功历史。它主要用于监控和诊断微服务架构中的请求链路,帮助开发者和运维人员理解系统中各个服务的调用关系。
Jaeger 通过为每个请求生成唯一的追踪 ID,记录请求在系统中的完整路径,包括经过的每个服务、调用的方法以及每个步骤的耗时。可以帮助分析系统中每个服务的性能,识别瓶颈和慢请求。通过可视化展示每个 Span 的耗时,开发人员可以快速定位问题所在。
主要优势
- 开源免费:Jaeger 是开源软件,社区版免费使用。
- 易于集成:提供多种语言的客户端库,支持 OpenTracing 标准。如:Go,Java,Python,Node.js,C++
- 强大的可视化:提供直观的 Web UI,方便查看和分析追踪数据。
- 可扩展性:支持多种存储后端,可以根据需求灵活选择。如:Cassandra、Elasticsearch、Kafka 等
应用场景
- 微服务架构:监控和诊断微服务之间的调用链路。
- 性能优化:识别系统中的性能瓶颈。
- 故障排查:快速定位和解决分布式系统中的问题。
- 系统可观测性:提升系统的可观测性,帮助理解系统的运行状态。
Docker默认安装
docker run --rm --name jaeger \
-p 16686:16686 \
-p 4317:4317 \
-p 4318:4318 \
-p 5778:5778 \
-p 9411:9411 \
jaegertracing/jaeger-query:latest
注意:jaeger可以由多种可用服务组成,jaeger-query是一个支持OpenTelemetry标准(OTLP协议)用来查询OpenTarcing跟踪链路跨度引用轨迹的可视化WebUI服务,默认只提供查询后端存储功能与WebUI;如需使用完整Jaeger功能,请下载Jaeger一体式版本(包含WebUI、收集器、查询、代理功能):all-in-one 或 使用 v2 版本,下载请参见官网:Jaeger – Download Jaeger
Portainer平台安装
在Pull image》Image中输入:
jaegertracing/jaeger-query:latest,点击"Pull the image"拉取仓库镜像文件;稍等片刻拉取完毕后,Images列表中将会显示镜像信息;

确认镜像已拉取完毕,同样左侧Containers菜单中进入到容器管理面页,点击"Add container"进入添加容器配置界面;
需要注意的是jaeger-query有多个端口映射,设置docker容器映射端口Port mapping,如下:
- 4317 =》4317:基于OTLP协议上传专用的rpc模式端口;
- 4318 =》4318:基于OTLP协议上传专用的http模式端口;
- 16686 =》16686:访问jaeger-ui平台的http端口
jaeger有多个端口规则,其它参见jaeger官方文档端口说明:
APIs — Jaeger documentation

由于安装的是jaeger-query版本,只提供日志跟踪数据查询功能,默认需要依赖后端数据存储;jaeger-query向后端存储发起查询traces和metrics数据,并进行可视化展示;
Jaeger支持多种后端存储数据库,如下:
- Memory:将接收到的跟踪数据存储在内存中,受内存空间限制,一旦进程退出,数据丢失;
- Badger:是一个可嵌入式的持久键值数据库,类似于RocksDB; (在发布的Jaeger-collector版本中已经将Badger嵌入,做为默认后端存储用),但只适合单节点部署;
- Cassandra:是一个开源的分布式NoSQL持久化数据库系统,Jaeger可以使用Cassandra做为集群的存储后端使用;
- ElasticSearch:是一个是一个分布式、高扩展、高实时的搜索与数据分析引擎、文档型存储系统,Jaeger使用兼容的索引映射和Elasticsearch REST API,从而存储和查询后端数据;
- Kafka:消息队列服务,可用作收集器和实际存储之间的中间缓冲区。Jaeger既可以配置为收集器(将跟踪数据导出到 Kafka 主题),也可以配置为摄取器(从Kafka读取数据并将其写入存储后端)
- OpenSearch:是一款开源的分布式搜索和分析套件,衍生自 Elasticsearch,同样是一个高性能、分布式后端存储与分析引擎(对于大规模生产部署,官方推荐OpenSearch做为后端分布式存储)
除上述官方直接技术支持的后端存储外,还支持集于远程gRPC访问的自定义存储后端,用于扩展Jaeger存储生态系统;
详情参见官方文档描述:
Storage Backends — Jaeger documentation
在Env中添加环境变量:
SPAN_STORAGE_TYPE=grpc,GRPC_STORAGE_SERVER=192.168.1.3:7281,指向后端数据存储服务,当前GRPC_STORAGE_SERVER参数指向的是本地已安装的Quickwit日志搜索引擎docker容器IP和端口,并且Quickwit默认已开启自身跟踪链路和指标功能(Quickwit是一款可配合Jaeger做为后端存储的日志搜索引擎);

在Runtime&resources中分配docker容器运行所需要的cpu、内存、内存交接空间等,此处根据实际硬件条件分配即可;

完成上述配置后,点击Deploy the container按钮发布docker容器并启动Jeager-query服务,稍等片刻没有错误消息提示,即容器运行正常服务启动成功,如有错误提示,可在Containers列表中点击容器日志进行排查;
访问Jaeger-UI
在浏览器中输入:http://docker_ip:16686,进入到Jaeger-UI主页,此时在Service中已经能看到集成的Quickwit后端存储服务名,点击Find Traces查询,在列表中展示后端存储中已记录的跟踪链路数据;

只需要点击Traces列表中的跨度记录,并还可以进一步按层级展示跨度详情与指标可视化视图;

参考:
Getting Started — Jaeger documentation