OpenTelemetry Collector 集成测试环境搭建:Docker Compose全栈方案

OpenTelemetry Collector 集成测试环境搭建:Docker Compose全栈方案

【免费下载链接】opentelemetry-collector OpenTelemetry Collector 【免费下载链接】opentelemetry-collector 项目地址: https://gitcode.com/GitHub_Trending/op/opentelemetry-collector

为什么需要Docker Compose测试环境?

你是否还在为分布式追踪系统的本地验证头疼?是否在多组件联调时被环境配置搞得焦头烂额?本文将带你用Docker Compose快速搭建OpenTelemetry Collector的全栈测试环境,实现"一键启动、零配置验证"的开发体验。

读完本文你将获得:

  • 3分钟快速部署Collector+观测后端的完整链路
  • 可视化界面实时验证追踪数据流转
  • 可复用的配置模板适配不同测试场景
  • 性能压力测试的环境准备方案

环境准备与兼容性检查

支持的操作系统与架构

根据官方文档docs/platform-support.md,Collector提供三级平台支持,Docker部署推荐使用以下Tier 1/2平台:

平台支持级别测试状态
linux/amd64Tier 1完整CI测试,推荐生产使用
linux/arm64Tier 2基础测试,适合边缘设备
darwin/arm64Tier 2M1/M2芯片Mac兼容

注意:Windows系统需启用WSL2后端,具体配置参考docs/platform-support.md

硬件资源要求

  • 最低配置:2核CPU,4GB内存,10GB磁盘空间
  • 推荐配置:4核CPU,8GB内存,SSD存储

基础架构设计

测试环境组件构成

本次搭建包含三大核心组件,形成完整数据采集-处理-展示链路:

mermaid

各组件功能说明:

  • Collector:核心数据处理节点,使用examples/local/otel-config.yaml配置
  • Jaeger:分布式追踪可视化,提供调用链查询界面
  • Prometheus+Grafana:指标收集与可视化展示
  • 测试应用:生成模拟追踪数据的演示服务

端口占用规划

为避免端口冲突,建议预留以下端口范围:

组件端口号用途说明
Collector GRPC4317OTLP协议默认接收端口
Collector HTTP4318HTTP协议接收端口
Jaeger UI16686追踪数据可视化界面
Grafana3000指标仪表盘
ZPages55679Collector内部状态监控

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的内部追踪状态:

Collector ZPages状态页

图片来源: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:

Jaeger追踪查询结果

图片来源: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的性能指标:

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错误时:

  1. 检查冲突进程:sudo lsof -i :4317
  2. 修改映射端口:4317:431743170:4317
  3. 清理残留容器:docker-compose down -v

数据不显示排查流程

  1. 检查Collector日志:docker-compose logs otel-collector | grep error
  2. 验证网络连通性:docker-compose exec otel-collector curl jaeger:14250
  3. 查看ZPages状态:http://localhost:55679/debug/pipelinez
  4. 检查配置文件挂载:docker-compose exec otel-collector cat /etc/otelcol/config.yaml

总结与后续优化方向

通过本文配置,你已拥有功能完备的Collector测试环境。这个环境不仅可用于日常开发验证,还能扩展为CI/CD流水线的集成测试环节。

建议后续可优化:

  1. 添加docker-compose.override.yml实现环境差异化配置
  2. 集成Chaos Monkey工具测试容错能力
  3. 配置文件版本控制与模板化管理

收藏本文,下次搭建Collector环境直接复用!关注获取更多OpenTelemetry实践指南。

附录:参考资源

【免费下载链接】opentelemetry-collector OpenTelemetry Collector 【免费下载链接】opentelemetry-collector 项目地址: https://gitcode.com/GitHub_Trending/op/opentelemetry-collector

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值