在spring boot的管理端口中使用prometheus metrics servlet
Posted
技术标签:
【中文标题】在spring boot的管理端口中使用prometheus metrics servlet【英文标题】:Use prometheus metrics servlet in management port of springboot 【发布时间】:2016-04-22 14:16:47 【问题描述】:我正在使用 prometheus 度量 servlet 来公开我的度量,并提供 java 客户端 api prometheus。
我注册 servlet 的方式与注册任何 serverlt 的方式相同,见下文:
@Bean
public ServletRegistrationBean registerPrometheusExporterServlet(CollectorRegistry metricRegistry)
return new ServletRegistrationBean(new MetricsServlet(metricRegistry), "/metrics");
但是,我想将此 servlet 添加到管理端口,或者如果 prometheus 版本可能会替换 springboot 的默认 /metrics 服务。 可以做这样的事情吗?以及如何?
谢谢, 丹妮拉
【问题讨论】:
【参考方案1】:我不知道你是否能够将 Spring Boot 与 Prometheus 集成,但现在 Prometheus 官方client-java
项目中有一个专用的连接器。
项目的Github页面如下:simpleclient_spring_boot
你可以使用它为你添加以下依赖pom.xml
<dependency>
<groupId>io.prometheus</groupId>
<artifactId>simpleclient_spring_boot</artifactId>
<version>0.0.17</version>
</dependency>
要使用它,请将 Spring Boot 配置添加到您的项目中,如下所示。
@Configuration
public class MetricsConfiguration
@Bean
public ServletRegistrationBean servletRegistrationBean()
DefaultExports.initialize();
return new ServletRegistrationBean(new MetricsServlet(), "/prometheus");
@Bean
public SpringBootMetricsCollector springBootMetricsCollector(Collection<PublicMetrics> publicMetrics)
SpringBootMetricsCollector springBootMetricsCollector = new SpringBootMetricsCollector(
publicMetrics);
springBootMetricsCollector.register();
return springBootMetricsCollector;
现在,Spring Boot Actuator 公开的指标将作为 Prometheus Counters 和 Gauges 提供。
信息发布到您的应用程序的路径/prometheus
。然后你必须指示 Prometheus 使用这些信息,配置如下。
# my global config
global:
scrape_interval: 15s # By default, scrape targets every 15 seconds.
evaluation_interval: 15s # By default, scrape targets every 15 seconds.
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
- job_name: 'your-application-name'
scrape_interval: 5s
metrics_path: '/prometheus'
static_configs:
- targets: ['localhost:8080']
如果您将浏览器指向/metrics
,您将继续看到 Spring Boot 格式的信息。但是,将浏览器指向http://localhost:9090/graph
,您将直接在 Prometheus 查询浏览器中查询此类信息。
试试看this Github pull-request。
更新
在 simpleclient_spring_boot
的下一个版本 0.0.18 中,将注解 @EnablePrometheusEndpoint
添加到 Spring Boot 的配置类中就足以自动配置 Prometheus 适配器(看看这个test)!
希望对你有帮助。
【讨论】:
我做了这个并且它有效,但是在一个工作区中我得到了这个构造函数 ServletRegistrationBean(MetricsServlet, String) 是未定义的,我不知道如何解决 ti。这是什么原因造成的? 忘记配置类。在您的应用程序中使用注释@EnablePrometheusEndpoint
直接从 Boot 启用 Prometheus :)
感谢您的快速响应。我这样做了,现在在哪条路线上查看指标?
通过配置,我可以设置指标 servlet 和 url (/prometheus),我可以在那里看到指标。使用此注释可以在哪里查看指标。我正在访问 /prometheus,我得到:未找到
对不起,已经过去了很多时间。你在/metrics
下看到了什么吗?以上是关于在spring boot的管理端口中使用prometheus metrics servlet的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Spring Boot 中配置 Tomcat 关闭端口?
Spring Boot Management 安全性与端口集的工作方式不同
Spring Boot Test 无法使用 LocalServerPort 注释自动连接端口