Docker Jaeger Agent Setup

Docker Jaeger Agent 部署指南

本文介绍如何使用 Docker 部署 Jaeger Agent。Jaeger 是一个开源的分布式追踪系统,用于监控和排查微服务架构中的请求流程。

📋 前置要求

  • Docker 20.10+ 已安装
  • Docker Compose V2 已安装(推荐)或 Docker Compose V1
  • 如需使用阿里云 Tracing Analysis,需要 Access Token

🚀 快速部署

1. 克隆项目(如果使用项目模板)

1
2
git clone https://github.com/noahzaozao/docker-jaeger-agent.git
cd docker-jaeger-agent

2. 配置环境变量

1
2
cp .env-trunk .env
vi .env

编辑 .env 文件,设置 Jaeger Access Token(如果使用阿里云 Tracing Analysis):

1
JAEGER_ACCESS_TOKEN=your_access_token_here

3. 使用 Docker Compose 部署

1
2
3
4
5
# 使用 Docker Compose V2(推荐)
docker compose up -d

# 或使用旧版
docker-compose up -d

4. 验证部署

1
2
3
4
5
# 查看容器状态
docker compose ps

# 查看日志
docker compose logs jaeger-agent

📝 Docker Compose 配置示例

基础配置(阿里云 Tracing Analysis)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
version: '3.8'

services:
jaeger-agent:
image: jaegertracing/jaeger-agent:latest
container_name: jaeger-agent
command:
- "--reporter.grpc.host-port=tracing-analysis-dc-sh.aliyuncs.com:1883"
- "--jaeger.tags=Authentication=${JAEGER_ACCESS_TOKEN}"
ports:
- "5775:5775/udp" # Zipkin Thrift Compact
- "6831:6831/udp" # Jaeger Thrift Compact
- "6832:6832/udp" # Jaeger Thrift Binary
- "5778:5778" # Config Server
- "14271:14271" # Admin HTTP
restart: unless-stopped
healthcheck:
test: ["CMD", "wget", "--spider", "-q", "http://localhost:14271/"]
interval: 30s
timeout: 10s
retries: 3

完整 Jaeger 部署(包含 Collector 和 UI)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
version: '3.8'

services:
jaeger-agent:
image: jaegertracing/jaeger-agent:latest
container_name: jaeger-agent
command:
- "--reporter.grpc.host-port=jaeger-collector:14250"
ports:
- "5775:5775/udp" # Zipkin Thrift Compact
- "6831:6831/udp" # Jaeger Thrift Compact
- "6832:6832/udp" # Jaeger Thrift Binary
- "5778:5778" # Config Server
restart: unless-stopped
networks:
- jaeger_network
depends_on:
- jaeger-collector

jaeger-collector:
image: jaegertracing/jaeger-collector:latest
container_name: jaeger-collector
environment:
- SPAN_STORAGE_TYPE=elasticsearch
- ES_SERVER_URLS=http://elasticsearch:9200
ports:
- "14250:14250" # gRPC
- "14268:14268" # HTTP
- "14269:14269" # Admin HTTP
restart: unless-stopped
networks:
- jaeger_network
depends_on:
- elasticsearch

jaeger-query:
image: jaegertracing/jaeger-query:latest
container_name: jaeger-query
environment:
- SPAN_STORAGE_TYPE=elasticsearch
- ES_SERVER_URLS=http://elasticsearch:9200
ports:
- "16686:16686" # UI
- "16687:16687" # Admin HTTP
restart: unless-stopped
networks:
- jaeger_network
depends_on:
- elasticsearch

elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.11.0
container_name: elasticsearch
environment:
- discovery.type=single-node
- xpack.security.enabled=false
ports:
- "9200:9200"
volumes:
- elasticsearch_data:/usr/share/elasticsearch/data
restart: unless-stopped
networks:
- jaeger_network

volumes:
elasticsearch_data:

networks:
jaeger_network:
driver: bridge

使用内存存储(开发环境)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
version: '3.8'

services:
jaeger-agent:
image: jaegertracing/jaeger-agent:latest
container_name: jaeger-agent
command:
- "--reporter.grpc.host-port=jaeger-collector:14250"
ports:
- "5775:5775/udp"
- "6831:6831/udp"
- "6832:6832/udp"
- "5778:5778"
restart: unless-stopped
networks:
- jaeger_network
depends_on:
- jaeger-collector

