使用 Jersey 和 Micrometer 的 Prometheus Endpoint 中的模板 URL

Templated URLs in Prometheus End Point with Jersey and Micrometer

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

当我有一个纯 Spring REST APIs(使用 Spring Web Annotations)时,prometheus 结果显示如下

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 构建的 APIs,prometheus 指标没有模板化。

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 which causes this issue with jersey. A remedy is mentioned at https://github.com/micrometer-metrics/micrometer/issues/486#issuecomment-372446968 中列出的千分尺似乎存在未解决的问题。当我添加 spring.jersey.type=filter 时,执行器 API 的 none 工作。普罗米修斯端点都不起作用。

我不希望未模板化的 URL 出现在 Prometheus 端点中。由于我的 API 可以有无限多的组合(上面示例中的许多名称),它会创建大量的指标数据,而普罗米修斯服务器将有大量的指标。

非常感谢任何帮助。

我创建了 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