【问题标题】:Spring boot micrometer - expose metrics in an endpointSpring Boot 千分尺 - 在端点中公开指标
【发布时间】:2021-02-16 10:56:51
【问题描述】:

是否可以在休息端点中公开所有 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>

application.yml

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

【问题讨论】:

  • 您需要向我们展示更多与执行器相关的配置,您的端点似乎配置不正确。
  • @Manuel 我已经添加了我拥有的所有信息

标签: spring spring-boot micrometer spring-micrometer


【解决方案1】:

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

【讨论】:

  • 我试过了,但它不起作用。我已经更新了主题
【解决方案2】:

在想法层面上,你做的一切都是正确的,而 Micrometer 确实是要走的路。

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

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

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

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

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

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

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

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

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

【讨论】:

  • 感谢您的回答。我会尝试删除版本。是的,您说得对,那里有安全限制(这就是问题所在),而且我们还有一个自定义 api。关于悬挂端点我没有配置任何 Gauge,我的所有配置都在主题中。到目前为止,我没有自定义指标。我只想转发默认的 spring 指标
  • 我试过没有版本,但它仍然挂起
  • 尝试进行线程转储,看看卡在哪里。很有可能您的请求甚至没有到达应用程序
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-10
  • 2019-02-22
  • 2020-03-15
  • 2021-02-28
  • 2022-11-10
  • 2022-06-22
  • 1970-01-01
相关资源
最近更新 更多