我在使用 Micrometer 1.13.0 时遇到问题,其中一个指标名称声明输出不正确。它输出的是
# TYPE jvm_info gauge
,而不是预期的 # TYPE jvm info
。该指标是 Spring Boot 的内置指标。
这个问题导致普罗米修斯无法从我的服务中抓取指标。
# TYPE jvm_info gauge
# HELP jvm_info JVM version info
jvm_info{application="serviceName",runtime="OpenJDK Runtime Environment",vendor="Eclipse Adoptium",version="17.0.10+7"} 1.0 1719475382493
# TYPE jvm info
# HELP jvm JVM version info
jvm_info{application="serviceName",runtime="OpenJDK Runtime Environment",vendor="Eclipse Adoptium",version="17.0.10+7"} 1 1719475509762
Prometheus 服务器出错:
msg="Append failed" err="invalid metric type \"info\""
Micrometer 1.13 迁移指南中注意到了此更改,但是最新的 prometheus 服务器无法使用此新名称。
还有其他人遇到过这个问题吗?是否有已知的修复或解决方法?
谢谢!
首先让我在评论中解决一些问题; Prometheus 支持两种格式:
text/plain
)application/openmetrics-text
)OpenMetrics 较新,这就是 Prometheus 服务器更喜欢的,但也可以使用 Prometheus 文本格式(作为后备)。您的应用程序应该能够根据其要求生成两者(请参阅内容协商和
Accept
HTTP 标头)。
您的应用程序应产生以下行为:
curl -v -H 'Accept: application/openmetrics-text; version=1.0.0' localhost:8080/actuator/prometheus
你应该得到这样的东西:
< HTTP/1.1 200
< Content-Type: application/openmetrics-text;version=1.0.0;charset=utf-8
# TYPE jvm info
# HELP jvm JVM version info
jvm_info{runtime="OpenJDK Runtime Environment",vendor="Eclipse Adoptium",version="22.0.1+8"} 1
# EOF
请注意:
Content-Type: application/openmetrics-text
#EOF
(也表示使用了OpenMetrics格式)# TYPE jvm info
:这意味着名称为jvm
,类型为info
; info
是仅 OpenMetrics 支持的类型,“Prometheus Text format”不支持curl -v localhost:8080/actuator/prometheus
你应该得到这样的东西:
< HTTP/1.1 200
< Content-Type: text/plain;version=0.0.4;charset=utf-8
# HELP jvm_info JVM version info
# TYPE jvm_info gauge
jvm_info{runtime="OpenJDK Runtime Environment",vendor="Eclipse Adoptium",version="22.0.1+8"} 1
请注意:
Content-Type: text/plain
#EOF
# TYPE jvm_info gauge
:这意味着名称为jvm_info
,类型为gauge
; gauge
支持“Prometheus 文本格式”我对您的问题的猜测是您创建了自己的 Prometheus 端点,而不是使用 Spring Boot 的执行器端点,并且您的应用程序不进行内容协商并返回错误的格式/内容类型(例如:格式是 OpenMetrics 但 Prometheus 服务器认为它是“普罗米修斯文本格式”)。