OpenTelemetry Collector 集成测试环境搭建:Docker Compose全栈方案
为什么需要Docker Compose测试环境?
你是否还在为分布式追踪系统的本地验证头疼?是否在多组件联调时被环境配置搞得焦头烂额?本文将带你用Docker Compose快速搭建OpenTelemetry Collector的全栈测试环境,实现"一键启动、零配置验证"的开发体验。
读完本文你将获得:
- 3分钟快速部署Collector+观测后端的完整链路
- 可视化界面实时验证追踪数据流转
- 可复用的配置模板适配不同测试场景
- 性能压力测试的环境准备方案
环境准备与兼容性检查
支持的操作系统与架构
根据官方文档docs/platform-support.md,Collector提供三级平台支持,Docker部署推荐使用以下Tier 1/2平台:
| 平台 | 支持级别 | 测试状态 |
|---|---|---|
| linux/amd64 | Tier 1 | 完整CI测试,推荐生产使用 |
| linux/arm64 | Tier 2 | 基础测试,适合边缘设备 |
| darwin/arm64 | Tier 2 | M1/M2芯片Mac兼容 |
注意:Windows系统需启用WSL2后端,具体配置参考docs/platform-support.md
硬件资源要求
- 最低配置:2核CPU,4GB内存,10GB磁盘空间
- 推荐配置:4核CPU,8GB内存,SSD存储
基础架构设计
测试环境组件构成
本次搭建包含三大核心组件,形成完整数据采集-处理-展示链路:
各组件功能说明:
- Collector:核心数据处理节点,使用examples/local/otel-config.yaml配置
- Jaeger:分布式追踪可视化,提供调用链查询界面
- Prometheus+Grafana:指标收集与可视化展示
- 测试应用:生成模拟追踪数据的演示服务
端口占用规划
为避免端口冲突,建议预留以下端口范围:
| 组件 | 端口号 | 用途说明 |
|---|---|---|
| Collector GRPC | 4317 | OTLP协议默认接收端口 |
| Collector HTTP | 4318 | HTTP协议接收端口 |
| Jaeger UI | 16686 | 追踪数据可视化界面 |
| Grafana | 3000 | 指标仪表盘 |
| ZPages | 55679 | Collector内部状态监控 |
Docker Compose配置实现
核心配置文件编写
创建docker-compose.yml文件,整合所有测试组件:
version: '3.8'
services:
# OpenTelemetry Collector
otel-collector:
image: otel/opentelemetry-collector:latest
volumes:
- ./otel-config.yaml:/etc/otelcol/config.yaml
ports:
- "4317:4317" # OTLP gRPC receiver
- "4318:4318" # OTLP HTTP receiver
- "55679:55679" # ZPages endpoint
depends_on:
- jaeger
command: ["--config", "/etc/otelcol/config.yaml"]
# Jaeger 追踪可视化
jaeger:
image: jaegertracing/all-in-one:latest
ports:
- "16686:16686" # UI
- "14268:14268" # collector endpoint
environment:
- COLLECTOR_OTLP_ENABLED=true
# Prometheus 指标收集
prometheus:
image: prom/prometheus:latest
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
ports:
- "9090:9090"
command:
- '--config.file=/etc/prometheus/prometheus.yml'
# Grafana 指标可视化
grafana:
image: grafana/grafana:latest
ports:
- "3000:3000"
volumes:
- grafana-data:/var/lib/grafana
depends_on:
- prometheus
volumes:
grafana-data:
Collector配置优化
基于官方示例examples/local/otel-config.yaml修改,增加Jaeger exporter和Prometheus receiver:
extensions:
zpages:
endpoint: 0.0.0.0:55679 # 允许容器外部访问
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317 # 监听所有网络接口
http:
endpoint: 0.0.0.0:4318
prometheus:
config:
scrape_configs:
- job_name: 'otel-collector'
scrape_interval: 10s
static_configs:
- targets: ['otel-collector:8888']
processors:
memory_limiter:
limit_mib: 1536
spike_limit_mib: 512
check_interval: 5s
batch: # 新增批处理优化性能
exporters:
debug:
verbosity: detailed
jaeger: # 输出到Jaeger
endpoint: jaeger:14250
tls:
insecure: true
prometheus: # 输出指标到Prometheus
endpoint: 0.0.0.0:8888
metric_expiration: 10m
service:
extensions: [zpages]
pipelines:
traces:
receivers: [otlp]
processors: [memory_limiter, batch]
exporters: [debug, jaeger]
metrics:
receivers: [otlp, prometheus]
processors: [memory_limiter]
exporters: [debug, prometheus]
环境部署与验证
一键启动命令
在docker-compose.yml所在目录执行:
# 后台启动所有服务
docker-compose up -d
# 查看服务状态
docker-compose ps
# 查看Collector日志
docker-compose logs -f otel-collector
成功启动后会显示类似以下状态:
Name Command State Ports
--------------------------------------------------------------------------------------------------------
otel-collector /otelcol --config=/etc/otel ... Up 0.0.0.0:4317->4317/tcp, 0.0.0.0:4318->4318/tcp,
0.0.0.0:55679->55679/tcp
grafana /run.sh Up 0.0.0.0:3000->3000/tcp
jaeger /go/bin/all-in-one-linux Up 0.0.0.0:14268->14268/tcp, 0.0.0.0:16686->16686/tcp
prometheus /bin/prometheus --config.f ... Up 0.0.0.0:9090->9090/tcp
数据流向验证
1. 访问Collector内部状态页
打开浏览器访问http://localhost:55679/debug/tracez,可以看到Collector的内部追踪状态:
图片来源:docs/img/component-status-runtime-states.png,展示了Collector组件的运行时状态流转
2. 生成测试数据
使用官方提供的OTLP测试工具发送样例数据:
# 安装otel-cli工具
go install github.com/open-telemetry/opentelemetry-collector-contrib/cmd/otel-cli@latest
# 发送测试追踪数据
otel-cli span --name "test-span" --service "demo-service" --endpoint localhost:4317
3. 在Jaeger中查看追踪结果
打开Jaeger UI http://localhost:16686,在服务列表选择demo-service,可以看到刚刚发送的测试span:
图片来源:docs/img/component-status-event-generation.png,展示了追踪数据的事件生成流程
4. 查看指标数据
访问Grafana http://localhost:3000(默认账号密码admin/admin),添加Prometheus数据源(URL填写http://prometheus:9090),导入Dashboard ID 1860 (Node Exporter),可以看到Collector的性能指标:
图片来源:docs/img/component-status-state-diagram.png,展示了Collector组件的状态转换关系
进阶应用场景
多Collector部署测试
修改docker-compose.yml添加另一个Collector实例,模拟分布式部署:
otel-collector-agent:
image: otel/opentelemetry-collector:latest
volumes:
- ./otel-agent-config.yaml:/etc/otelcol/config.yaml
ports:
- "4319:4317" # 避免端口冲突
depends_on:
- otel-collector
使用examples/k8s/otel-config.yaml中的Agent配置作为参考,实现层级部署测试。
压力测试环境配置
添加负载生成工具otel-load-test:
load-test:
image: ghcr.io/open-telemetry/opentelemetry-collector-contrib/loadtest:latest
depends_on:
- otel-collector
command: [
"--otlp-endpoint=otel-collector:4317",
"--duration=60s",
"--rate=100",
"--workers=5"
]
常见问题与解决方案
端口冲突处理
当出现Bind for 0.0.0.0:4317 failed: port is already allocated错误时:
- 检查冲突进程:
sudo lsof -i :4317 - 修改映射端口:
4317:4317→43170:4317 - 清理残留容器:
docker-compose down -v
数据不显示排查流程
- 检查Collector日志:
docker-compose logs otel-collector | grep error - 验证网络连通性:
docker-compose exec otel-collector curl jaeger:14250 - 查看ZPages状态:
http://localhost:55679/debug/pipelinez - 检查配置文件挂载:
docker-compose exec otel-collector cat /etc/otelcol/config.yaml
总结与后续优化方向
通过本文配置,你已拥有功能完备的Collector测试环境。这个环境不仅可用于日常开发验证,还能扩展为CI/CD流水线的集成测试环节。
建议后续可优化:
- 添加
docker-compose.override.yml实现环境差异化配置 - 集成Chaos Monkey工具测试容错能力
- 配置文件版本控制与模板化管理
收藏本文,下次搭建Collector环境直接复用!关注获取更多OpenTelemetry实践指南。
附录:参考资源
- 官方配置示例:examples/
- Collector开发文档:README.md
- Docker镜像版本:otel/opentelemetry-collector
- 性能调优指南:docs/performance.md
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



