Jaeger是开源、分布式跟踪平台,支持云原生且无限可扩展。
介绍
- Jaeger 受到 Dapper 和 OpenZipkin 的启发,是由
Uber Technologies创建并捐赠给 CNCF 的分布式跟踪平台- Jaeger 于 2017-9-13 被 CNCF 接受为孵化项目,然后于 2019-10-31 转移到毕业成熟度级别
- 它可用于监控基于微服务的分布式系统:
- 分布式上下文传播
- 分布式事务监控
- 根本原因分析
- 服务依赖性分析
- 性能/延迟优化
- 作用:监控复杂分布式系统中的工作流程并排除故障
- Jaeger 使用 Go 语言编写的,在并发性能、对系统资源的消耗底
- 特点
- 高度可扩展性
- 现代化 UI 界面
- 云原生部署,如 Jaeger Operator
- 支持基于 Prometheus metrics
- 与 Zipkin 向后兼容
- 版本兼容性保证
- 与 OpenTelemetry 的关系
- Jaeger 和 OpenTelemetry 有着不同的目标(参考 Jaeger and OpenTelemetry)
- OpenTelemetry 的目标是提供多种语言的应用程序接口(API)和 SDK,允许应用程序将各种遥测数据输出到任意数量的度量和跟踪后端
- Jaeger 主要是跟踪后端,它接收跟踪遥测数据,并对数据进行处理、汇总、数据挖掘和可视化
- Jaeger 项目推荐使用 OpenTelemetry SDK 进行数据采集
- Jaeger 和 OpenTelemetry 有着不同的目标(参考 Jaeger and OpenTelemetry)
- Jaeger 最初设计是为了支持 OpenTracing standard,且 OpenTracing 已经合并到 OpenTelemetry
- 特点
- 通过数据驱动的依赖关系图了解整个系统的架构
- 查看请求时间线和错误;了解应用程序如何运行
- 查找延迟和并发性不足的根源
- 高度上下文化的日志记录
- 使用行李传播诊断请求间争用(排队)和服务耗时
- 使用 opentelemetry-contrib 提供的开源库,免费获取厂商中立的产品
- Jaeger 兼容 Zipkin
架构
- 图片转载自 github,spm arch 参考
Jaeger Collector接收来自代理或直接来自客户的 spans,并将其保存在持久存储器中- 可以作为 OpenTelemetry 的 exporter
- 自 2022 年起,不再支持 Jaeger SDK(aka tracers, client libraries) that implemented the OpenTracing API
Jaeger Agent (deprecated, 已废弃)从 Jaeger 客户端接收 spans 并转发给Jaeger CollectorJaeger Query Service为 Jaeger UI 和从存储中检索 traces 的应用程序接口提供服务Jaeger Ingester收集器的替代方案;从 Kafka 主题读取跨度并保存到存储中jaeger-remote-storage在另一个受支持的后端之上实现远程存储 API 的服务。可用于在多个 Jaeger 进程之间共享单节点存储后端(如内存)- Jaeger 支持的存储后端
- 原生支持两种流行的开源 NoSQL 数据库作为跟踪存储后端:Cassandra 和 Elasticsearch
- 通过 gRPC API 与其他经认证符合 Jaeger 标准的知名数据库集成:TimescaleDB via Promscale、ClickHouse
- 使用 Badger 和简单的内存存储为测试设置提供嵌入式数据库支持
- 由于 ScyllaDB 使用相同的数据模型和查询语言,因此可直接替代 Cassandra
- 社区正在使用其他数据库进行实验,如 InfluxDB、Amazon DynamoDB 和 YugabyteDB(YCQL)
部署
- 官方提供二级制和 docker 镜像,参考
All in One
部署的组件包括:
- Jaeger UI
- jaeger-collector
- jaeger-query
- jaeger-agent
- with an in memory storage component
docker run --rm --name jaeger \
-e COLLECTOR_ZIPKIN_HOST_PORT=:9411 \
-p 6831:6831/udp \
-p 6832:6832/udp \
-p 5778:5778 \
-p 16686:16686 \
-p 4317:4317 \
-p 4318:4318 \
-p 14250:14250 \
-p 14268:14268 \
-p 14269:14269 \
-p 9411:9411 \
jaegertracing/all-in-one:1.57端口说明:
| Port | Protocol | Component | Function |
|---|---|---|---|
| 6831 | UDP | agent | accept jaeger.thrift over Thrift-compact protocol (used by most SDKs) |
| 6832 | UDP | agent | accept jaeger.thrift over Thrift-binary protocol (used by Node.js SDK) |
| 5775 | UDP | agent | (deprecated) accept zipkin.thrift over compact Thrift protocol (used by legacy clients only) |
| 5778 | HTTP | agent | serve configs (sampling, etc.) |
| 16686 | HTTP | query | serve frontend |
| 4317 | HTTP | collector | accept OpenTelemetry Protocol (OTLP) over gRPC |
| 4318 | HTTP | collector | accept OpenTelemetry Protocol (OTLP) over HTTP |
| 14268 | HTTP | collector | accept jaeger.thrift directly from clients |
| 14250 | HTTP | collector | accept model.proto |
| 9411 | HTTP | collector | Zipkin compatible endpoint (optional) |
- 部署示例程序
docker run --rm -it --link jaeger \
-p8080-8083:8080-8083 \
-e OTEL_EXPORTER_OTLP_ENDPOINT="http://jaeger:4318" \
jaegertracing/example-hotrod:1.57 \
all --otel-exporter=otlp- 访问 hotrod 示例应用:http://localhost:8080/ 点击如下链接会产生日志,日志中会展示链接
[find trace] [open trace]- Rachel’s Floral Designs
- Trom Chocolatier
- xxx Desserts
- Amazing Coffee Roasters
- 访问 jaeger-query/UI:http://localhost:16686/

docker-compose
- 参考
- jaeger-docker-compose.yml
- 启动
docker-compose up -dKubernetes
通过 jaegertracing/jaeger-operator 部署,详细参考
# 1. deploy ingress-nginx
# 2. deploy jaeger operator
kubectl create namespace observability # <1>
kubectl create -f https://github.com/jaegertracing/jaeger-operator/releases/download/v1.57.0/jaeger-operator.yaml -n observability # <2>
# 3. Deploying the AllInOne image
kubectl apply -n observability -f - <<EOF
apiVersion: jaegertracing.io/v1
kind: Jaeger
metadata:
name: simplest
EOF最近更新
最新评论