有可能在rest端点中公开所有spring度量吗?
在我们的环境中,micrometer不能直接将度量转发给我们的监控系统,那么我的想法是将所有度量暴露在一个rest端点中(或者在一个文件中,json格式,但端点更好),然后使用一个脚本一次获取所有度量,操纵有效负载并将度量转发到我们定制的监视api。
如果千分尺不是正确的选择,它是什么?
编辑
我试着使用致动器/普罗米修斯端点。我可以看到终结点,但只要一碰到终结点,它就会挂起,并且不会返回任何内容:
我使用的是springboot2.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
2条答案
按热度按时间flseospp1#
你可以用Spring Boot的内置
prometheus
终结点。它公开了所有基于测微计的度量。它主要用于prometheus服务器的定期获取,但是您可以在自己的脚本中执行类似的操作,该脚本将数据转换为必要的格式,并将其转发到您的自定义监视api。3pmvbmvn2#
在思想层面上,你做的每件事都是对的,千分尺确实是一种方法。
在
pom.xml
定义时,不需要设置版本:如果micrometer/micrometer-prometheus
您的spring boot附带的模块与您的定义冲突—它可能无法正常工作。除此之外,如果你只使用核心测微计(甚至没有普罗米修斯积分),你有
metrics
也以“公共”格式显示所有度量的端点。普罗米修斯以一种普罗米修斯可以掌握的格式显示度量。对于您的用例来说,似乎两种方法都可以工作,但是您必须熟悉您选择的任何一种方法的格式。另一个想法是:你说应用程序不能转发到监控系统,是因为一些安全约束,还是因为你使用了某种定制的解决方案,或者是micrometer不能集成的东西?如果这不是安全问题,您可以考虑编写自己的测微计注册表,作为测微计和监控系统之间的桥梁。
还有一件事我想回答:你说端点没有完成。
我只能猜测,因为基本上可以有很多原因(其中之一是我上面提到的版本冲突)-但都是错误,它不应该这样工作。
另一个原因是,您可能已经定义了一个千分尺,为了进行计算,它会执行一些“昂贵”的计算:由于某种原因,访问数据库需要花费很长时间,调用一些昂贵的http端点,等等。
当rest端点被调用时,它会获取所有计量原语的“快照”(当前值),因为它实际上调用了可以执行任何操作的自定义代码,所以我应该检查一下。
另一个原因可能是连接性/安全配置(请求根本没有到达执行器),但鉴于您提供的信息,我不能说更多。。。