能否通过OpenTelemetry Agent将Java应用指标推送到Grafana Agent?
Grafana Agent v0.31 本身的原生 metrics 配置段确实没有像 traces 那样的 receivers 块,但你可以通过两种方式实现指标的推送采集:
1. 启用 OpenTelemetry Collector 兼容模式
Grafana Agent 基于 OpenTelemetry Collector 构建,v0.31 支持通过 otelcol 配置块启用完整的 OTel Collector 功能,这样就能配置 OTLP 接收器来接收 Java 应用通过 OTel Java Agent 推送的指标。
示例配置
在 Grafana Agent 的配置文件中添加以下块:
otelcol: # 配置 OTLP 接收器,支持 gRPC 和 HTTP receivers: otlp: protocols: grpc: endpoint: "0.0.0.0:4317" # 默认 OTLP gRPC 端口 http: endpoint: "0.0.0.0:4318" # 默认 OTLP HTTP 端口 # 批量处理指标,减少网络请求 processors: batch: {} # 将指标导出到目标存储(比如 Grafana Mimir、Prometheus 或 Agent 自身的 metrics 管道) exporters: prometheus: endpoint: "http://localhost:9090/api/v1/write" # 替换为你的存储端点 # 定义 metrics 处理流水线 service: pipelines: metrics: receivers: [otlp] processors: [batch] exporters: [prometheus]
配置完成后,Java 应用的 OTel Agent 只需指向 Agent 的 OTLP 端点即可推送指标。
2. 使用 Prometheus Remote Write 直接推送
如果不想启用 OTel Collector 模式,可以让 Java 应用通过 Micrometer 的 Prometheus Remote Write Exporter 直接将指标推送到 Grafana Agent 的 Remote Write 端点。
步骤1:配置 Grafana Agent 接收 Remote Write
确保 Agent 的 prometheus 模块启用了 Remote Write 接收(v0.31 默认开启,端点为 /prometheus/api/v1/write,默认端口为 Agent 的 HTTP 端口 12345),示例配置:
prometheus: # 配置最终的指标存储(比如 Grafana Mimir) remote_write: - url: "http://your-mimir-instance:9009/api/v1/write" # 启用 Remote Read(可选) remote_read: {}
步骤2:配置 Java 应用推送指标
以 Spring Boot 为例,添加 Micrometer Prometheus Remote Write 依赖,并在配置文件中添加:
# 启用 Prometheus Remote Write 导出 management.metrics.export.prometheus.remote-write.enabled=true # 指定 Grafana Agent 的 Remote Write 端点 management.metrics.export.prometheus.remote-write.url=http://grafana-agent:12345/prometheus/api/v1/write # 可选:调整推送频率 management.metrics.export.prometheus.remote-write.interval=15s
补充说明
Grafana Agent 早期版本的 metrics 模块基于 Prometheus 的拉取(scrape)逻辑设计,后续版本(v0.32+)逐步对齐了 OpenTelemetry Collector 的架构,将 receivers 整合到了主配置的 metrics 段中,但 v0.31 只能通过上述两种方案实现推送采集。
内容的提问来源于stack exchange,提问作者amseager

