我正在使用prometheus metric servlet来公开我的指标,使用java客户端api prometheus供应。
我注册servlet的方式与注册任何servelt相同,见下文:
@Bean
public ServletRegistrationBean registerPrometheusExporterServlet(CollectorRegistry metricRegistry) {
return new ServletRegistrationBean(new MetricsServlet(metricRegistry), "/metrics");
}
但是,我想将此servlet添加到管理端口,或者prometheus版本是否可能替换springboot的默认/ metrics服务。 可以这样做吗?怎么样?
谢谢, 丹妮拉
答案 0 :(得分:5)
我不知道您是否能够将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计数器和仪表提供。
信息发布到应用程序的路径/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)!
希望它有所帮助。