Jaeger&ElasticSearch存储链路追踪数据
前言
Jaeger的all in one镜像下是用内存存储(或是临时文件格式存储),容器重启,数据丢失。生产环境下更多是存储到es或是cassandra,这样对于查询或是系统扩展是比较方便的。此处介绍Jaeger的几个组件独立部署以及存储到ElasticSearch中。使用单个拉取镜像创建容器的方式,不通过docker compose批量创建。
Jaeger
组件部分
all in one镜像中,如下几个部分全部打包到一个镜像中。此处对这几个部分使用各组件独立镜像单独部署。
- Jaeger Agent: 一个监听在UDP端口上接收链路数据的网络守护进程,它从应用程序收集,批处理,并发送给Collector,(也可以没有这个,client直接上报)。
- Jaeger Collector: 负责接收Jaeger-client或Jaeger-agent上报的调用链路数据,并通过处理管道运行它们,该管道验证跟踪、对它们进行索引、执行任何转换并最终保存到内存或外部存储系统中,供UI展示。
- Jaeger Query: 查询服务从存储中检索跟踪并呈现 UI 来显示它们。
- DB: 采用EleasticSearch作为存储引擎。
- Jaeger Spark dependencies: 从存储中收集span数据,分析服务间的连接和依赖,并将它们存储起来以便在Jaeger UI 中显示。all in one镜像中不需要这个。
组件镜像
官网提供了镜像的拉取命令,版本,用途等信息。
https://www.jaegertracing.io/download/
Jaeger Collector
拉取镜像
docker pull jaegertracing/jaeger-collector:1.40
创建容器
docker run -d --name=StarCityJaegerCollector -p 9411:9411 -p 14250:14250 -p 14268:14268 -e SPAN_STORAGE_TYPE=elasticsearch -e ES_SERVER_URLS=http://es ip:9200 jaegertracing/jaeger-collector:1.40
端口说明
端口号 | 协议 | 功能 |
---|---|---|
9411 | HTTP | 能通过 JSON 或 Thrift 接收 Zipkin spans,默认关闭 |
14250 | gRPC | 用于jaeger-agent发送model格式的span |
14268 | HTTP | 能直接接收来自客户端的 jaeger.thrift 格式的 span |
14269 | HTTP | 健康检查与自身服务的度量指标 |
Jaeger Agent
拉取镜像
docker pull jaegertracing/jaeger-agent:1.40
创建容器
docker run -d --name=StarCityJaegerAgent -p 6831:6831/udp -p 6832:6832/udp -p 5778:5778/tcp -p 5775:5775/udp -e REPORTER_GRPC_HOST_PORT=Jaeger Collecor Ip:14250 -e LOG_LEVEL=debug jaegertracing/jaeger-agent:1.40
其中REPORTER_GRPC_HOST_PORT即为Agent要上报到Collector的地址
端口说明
端口号 | 协议 | 功能 |
---|---|---|
6831 | UDP | 使用thrift 协议中compact格式协议,接收 jaeger thrift 类型的数据,大多数Jaeger Client所使用 |
6832 | UDP | 使用thrift 协议中binary格式协议,接收 jaeger thrift 类型的数据,为NodeJs的Jaeger Client所使用 |
5778 | HTTP | 服务配置与采样策略 |
5775 | UDP | 使用thrift 协议中compact格式协议,接收 zipkin thrift 类型的数据(无需使用该端口) |
14271 | HTTP | 健康检查与自身服务的度量指标 |
Jaeger Query
拉取镜像
docker pull jaegertracing/jaeger-query:1.40
创建容器
docker run -d --name=StarCityJaegerQuery -p 16686:16686 -p 16687:16687 -e SPAN_STORAGE_TYPE=elasticsearch -e ES_SERVER_URLS=http://es ip:9200 jaegertracing/jaeger-query:1.40
SPAN_STORAGE_TYPE指定存储类型,ES_SERVER_URLS指定ES地址,从其中查询数据。
端口说明
端口号 | 协议 | 功能 |
---|---|---|
16687 | HTTP | 健康检查与自身服务的度量指标 |
16686 | HTTP | 1. /api/* - API 端口路径 2. /- Jaeger UI 路径 |
ElasticSearch存储
如上便可以使用到ElasticSearch作为存储(不考虑Eleastic Search容器的创建),原先内存方式现在转移到ElasticSearch中
发送请求后,能够查询到服务的请求记录与请求路径。
Jaeger Spark Dependencies
当使用内存模式时,可以点击System Architecture查看几个服务间的依赖关系,但当存储挪到ElasticSearch后,再点击便是No service dependencies found. 需要下载Spark dependencies镜像。其作用是从存储中收集span数据,分析服务间的连接和依赖,并存储它们以供以后在 Jaeger UI 中展示。
拉取镜像
docker pull jaegertracing/spark-dependencies:latest
创建容器
docker run --name StarCitySparkDependencies --env STORAGE=elasticsearch --env ES_NODES=http://127.0.0.1:9200 jaegertracing/spark-dependencies
如果在这之前已经有数据生成过,链路信息已存储到es中,那么如上执行完毕后,会见到提示已经生成了几个节点的关系信息,并存储到了es中
可以点击System Architecture查看服务依赖。
当如上运行完毕,该容器便停止了,其本身是个Job,我们需要设置定时启动来生成各节点与关系的信息。
Job定时启动
对于Docker的定时启动设置方式有多种,此处使用crontab来设置
- 打开文件,创建定时任务
crontab -e
- 设置定时启动Job,每5分钟启动依次Job,前面是cron表达式,后面是要执行的命令。
*/5 0 * * * docker restart StarCityJaegerSparkDependencies
- 重启定时任务
systemctl restart crond
- 查看所有定时任务
crontab -l
参考
2022-12-26,望技术有成后能回来看见自己的脚步
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端