1

我正在尝试将千分尺集成到使用 Jersey REST 构建的弹簧应用程序中。我正在使用 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 构建的 API,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中列出的千分尺存在一个未解决的问题,导致球衣出现此问题。https://github.com/micrometer-metrics/micrometer/issues/486#issuecomment-372446968中提到了一种补救措施。当我添加 spring.jersey.type=filter 时,没有一个执行器 API 起作用。普罗米修斯端点都不起作用。

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

非常感谢这里的任何帮助。

4

1 回答 1

2

我创建了一个示例来重现您的描述中的问题,但未能重现它。我可以看到在 Prometheus 抓取端点 ( /management/prometheus) 中使用了 URI 模板,如下所示:

# 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

于 2018-10-06T12:38:21.667 回答