docker compose 一键初始化全链路监控开发拓扑的核心是通过 opentelemetry collector 统一接入 traces/metrics/logs,并自动分流至 jaeger、prometheus 和 grafana;采用分层 compose 文件(base/monitoring/app)、零代码自动埋点(java/python/go agent)、同网络与时间同步保障关联性。

用 Docker Compose 一键初始化带全链路监控的开发拓扑,核心在于整合 OpenTelemetry(OTel)采集器、Prometheus、Grafana、Jaeger(或 Tempo)和被测服务,通过标准化配置实现开箱即用。关键不是堆组件,而是让指标、日志、链路三者能自动关联、统一采样、低侵入接入。
选型精简:只留必要监控支柱
避免过度设计。开发环境推荐以下最小可行组合:
- OpenTelemetry Collector(OTel):作为统一接收端,同时收 traces(Jaeger/OTLP)、metrics(Prometheus remote_write)、logs(可选,用 Fluent Bit 或 OTel Log Bridge)
- Prometheus:专注抓取 metrics(包括 OTel Collector 自身指标 + 应用暴露的 /metrics)
- Grafana:统一仪表盘,预置 Prometheus + Jaeger/Tempo 数据源面板
- Jaeger(All-in-one)或 Tempo(轻量版):开发阶段 Jaeger 更简单;若已用 Loki 日志,Tempo + Loki 组合更一致
- 示例服务(如 otel-collector-contrib 示例应用):带自动 instrumentation(Java/Python/Go SDK),暴露 /metrics 和 /trace
Compose 文件结构:分层组织,便于复用
不要把所有服务写在一个 docker-compose.yml 里。建议拆为:
- docker-compose.base.yml:定义网络、共享卷、基础环境变量(如 OTEL_EXPORTER_OTLP_ENDPOINT=http://otel-collector:4317)
- docker-compose.monitoring.yml:监控栈(OTel Collector、Prometheus、Grafana、Jaeger)
- docker-compose.app.yml:业务服务(含自动埋点 SDK 和健康检查)
启动时执行:docker compose -f docker-compose.base.yml -f docker-compose.monitoring.yml -f docker-compose.app.yml up -d
OTel Collector 配置:一份 config.yaml 打通三类信号
这是最关键的粘合点。示例片段(用于 Jaeger + Prometheus 场景):
receivers:
otlp:
protocols:
grpc:
http:
prometheus:
config:
scrape_configs:
- job_name: 'otel-collector'
static_configs:
- targets: ['otel-collector:8888']
<p>processors:
batch:
memory_limiter:</p><p>exporters:
jaeger:
endpoint: jaeger:14250
tls:
insecure: true
prometheus:
endpoint: "0.0.0.0:9090"</p><p>service:
pipelines:
traces:
receivers: [otlp]
processors: [batch]
exporters: [jaeger]
metrics:
receivers: [otlp, prometheus]
processors: [memory_limiter, batch]
exporters: [prometheus]</p>
这样应用只需向 otel-collector:4317 发 OTLP 数据,就能自动分流到 Jaeger 查链路、Prometheus 存指标。
应用接入:零代码修改的自动埋点方案
以 Java Spring Boot 为例,不改一行业务代码:
- 下载 opentelemetry-javaagent.jar
- 在 docker-compose.app.yml 中挂载并启用 JVM 参数:
environment:
- OTEL_SERVICE_NAME=auth-service
- OTEL_EXPORTER_OTLP_ENDPOINT=http://otel-collector:4317
- OTEL_RESOURCE_ATTRIBUTES=env=dev
command: >
java -javaagent:/app/opentelemetry-javaagent.jar
-jar app.jar
volumes:
- ./opentelemetry-javaagent.jar:/app/opentelemetry-javaagent.jar
Python/Go 同理,用对应语言的 auto-instrumentation 包即可。所有 HTTP 接口、DB 调用、Redis 等自动产生 trace 和 metrics。
不复杂但容易忽略:确保所有容器在同一个自定义网络下、时间同步(用 network_mode: host 或 NTP 容器)、以及 Grafana 中正确配置数据源 URL(如 Prometheus 填 http://prometheus:9090,而非 localhost)。











