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来设置

  1. 打开文件,创建定时任务
crontab -e
  1. 设置定时启动Job,每5分钟启动依次Job,前面是cron表达式,后面是要执行的命令。
*/5 0 * * * docker restart StarCityJaegerSparkDependencies
  1. 重启定时任务
systemctl restart crond
  1. 查看所有定时任务
crontab -l

参考

  1. https://www.jaegertracing.io/docs/1.40/
  2. https://my.oschina.net/u/2548090/blog/1821372

2022-12-26,望技术有成后能回来看见自己的脚步

posted @ 2022-12-26 15:09  微笑刺客D  阅读(1060)  评论(0编辑  收藏  举报
返回顶部