prometheus如何選擇數(shù)據(jù)點(diǎn)以及處理counter跳變
1、prometheus如何選擇數(shù)據(jù)點(diǎn)
時(shí)間是怎么進(jìn)來的?范圍和即時(shí)查詢!
您可能已經(jīng)注意到,PromQL 查詢中對時(shí)間的唯一引用是相對引用(例如[5m],回顧 5 分鐘)。那么如何指定絕對圖形時(shí)間范圍或在表中顯示查詢結(jié)果的時(shí)間戳呢?在 PromQL 中,此類時(shí)間參數(shù)與表達(dá)式分開發(fā)送到Prometheus 查詢 API,確切的時(shí)間參數(shù)取決于您發(fā)送的查詢類型。Prometheus 知道兩種類型的 PromQL 查詢:即時(shí)查詢和范圍查詢。
1-1、即時(shí)查詢
即時(shí)查詢用于類表視圖,您希望在其中顯示單個(gè)時(shí)間點(diǎn)的 PromQL 查詢結(jié)果。
即時(shí)查詢具有以下參數(shù):
- PromQL 表達(dá)式。
- 評估時(shí)間戳。
即時(shí)查詢示例:讓我們看一個(gè)即時(shí)查詢示例,看看它的評估是如何工作的
http_requests_total想象一下在給定時(shí)間戳評估表達(dá)式。http_requests_total是一個(gè)即時(shí)向量選擇器,它為具有度量名稱 的任何時(shí)間序列選擇最新樣本http_requests_total。更具體地說,“最新”意味著相對于評估時(shí)間戳“最多 5 分鐘舊且不陳舊”。因此,此選擇器只會(huì)為在評估時(shí)間戳之前最多 5 分鐘具有樣本的系列生成結(jié)果,并且評估時(shí)間戳之前的最后一個(gè)樣本不是過時(shí)標(biāo)記(將系列標(biāo)記為在某個(gè)時(shí)間點(diǎn)終止的顯式方法) Prometheus TSDB 中的特定時(shí)間)。
如果我們在有最近樣本的時(shí)間戳運(yùn)行此查詢,結(jié)果將包含兩個(gè)系列,每個(gè)系列一個(gè)樣本:
請注意,每個(gè)返回樣本的輸出時(shí)間戳不再是原始樣本時(shí)間戳,而是設(shè)置為評估時(shí)間戳。
想象一下在某個(gè)時(shí)間戳執(zhí)行相同的查詢,其中該時(shí)間戳之前的數(shù)據(jù)有 >5m 的間隙:
在這種情況下,查詢將返回空結(jié)果,因?yàn)樗衅ヅ錁颖径继f而無法包含在內(nèi)。
1-2、范圍查詢
范圍查詢主要用于圖形,您希望在其中顯示給定時(shí)間范圍內(nèi)的 PromQL 表達(dá)式。范圍查詢的工作方式與許多完全獨(dú)立的即時(shí)查詢完全相同,這些查詢在給定時(shí)間范圍內(nèi)的后續(xù)時(shí)間步長進(jìn)行評估。當(dāng)然,這是在幕后高度優(yōu)化的,在這種情況下,Prometheus 實(shí)際上并沒有運(yùn)行許多獨(dú)立的即時(shí)查詢。
范圍查詢具有以下參數(shù):
- PromQL 表達(dá)式。
- 一個(gè)開始時(shí)間。
- 結(jié)束時(shí)間。
- resolution step
在開始時(shí)間和結(jié)束時(shí)間之間的每個(gè)解析步驟評估表達(dá)式后,單獨(dú)評估的時(shí)間片將縫合在一起形成單個(gè)范圍向量。范圍查詢允許傳入即時(shí)向量類型或標(biāo)量類型表達(dá)式,但始終返回范圍向量(標(biāo)量或即
時(shí)向量在一定時(shí)間范圍內(nèi)求值的結(jié)果)。
范圍查詢示例:
如果我們將上面的示例表達(dá)式作為范圍查詢進(jìn)行計(jì)算,它將如下所示(示例查詢的解析步驟為 2.5 分鐘):
請注意,每個(gè)評估步驟的行為與獨(dú)立即時(shí)查詢完全相同,并且每個(gè)獨(dú)立即時(shí)查詢沒有查詢總體范圍的概念。另請注意,當(dāng)原始樣本恰好仍然是這兩個(gè)步驟的最新樣本(且不早于 5 分鐘)時(shí),某些后續(xù)解析步驟最終如何選擇相同的基礎(chǔ)原始樣本作為其輸出樣本值。
在這種情況下,最終結(jié)果將是一個(gè)范圍向量,其中包含一定時(shí)間范圍內(nèi)兩個(gè)選定序列的樣本,但也包含某些時(shí)間步長的序列數(shù)據(jù)中的間隙。
2、prometheus處理counter跳變
場景:
某個(gè)counter值對應(yīng)的exporter重啟了,導(dǎo)致counter重新計(jì)數(shù),但是我們不希望因此在計(jì)算速率的時(shí)候出現(xiàn)負(fù)速率等異常結(jié)果
解決方法:發(fā)現(xiàn)并處理counter跳變
以下示例圖顯示了rate()計(jì)算如何處理在提供的窗口下發(fā)生的計(jì)數(shù)器重置。您可以將其想象為rate()從底層“真實(shí)”樣本創(chuàng)建一組“虛擬”樣本。然后根據(jù)虛擬樣本計(jì)算最終速率,就好像從未發(fā)生過重置一樣:
實(shí)際解決原理:
盡管counter一般只會(huì)疊加,但是當(dāng)追蹤它們的過程重置時(shí),它們也會(huì)重置為0 。為了不把這些重置解釋成實(shí)際的負(fù)rate,和counter相關(guān)的函數(shù)具有檢測和處理這些重置的邏輯:如當(dāng)在提供的時(shí)間窗口下迭代樣本時(shí),函數(shù)會(huì)檢查是否有任何樣本的值比前一個(gè)低,并將這種情況解釋為counter重置。Counter在重置后總是從0開始,那么根據(jù)這個(gè)假設(shè),這些函數(shù)只是將新的采樣值加到之前看到的采樣值上,以補(bǔ)償重置。
counter重置處理并非萬能和無損的:文章來源:http://www.zghlxwxcb.cn/news/detail-507065.html
注意:當(dāng)counter重置時(shí),數(shù)據(jù)有可能在Prometheus最后一次拉取之后,重置之前增加。這些增量會(huì)被Prometheus永遠(yuǎn)丟失,且無法找回。為了盡量減少這種影響,重置應(yīng)該只在一段時(shí)間內(nèi)發(fā)生一次,而且要比Prometheus拉取目標(biāo)數(shù)據(jù)的頻率低。文章來源地址http://www.zghlxwxcb.cn/news/detail-507065.html
到了這里,關(guān)于【博客671】prometheus如何選擇數(shù)據(jù)點(diǎn)以及處理counter跳變的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!