使用Otel-java Agent、Alloy和Mimir时同名不同标签的指标丢失问题
看起来你遇到了同名多标签指标在链路中丢失的问题——Spring Boot的Prometheus端点能正常看到所有指标,但到Grafana就只剩第一个标签值的指标了。我来帮你一步步排查和解决这个问题:
第一步:先确认Alloy是否真的收到了所有指标
首先要排除Alloy之前的环节(Otel Java Agent → Alloy)是否有丢失,最简单的方法是在Alloy里加一个debug导出器,直接打印收到的所有指标:
- 在你的Alloy配置中添加debug导出器:
otelcol.exporter.debug "metric_debug" {}
- 修改
otelcol.processor.attributes "add_attributes"的输出,把指标同时发给debug导出器:
output { metrics = [ otelcol.processor.transform.sanitize_resource_attrs.input, otelcol.exporter.debug.metric_debug.input ] }
- 重启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

