【问题标题】:Is there a way to record elapsed time using Prometheus有没有办法使用 Prometheus 记录经过的时间
【发布时间】:2018-06-01 07:24:28
【问题描述】:

我有一个 spring-boot 应用程序,我使用Prometheus 来收集指标数据。 Prometheus 具有诸如 Counter 之类的指标,它可以很好地计算某事发生的次数,Gauge 也可以计数,但可以减少等等。是否有一个指标可以让我跟踪某事的请求持续时间?例如,假设我想记录从进行 api 调用到 api 返回响应之间所花费的时间。我将如何跟踪拨打电话和收到 api 响应之间的时间?然后,是否可以在Y 坐标上创建一个图表,我可以列出响应所花费的时间长度(以秒或毫秒为单位);然后在X 轴上,是否显示时间戳(收集指标的时间)?

【问题讨论】:

    标签: java monitoring grafana prometheus


    【解决方案1】:

    对于时间事件大小,例如 api 延迟,您可能需要Summary

    然后您可以计算aggregate average latency

      sum without (instance)(rate(my_summary_latency_seconds_sum[5m]))
    /
      sum without (instance)(rate(my_summary_latency_seconds_count[5m])
    

    【讨论】:

    • ... 并使用 Summary#startTimer() 获取计时器,并使用 Summary.Timer#observeDuration() 获取经过的时间
    【解决方案2】:

    正如你提到的,你真的应该看看Micrometer 项目。它提供了一个供应商中立的指标 API,支持 Prometheus。 Micrometer 有一个特定的计时器原语:

    Timer
       .builder("my.timer")
       .tags("uri", "/api/endpoint")
       .register(registry)
       .record(() -> {
         /* do something */
       });
    
    // or
    registry.timer("my.timer", "uri", "api/endpoint").record(() -> {
      /* do something */
    });
    

    对于 Spring-Boot 1.5 项目,您将使用 micrometer-spring-legacy 依赖项。对于 Spring-Boot 2(撰写本文时为 2.0.0.M7),千分尺支持包含在 OOTB 中,spring-boot-starter-actuator

    当您提到定时 API 请求时,我假设您使用的是 Spring MVC。自动支持这些时间。 (每个 URI 都有一个 count,请求持续时间的 sum 以及一个额外的 max 用于跟踪时间窗口内的滚动最大值。)

    如果您还不想计算服务器端请求延迟百分比,您也可以启用直方图桶的生成。

    看看documentation

    【讨论】:

      猜你喜欢
      • 2017-12-24
      • 2019-10-02
      • 1970-01-01
      • 1970-01-01
      • 2022-01-02
      • 1970-01-01
      • 2021-02-18
      • 2013-08-30
      • 1970-01-01
      相关资源
      最近更新 更多