【问题标题】:Templated URLs in Prometheus End Point with Jersey and Micrometer带有 Jersey 和 Micrometer 的 Prometheus 端点中的模板 URL
【发布时间】:2018-10-05 17:26:55
【问题描述】:

我正在尝试将千分尺集成到使用 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 构建的 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 可以有无限多的组合(上面示例中的许多名称),它会创建大量的指标数据,而普罗米修斯服务器将拥有大量的指标。

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

【问题讨论】:

    标签: java prometheus micrometer spring-micrometer


    【解决方案1】:

    我创建了a sample to reproduce the problem from your description,但未能重现它。我可以看到在 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

    【讨论】:

    • 嘿,感谢您的帮助。我看到的唯一区别是千分尺版本。我使用的是 1.0.3,而您的项目使用的是 1.0.6。我在 1.0.6 中观察到一个问题,即使我可以使用您的项目看到它,它也将 URL 聚合为 UNKNOWN。 http_server_requests_seconds_count{exception="None",method="GET",status="200",uri="UNKNOWN",} 1.0
    • @user1401472 感谢您的反馈!我更新了我的答案来解决它。
    • 您禁用 web mvc 指标可能是正确的。但我的问题是,我根本没有看到模板化的 URL。因此,在我的示例中 - 我没有看到任何 URI 为“/v1/api/greeting/{name}”的指标。让我更深入地研究它以找出差异。
    • 缺少 micrometer-jersey2 依赖项!。非常感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2023-03-26
    • 2021-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-07
    • 1970-01-01
    相关资源
    最近更新 更多