【问题标题】:Prometheus recording rule to keep the max of (rate of counter)Prometheus 记录规则保持最大值 (rate of counter)
【发布时间】:2020-10-02 10:43:52
【问题描述】:

我正面临一个困境。 出于性能原因,我正在为我的 Nginx 请求/秒指标创建记录规则。

原始查询

sum(rate(nginx_http_request_total[5m]))

录音规则

    rules:
    - expr: sum(rate(nginx_http_requests_total[5m])) by (cache_status, host, env, status)
      record: job:nginx_http_requests_total:rate:sum:5m

在原始查询中,我可以看到我的最大流量是 6.6k,但在记录规则中,它是 6.2k。这是 400 TPS 的差异。

这是过去一周的指标

问题:

有没有办法获取原始查询的最大值并将其保存为记录规则。由于是 TPS,我只关心最大值,而不关心最小值。

【问题讨论】:

    标签: linux kubernetes devops prometheus


    【解决方案1】:

    我认为在一些非常短的时间内有 6% 的价值差异是相当不错的。

    在您的查询中,您正在获得(并记录)过去 5 分钟内的平均 TPS。那里没有执行“最大值”。 该值将根据查询评估的确切时间而变化——这可能是您看到原始查询与记录规则存储的值之间存在差异的原因。 Prometheus 在执行 rate() 之类的函数时会推断一些数据。如果您在时间 t 有最后一个数据点,但在 t+30s 运行查询,那么 Prometheus 将尝试在 t+30s 推断值(这通常被注意到,因为离散事件的计数器会显示小数值)

    如果您真的追求峰值,您可能想要使用 irate() 函数。它将在每次评估时使用最近的两个点来计算最近的增长,而不是 rate() 提供的 X 分钟平均值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-19
      • 1970-01-01
      • 1970-01-01
      • 2018-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多