Prometheus 如何从 otel-collector
获取数据?
Prometheus 不会主动从 otel-collector
拉取 Trace 或 Log,但 可以主动拉取 Metrics 数据。它通过 HTTP(S) + /metrics
端点 访问 otel-collector
,收集 OpenTelemetry 采集的 Metrics。
📌 1. 数据流向
(1) 应用程序 (Java Service)
↓
(2) OpenTelemetry Agent (otel-java-agent)
↓ Push (OTLP)
(3) OpenTelemetry Collector (otel-collector)
↓ Expose /metrics (Prometheus Exporter)
(4) Prometheus (主动 Pull 数据)
- 应用程序:业务代码运行,生成 Metrics。
otel-java-agent
:自动采集 Metrics,并 Push 给otel-collector
。otel-collector
:- 接收 OTLP(OpenTelemetry Protocol)Metrics。
- 通过
prometheus exporter
暴露/metrics
端点。
- Prometheus:
- 主动访问
/metrics
端点,Pull 采集数据。
- 主动访问
📌 2. otel-collector
配置 Prometheus Exporter
在 otel-collector
的 exporters
配置 Prometheus Exporter:
receivers:
otlp:
protocols:
grpc:
http:
exporters:
prometheus:
endpoint: "0.0.0.0:9464" # 这里暴露 Prometheus 可访问的 /metrics 端口
service:
pipelines:
metrics:
receivers: [otlp]
exporters: [prometheus]
📌 配置解析:
otel-collector
通过prometheus
exporter 在9464
端口提供/metrics
。- Prometheus 可以从
http://otel-collector:9464/metrics
拉取数据。
📌 3. Prometheus 配置拉取 otel-collector
Prometheus 需要配置 scrape_configs
来拉取 otel-collector
的 /metrics
:
scrape_configs:
- job_name: "otel-collector"
scrape_interval: 10s
metrics_path: "/metrics"
static_configs:
- targets: ["otel-collector:9464"]
📌 配置解析:
scrape_interval: 10s
每 10 秒拉取一次数据。metrics_path: "/metrics"
访问otel-collector
的 Prometheus 端点。targets: ["otel-collector:9464"]
指定otel-collector
监听的/metrics
端口。
📌 4. 如何验证 otel-collector
是否暴露 /metrics
?
方法 1:手动访问
在 otel-collector
服务器上执行:
curl http://localhost:9464/metrics
如果配置正确,你会看到类似:
# HELP go_gc_duration_seconds A summary of the pause duration of garbage collection cycles.
# TYPE go_gc_duration_seconds summary
go_gc_duration_seconds{quantile="0"} 0.000132
go_gc_duration_seconds{quantile="0.25"} 0.000132
...
表示 /metrics
端点已成功暴露。
方法 2:Prometheus Web 界面
- 访问
http://<Prometheus-Server>:9090/targets
- 找到
otel-collector
,查看是否 状态为 UP。
📌 5. 总结
✅ otel-collector
通过 Prometheus Exporter 暴露 /metrics
端点。
✅ Prometheus 通过 HTTP Pull 拉取 /metrics
数据。
✅ 配置 Prometheus scrape_configs
让它定期拉取 Metrics。
💡 如果你的 Prometheus 没有获取到数据,可以检查:
otel-collector
是否正确暴露了/metrics
(curl
测试)。- Prometheus 配置的
scrape_configs
目标是否正确。 - Prometheus
http://<prometheus>:9090/targets
页面是否显示otel-collector
状态为 UP。
🚀 这样,你就可以用 Prometheus + OpenTelemetry 监控 Java 服务的 Metrics 了! 🎯