搭建链路追踪系统 Jaeger
架构
架构图
架构设计
在设计以 Jaeger
为中心的链路追踪系统时,我们采用微服务架构模式。
Jaeger
作为核心追踪系统,负责收集、存储和展示分布式追踪数据。Elasticsearch
作为后端存储,提供数据的持久化和高效的搜索能力。- 系统还包括
Jaeger Agent
、Collector
、Query
服务和UI
界面、Kibana
。
各服务功能
Jaeger Client
:集成在应用程序中,自动收集追踪数据并发送给Agent
。Jaeger Agent
:运行在每个服务节点上,接收来自Client
的Span
数据,并批量发送到Collector
。Jaeger Collector
:接收处理来自Agent
的数据,并存储到Elasticsearch
。Elasticsearch
:存储追踪数据,提供数据索引和搜索能力。Jaeger Query
:查询Elasticsearch
中的追踪数据,供UI
展示。Jaeger UI
:提供用户界面,使用户能够查询和分析追踪数据。Kibana
: 提供数据可视化能力,支持多种图表展示。
流程概述
流程包括:
- 服务发起调用,
Jaeger Client
在服务端自动创建Span
。 Jaeger Agent
收集Span
并批量发送给Jaeger Collector
。Jaeger Collector
处理接收到的Span
并存储到Elasticsearch
。Jaeger Query
服务从Elasticsearch
获取数据,提供给Jaeger UI
展示。Jaeger UI
展示Span
数据,用户可以查询和分析。Kibana
查看,过滤日志数据,提供数据可视化能力。
部署
部署策略
使用 Docker
部署 Jaeger
及相关服务。利用 Docker Compose
定义服务,实现一键部署和管理。Docker
镜像包括 Jaeger
的 all-in-one
镜像和 Elasticsearch
镜像。Compose
文件配置服务间的网络和端口映射。
docker-compose.yaml
services:
#jaeger链路追踪 — Jaeger for tracing
jaeger:
image: jaegertracing/all-in-one:1.42.0
container_name: jaeger
restart: always
ports:
- "5775:5775/udp"
- "6831:6831/udp"
- "6832:6832/udp"
- "5778:5778"
- "16686:16686"
- "14268:14268"
- "9411:9411"
environment:
- SPAN_STORAGE_TYPE=elasticsearch
- ES_SERVER_URLS=http://root:passwd@elasticsearch:9200
- LOG_LEVEL=debug
networks:
- default
networks:
default:
external:
name: log-collect_looklook_net
Jaeger-ui
kibana-index
jaeger-log
优劣势分析
使用 Jaeger
和 Elasticsearch
的优势
包括:
- 高效性
:Elasticsearch
提供快速的数据索引和查询能力。 - 可扩展性:
Jaeger
和Elasticsearch
都能水平扩展,适应大规模分布式系统。 - 易用性:
Docker
部署简化了环境配置和管理。 - 可视化:
Jaeger UI
提供直观的追踪数据展示。
然而,也存在一些劣势
:
- 资源消耗:
Elasticsearch
作为存储解决方案,可能会占用较多的存储和计算资源。 - 复杂性:
Docker
容器管理和服务编排增加了系统的复杂性。 - 性能调优:需要对
Jaeger
和Elasticsearch
进行适当的配置和调优,以满足性能要求。
综上所述,以 Jaeger
为中心,结合 Elasticsearch
存储的链路追踪系统,提供了一套完整的追踪解决方案,适用于需要高性能和可扩展性的分布式系统。通过 Docker
部署,我们能够实现快速、灵活的系统搭建和管理。
项目地址
Log-Collect
openui-svelte-build
openui-backend-go