Jaeger

简介

Jaeger 是由 Uber Technologies 开源发布的分布式跟踪系统,兼容 OpenTracing API。它用于监控和故障排除基于微服务的分布式系统,包括:

  • 分布式上下文传播
  • 分布式事务监控
  • 根本原因分析
  • 服务依赖分析
  • 性能/延迟优化

    架构图

    image.png

    组件

  • jaeger-client: Jaeger 客户端,是 OpenTracing API 的具体语言实现。

  • jaeger-agent: 用于接收 jaeger-client 发送过来的追踪数据,并将数据批量发送到 jaeger-collector。
  • jaeger-collector: 负责接收 jaeger-client 或者 jaeger-agent 上报来的调用链数据,并做一下校验,最终异步写入后端存储。
  • jaeger-query: 用于接收查询请求,从数据库检索数据并通过 UI 展示。
  • UI: 展示 jaeger-query 检索出的数据。
  • spark job: 基于 spark 的运算任务。

    前置条件

    安装 DataKit

  • <安装 DataKit>

    数据接入

    开启 Input

  1. 开启 jaeger 插件,复制 Sample 文件

    1. cd /usr/local/datakit/conf.d/jaeger
    2. cp jaeger.conf.sample jaeger.conf
  2. 修改 jaeger.conf 文件

增加 address = “127.0.0.1:6832”,请确保 6832 端口未被占用。

  1. [[inputs.jaeger]]
  2. # Jaeger endpoint for receiving tracing span over HTTP.
  3. # Default value set as below. DO NOT MODIFY THE ENDPOINT if not necessary.
  4. endpoint = "/apis/traces"
  5. # Jaeger agent host:port address for UDP transport.
  6. address = "127.0.0.1:6832"
  7. # [inputs.jaeger.tags]
  8. # tag1 = "val1"
  9. # tag2 = "val2"
  10. # ...

参数说明

  • endpoint:接收 jaeger 链路数据的 endpoint
  • address: 链路数据推送的 datakit udp 地址
  1. 重启 DataKit
    1. systemctl restart datakit

    Spring Cloud 链路数据接入

    增加依赖

    1. <dependency>
    2. <groupId>io.opentracing.contrib</groupId>
    3. <artifactId>opentracing-spring-jaeger-web-starter</artifactId>
    4. <version>3.3.1</version>
    5. </dependency>

    增加配置

    application.yaml 增加如下配置
    1. opentracing:
    2. jaeger:
    3. udp-sender:
    4. host: 127.0.0.1
    5. port: 6832
    6. probabilistic-sampler:
    7. sampling-rate: 1
    参数说明

image.png

  • 拓扑图

image.png

  • 火焰图

image.png