Micrometer 1.13.0:不正确的度量名称声明

问题描述 投票:0回答:1

我在使用 Micrometer 1.13.0 时遇到问题,其中一个指标名称声明输出不正确。它输出的是

# TYPE jvm_info gauge
,而不是预期的
# TYPE jvm info
。该指标是 Spring Boot 的内置指标。 这个问题导致普罗米修斯无法从我的服务中抓取指标。

详情:

  • 千分尺版本:1.13.0
  • 普罗米修斯版本:2.53.0
  • Spring引导版本:3.3.0
  • 公制端点输出(1.13之前)
# 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
  • 公制端点输出(1.13后):
# 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 micrometer spring-micrometer
1个回答
0
投票

首先让我在评论中解决一些问题; Prometheus 支持两种格式:

  1. “普罗米修斯文本格式”(
    text/plain
    )
  2. OpenMetrics 格式 (
    application/openmetrics-text
    )

OpenMetrics 较新,这就是 Prometheus 服务器更喜欢的,但也可以使用 Prometheus 文本格式(作为后备)。您的应用程序应该能够根据其要求生成两者(请参阅内容协商和

Accept
HTTP 标头)。

您的应用程序应产生以下行为:

  1. 如果您要求 OpenMetrics 格式:
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”不支持
  1. 如果您要求“Prometheus Text format”或您要求不受支持的格式(例如:您的浏览器要求 html/xml/etc):
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 服务器认为它是“普罗米修斯文本格式”)。

© www.soinside.com 2019 - 2024. All rights reserved.