簡體   English   中英

如何在 k8s pod 重啟時對 prometheus 計數器求和

[英]How to sum prometheus counters when k8s pods restart

我在 kube.netes 集群中運行 Prometheus。 一切都在運行 find 並且我的 UI pod 正在計算訪問者。

在此處輸入圖像描述

請忽略標題,您在這里看到的是圖片底部的查詢。 這是一個櫃台。 圖表中的差距是由於 pod 重新啟動造成的。 我有兩個 pod 同時運行!

現在假設我想計算訪問者總數,所以我需要對所有 pod 求和

在此處輸入圖像描述

考慮到第一張圖片,這就是我所期望的,對嗎?

但是,我不希望圖表在 pod 重新啟動時丟失。 我想在指定的時間內累積一些東西(以某種方式忽略 pod 重新啟動)。 希望這是有道理的。 有什么建議么?

更新

下面建議做以下事情

在此處輸入圖像描述

它有點難以看到,因為我已經在那里繪制了所有內容,但建議的答案sum(rate(NumberOfVisitors[1h])) * 3600是那里的連續綠線。 我現在不明白的是它有3個值? 還有為什么21:55之后數值會增加,因為我可以看到之前的一些數值。

由於該方法似乎沒問題,我注意到實際增加實際上是 3,從 1 到 4。在下圖中,我只使用了一個時間序列來減少噪聲

在此處輸入圖像描述

率,然后求和,然后乘以以秒為單位的時間范圍。 這也將處理櫃台上的翻轉。

Prometheus 不提供對計數器求和的功能,這可能會被重置。 此外,Prometheus 中的increase() function 存在一些問題,可能無法使用它來查詢指定時間范圍內的計數器增加:

  • 由於外推,它可能會返回超過 integer 個計數器的小數值。 有關詳細信息,請參閱此問題
  • 它可能會錯過方括號中 lookbehind window 之前的原始樣本與 lookbehind window 內的第一個原始樣本之間的計數器增加。例如,在時間戳t increase(NumberOfVisitors[1m])可能會錯過最后一個原始樣本之間的計數器增加在t-1m時間和(t-1m... t]時間范圍內的第一個原始樣本之前。請在此處此處查看更多詳細信息。
  • 它可能會錯過時間序列中第一個原始樣本的增加。 例如,如果NumberOfVisitors計數器在 Prometheus 第一次刮取該計數器之前增加到 10,那么在第一個樣本的時間范圍內的increase()將少計計數器增加 10。

Prometheus 開發人員將解決這些問題 - 請參閱此設計文檔 同時,可以使用VictoriaMetrics - 它的increase() function 沒有這些問題。

回到最初的問題 - 多個計數器的總和,可能會被重置,可以在 VictoriaMetrics 中使用以下MetricsQL查詢返回:

running_sum(sum(increase(NumberOfVisitor)))

它使用以下功能:

  • increase()用於計算圖表上相鄰點之間每個計數器的增加。
  • sum()用於對圖表上每個點的計算增量求和。
  • running_sum()用於計算圖形上每個點增加的運行總和。

暫無
暫無

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

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