带有球衣和千分尺的Prometheus端点中的模板化URL

时间:2018-10-05 17:26:55

标签: java prometheus micrometer spring-micrometer

我正在尝试将千分尺集成到使用Jersey REST构建的spring应用程序中。我正在使用Spring Boot 1.5。

当我具有纯Spring REST API(使用Spring Web注释)时,普罗米修斯结果显示如下

http_server_requests_seconds_count{exception="None",method="GET",status="200",uri="/v2/api/greeting/{name}",} 18.0
http_server_requests_seconds_sum{exception="None",method="GET",status="200",uri="/v2/api/greeting/{name}",} 0.39309228

但是对于使用Jersey生成的API,普罗米修斯度量标准没有模板化。

http_server_requests_seconds_count{exception="None",method="GET",status="200",uri="/v1/api/greeting/Jersey_1",} 1.0
http_server_requests_seconds_sum{exception="None",method="GET",status="200",uri="/v1/api/greeting/Jersey_1",} 0.043685372
http_server_requests_seconds_count{exception="None",method="GET",status="200",uri="/v1/api/greeting/Jersey_2",} 1.0
http_server_requests_seconds_sum{exception="None",method="GET",status="200",uri="/v1/api/greeting/Jersey_2",} 0.006280183
http_server_requests_seconds_count{exception="None",method="GET",status="200",uri="/v1/api/greeting/Jersey_3",} 1.0
http_server_requests_seconds_sum{exception="None",method="GET",status="200",uri="/v1/api/greeting/Jersey_3",} 0.006258448
http_server_requests_seconds_count{exception="None",method="GET",status="200",uri="/v1/api/greeting/Jersey_4",} 1.0
http_server_requests_seconds_sum{exception="None",method="GET",status="200",uri="/v1/api/greeting/Jersey_4",} 0.006635791
http_server_requests_seconds_count{exception="None",method="GET",status="200",uri="/v1/api/greeting/Jersey_5",} 1.0
http_server_requests_seconds_sum{exception="None",method="GET",status="200",uri="/v1/api/greeting/Jersey_5",} 0.006313993

看起来https://github.com/micrometer-metrics/micrometer/issues/486处列出了一个千分尺的未解决问题,导致球衣出现了此问题。 https://github.com/micrometer-metrics/micrometer/issues/486#issuecomment-372446968中提到了一种补救措施。当我添加spring.jersey.type = filter时,所有执行器API均不起作用。普罗米修斯的端点都不起作用。

我不希望非模板化的URL出现在Prometheus端点中。由于我的API可以有无限多种组合(上面的示例中有很多名称),因此它将创建大量的指标数据,而Prometheus服务器将具有指标色调。

我们非常感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

我创建了a sample to reproduce the problem from your description,但未能复制它。我可以看到URI模板在Prometheus抓取端点(/management/prometheus)中正在使用,如下所示:

# HELP http_server_requests_seconds  
# TYPE http_server_requests_seconds summary
http_server_requests_seconds_count{exception="None",method="GET",status="200",uri="/prometheus",} 1.0
http_server_requests_seconds_sum{exception="None",method="GET",status="200",uri="/prometheus",} 0.062559545
http_server_requests_seconds_count{exception="None",method="GET",status="200",uri="/hello/{name}",} 1.0
http_server_requests_seconds_sum{exception="None",method="GET",status="200",uri="/hello/{name}",} 0.02323862
http_server_requests_seconds_count{exception="None",method="GET",status="200",uri="UNKNOWN",} 1.0
http_server_requests_seconds_sum{exception="None",method="GET",status="200",uri="UNKNOWN",} 0.050339909
# HELP http_server_requests_seconds_max  
# TYPE http_server_requests_seconds_max gauge
http_server_requests_seconds_max{exception="None",method="GET",status="200",uri="/prometheus",} 0.062559545
http_server_requests_seconds_max{exception="None",method="GET",status="200",uri="/hello/{name}",} 0.02323862
http_server_requests_seconds_max{exception="None",method="GET",status="200",uri="UNKNOWN",} 0.050339909

我想您的项目中可能存在一些配置错误,或者我可能错过了您描述中的某些要求。

更新:

根据评论,禁用Web MVC指标将提供更清晰的结果,如下所示:

# HELP http_server_requests_seconds  
# TYPE http_server_requests_seconds summary
http_server_requests_seconds_count{exception="None",method="GET",status="200",uri="/hello/{name}",} 1.0
http_server_requests_seconds_sum{exception="None",method="GET",status="200",uri="/hello/{name}",} 0.032691223
# HELP http_server_requests_seconds_max  
# TYPE http_server_requests_seconds_max gauge
http_server_requests_seconds_max{exception="None",method="GET",status="200",uri="/hello/{name}",} 0.032691223

我还在以下提交中更新了示例:https://github.com/izeye/sample-micrometer-spring-boot/commit/14ff838c48cea0c38cf12eeec8e7b211dffe2c50