You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Otel-java Agent、Alloy和Mimir时同名不同标签的指标丢失问题

Otel-java Agent、Alloy和Mimir时同名不同标签的指标丢失问题

看起来你遇到了同名多标签指标在链路中丢失的问题——Spring Boot的Prometheus端点能正常看到所有指标,但到Grafana就只剩第一个标签值的指标了。我来帮你一步步排查和解决这个问题:

第一步:先确认Alloy是否真的收到了所有指标

首先要排除Alloy之前的环节(Otel Java Agent → Alloy)是否有丢失,最简单的方法是在Alloy里加一个debug导出器,直接打印收到的所有指标:

  1. 在你的Alloy配置中添加debug导出器:
otelcol.exporter.debug "metric_debug" {}
  1. 修改otelcol.processor.attributes "add_attributes"的输出,把指标同时发给debug导出器:
output {
  metrics = [
    otelcol.processor.transform.sanitize_resource_attrs.input,
    otelcol.exporter.debug.metric_debug.input
  ]
}
  1. 重启Alloy,然后触发你的服务指标增量,查看Alloy的日志。如果debug日志里能看到outcome=completed和outcome=failed的指标,说明问题出在Alloy → Mimir的环节;如果看不到,那问题就在Otel Java Agent到Alloy之间。

情况1:Alloy没收到所有指标(问题在Otel Java Agent)

如果debug里只有outcome=incoming,那得检查Otel Java Agent的配置和行为:

  • 检查Agent核心配置:确保你加了正确的JVM参数,比如:

    -javaagent:path/to/opentelemetry-javaagent.jar
    -Dotel.metrics.exporter=otlp
    -Dotel.exporter.otlp.endpoint=http://your-alloy-ip:4317
    -Dotel.instrumentation.micrometer.enabled=true
    -Dotel.service.name=your-service-name
    

    重点确认otel.metrics.exporter=otlp(不是prometheus),且otel.instrumentation.micrometer.enabled=true(默认是true,但最好显式指定)。

  • 开启Agent debug日志:加JVM参数-Dotel.javaagent.debug=true,或者调整日志级别到debug,查看Agent导出指标的日志,看有没有关于completed/failed指标的报错或者丢弃信息。

  • 升级Agent版本:旧版本的Otel Java Agent可能存在Micrometer多标签指标转换的bug,建议升级到最新稳定版(比如v1.30+)。


情况2:Alloy收到了所有指标(问题在Alloy → Mimir)

如果debug里能看到三个指标,但Mimir只存了第一个,那排查Mimir和Alloy的导出配置:

  • 检查Mimir的OTLP端点配置:确认Mimir的otlp.metrics.receiver是开启的,且没有配置严格的过滤规则。另外,查看Mimir的日志,有没有关于指标 ingestion 失败的报错(比如标签长度超限、重复时间序列等)。

  • 检查Alloy的batch处理器:虽然你用了默认的batch配置,但可以尝试调整参数,比如增大send_batch_max_size:

    otelcol.processor.batch "mimir" {
      send_batch_max_size = 1000
      send_batch_size     = 200
      timeout             = 10s
    
      output {
        metrics = [otelcol.exporter.otlphttp.mimir.input]
      }
    }
    
  • 检查Mimir的租户限制:确认Mimir的limits.per_tenant_metric_stream_limit没有设得太小(比如只允许1个流),这个参数控制每个租户能存储的指标流数量,默认是很大的,但如果被修改过可能出问题。


额外排查点

  • 检查指标的时间序列唯一性:确保三个指标的除了outcome标签外,其他标签(比如service.name、instance等)是一致的吗?如果其他标签不一样,Mimir会把它们当成不同的流,但你说只有第一个能看到,所以这个可能性较低,但可以确认下。

  • 用OTLP CLI直接测试Mimir:绕过Agent和Alloy,直接用OTLP CLI发送三个测试指标到Mimir的OTLP端点,看是否都能在Grafana看到。如果能,那问题肯定在Agent或Alloy的环节;如果不能,那就是Mimir的配置问题。

备注:内容来源于stack exchange,提问作者JoBos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 18:14:51