0

是否可以在休息端点中公开所有 Spring 指标?

在我们的环境中,Micrometer 无法将指标直接转发到我们的监控系统,然后我的想法是将所有指标暴露在一个 rest 端点(或文件,json 格式,但端点更可取),然后有一个脚本来获取所有立即处理指标,操作有效负载并将指标转发到我们定制的监控 API。

如果千分尺不是正确的选择,那是什么?

编辑

我尝试使用执行器/prometheus 端点。我可以看到端点,但是一旦我到达端点,它就会挂起并且不返回任何内容:

我正在使用 spring boot 2.2.2 并添加了此依赖项

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
    <version>1.3.1</version>
</dependency>

应用程序.yml

management:
  endpoints:
   web:
     exposure:
     include: health, metrics, prometheus
4

2 回答 2

0

在想法的层面上,你做的一切都是正确的,而 Micrometer 确实是通往这里的道路。

pom.xml定义级别,您不需要设置版本:如果micrometer/micrometer-prometheus您的 spring boot 附带的版本或模块与您的定义发生冲突,它可能无法正常工作。

<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
</dependency>

除此之外,如果您只使用 core-micrometer(甚至没有 prometheus 集成),您的metrics端点也会以“通用”格式显示所有指标。Prometheus 以 prometheus 可以抓取的格式显示指标。对于您的用例,这两种方式似乎都可以工作,但您必须熟悉您选择的任何一种方式的格式。

另一个想法:您说应用程序无法转发到监控系统,是因为某些安全限制还是因为您使用了某种自定义解决方案或千分尺无法集成的东西?如果它不是安全的东西,您可以考虑编写自己的千分尺注册表,作为千分尺和监控系统之间的桥梁。

我还想回答一件事:你说端点没有完成。

我只能推测,因为基本上可能有很多原因(其中一个是我上面提到的版本冲突) - 但都是错误,它不应该那样工作。

另一个原因是您可能已经定义了一个以微米为单位的 Gauge,为了进行计算,它会执行一些“昂贵的”计算:进入由于某种原因需要很长时间才能访问的数据库,调用一些昂贵的 http 端点等。

当调用其余端点时,它会获取所有计量原语的“快照”(当前值),对于仪表,它实际上会调用您可以做任何事情的自定义代码,所以我会检查一下。

另一个原因可能是连接/安全配置(请求根本没有到达执行器)但鉴于您提供的信息,我不能说更多......

于 2021-02-16T14:09:22.563 回答
0

您可以使用 Spring Boot 的内置prometheus端点。它公开了所有基于千分尺的指标。它主要用于 Prometheus 服务器的定期获取,但您可以在自己的脚本中执行类似操作,将数据转换为必要的格式并将其转发到您的自定义监控 API。

于 2021-02-16T11:27:11.543 回答