jaeger-collector:
image: jaegertracing/jaeger-collector:latest
container_name: jaeger-collector
environment:
- SPAN_STORAGE_TYPE=memory
ports:
- "14250:14250"
- "14268:14268"
restart: unless-stopped
networks:
- jaeger_network

jaeger-query:
image: jaegertracing/jaeger-query:latest
container_name: jaeger-query
environment:
- SPAN_STORAGE_TYPE=memory
ports:
- "16686:16686"
restart: unless-stopped
networks:
- jaeger_network

networks:
jaeger_network:
driver: bridge

🔧 常用操作

查看日志

1
docker compose logs -f jaeger-agent

查看 Agent 状态

1
2
3
4
5
# 访问健康检查端点
curl http://localhost:14271/

# 查看指标
curl http://localhost:14271/metrics

重启服务

1
docker compose restart jaeger-agent

🔌 应用集成

Java 应用集成

在应用中添加 Jaeger 客户端依赖:

1
2
3
4
5
<dependency>
<groupId>io.jaegertracing</groupId>
<artifactId>jaeger-client</artifactId>
<version>1.8.1</version>
</dependency>

配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import io.jaegertracing.Configuration;
import io.jaegertracing.internal.samplers.ConstSampler;
import io.opentracing.Tracer;

Configuration config = new Configuration("my-service")
.withSampler(new Configuration.SamplerConfiguration()
.withType(ConstSampler.TYPE)
.withParam(1))
.withReporter(new Configuration.ReporterConfiguration()
.withLogSpans(true)
.withAgentHost("localhost")
.withAgentPort(6831));

Tracer tracer = config.getTracer();

Python 应用集成

安装依赖:

1
pip install jaeger-client

配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
from jaeger_client import Config

config = Config(
config={
'sampler': {
'type': 'const',
'param': 1,
},
'logging': True,
},
service_name='my-service',
)
tracer = config.initialize_tracer()

Go 应用集成

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import (
"github.com/uber/jaeger-client-go"
"github.com/uber/jaeger-client-go/config"
)

cfg := config.Configuration{
Sampler: &config.SamplerConfig{
Type: "const",
Param: 1,
},
Reporter: &config.ReporterConfig{
LogSpans: true,
LocalAgentHostPort: "localhost:6831",
},
}

tracer, closer, err := cfg.New("my-service", config.Logger(jaeger.StdLogger))

🔐 安全配置建议

1. 使用 TLS 加密

1
2
3
4
5
6
7
8
command:
- "--reporter.grpc.host-port=tracing-analysis-dc-sh.aliyuncs.com:1883"
- "--reporter.grpc.tls.enabled=true"
- "--reporter.grpc.tls.cert=/tls/client.crt"
- "--reporter.grpc.tls.key=/tls/client.key"
- "--reporter.grpc.tls.ca=/tls/ca.crt"
volumes:
- ./tls:/tls

2. 限制网络访问

生产环境建议不暴露端口,或使用防火墙限制:

1
2
3
4
5
6
7
8
# 不暴露端口,仅内部网络访问
# ports:
# - "5775:5775/udp"
# - "6831:6831/udp"
# - "6832:6832/udp"

networks:
- internal_network

3. 使用环境变量保护敏感信息

1
2
# 使用 .env 文件存储 Access Token
JAEGER_ACCESS_TOKEN=your_token_here

📊 监控与维护

查看 Agent 指标

Jaeger Agent 在 /metrics 端点提供 Prometheus 格式的指标:

1
curl http://localhost:14271/metrics

常见指标

  • jaeger_agent_spans_received_total: 接收的 span 总数
  • jaeger_agent_spans_dropped_total: 丢弃的 span 总数
  • jaeger_agent_reporter_batches_submitted_total: 提交的批次总数

🐛 常见问题

1. Agent 无法连接到 Collector

  • 检查 Collector 地址和端口是否正确
  • 确认网络连通性
  • 查看日志:docker compose logs jaeger-agent

2. 没有追踪数据

  • 确认应用配置的 Agent 地址和端口正确
  • 检查采样率配置
  • 验证应用是否正确发送追踪数据

3. 端口冲突

修改 docker-compose.yml 中的端口映射:

1
2
3
ports:
- "5776:5775/udp" # 使用不同的主机端口
- "6833:6831/udp"

📚 参考资源

0%