簡體   English   中英

使用普羅米修斯計算最大值

[英]Calculate Max in value with prometheus

由於我是普羅米修斯新手,我不知道如何表達這個問題:“最后一天每秒處理的最大消息數是多少”。 該指標名為messages_in_total

我試過了

  • max_over_time(messages_in_total{}[1d]) - 但是這會返回計數器值的最大值
  • icrease(messages_in_total{}[1d]) - 但是這會返回計數器增加的數字

我真正需要的是(偽代碼)

1.) 將包含絕對 messages_in_total 的范圍向量轉換為每秒有一個值的范圍向量。

2.) 充分利用它

例子:

  • 初始范圍向量值 = (3000,4000, 7000, 8009)
  • 調整范圍矢量值與每秒的速率(猜測值)= (40, 70, 40)
  • max_value => 每秒處理 70 條消息

有任何想法嗎?

有可能的。

示例查詢:

max_over_time(
   irate( messages_in_total[2m] )[1d:1m]
)

這會:

  1. 最后 1 天
  2. 在 1 天范圍內每 1 分鍾,它將執行irate( messages_in_total[2m[ )
  3. 將其組合成范圍向量
  4. 對所有結果調用 max_over_time

有關更多信息,請參閱子查詢文檔 6. 對於每個

雖然答案返回了過去 24 小時內messages_in_total指標的最大每秒速率,但它存在以下潛在問題:

  • 如果它們之間的間隔(又名scrape_interval )小於一分鍾,它可能會跳過一部分原始樣本。 這可以通過減少冒號后方括號中的step值來解決,因此它不會超過scrape_interval
  • 如果抓取間隔超過 2m(例如 2 分鍾),它可能會返回一個空結果或不完整的結果。 這可以通過將內部方括號中的 lookbehind window 從2m增加到超過 2x scrape_interval的值來解決。
  • 由於子查詢的開銷,它可能會變得非常慢並且耗費資源。
  • 子查詢很容易被誤用,因此它們會默默地返回意想不到的結果。

雖然 Prometheus 沒有為這些問題提供可靠且易於使用的解決方案,但其他類似 Prometheus 的系統可能有解決方案。 例如,以下MetricsQL查詢返回過去 24 小時內messages_in_total時間序列的最大、最小和平均每秒增長率:

rollup_rate(messages_in_total[1d])

它使用rollup_rate function。如果您只需要最大每秒速率,則可以將查詢包裝到label_match function 中,這樣只留下rollup="max" label 的時間序列:

label_match(
  rollup_rate(messages_in_total[1d]),
  "rollup", "max"
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM