天天看點

Prometheus監控運維實戰三: Prometheus資料格式

在prometheus監控中,對于采集過來的資料,統一稱為metrics資料。metrics資料為時間序列資料,它們按相同的時序,以時間次元來存儲連續資料的集合。

metrics有自定義的一套資料格式,不管對于日常運維管理或者監控開發來說,了解并對其熟練掌握都是非常必要的,本文将對此進行詳細介紹。

每個metrics資料都包含幾個部分:名額名稱、标簽和采樣資料。

名額名稱:用于描述收集名額的性質,其名稱應該具有語義化,可以較直覺的表示一個度量的名額。名稱格式可包括ascii字元、數字、下劃線和冒号。

如:

node_cpu_seconds_total

node_network_receive_bytes_total

标簽: 時間序列标簽為key/value格式,它們給prometheus資料模型提供了次元,通過标簽可以區分不同的執行個體,

node_network_receive_bytes_total{device="eth0"}   表示eth0網卡的資料。

通過标簽 ,prometheus可以在不同次元上對一個或一組資料進行查詢處理。标簽名稱由 ascii 字元,數字,以及下劃線組成, 其中 __ 開頭屬于 prometheus 保留,标簽的值可以是任何 unicode 字元,支援中文。标簽可來自被監控的資源,也可由prometheus在抓取期間和之後添加。

采樣資料:按照某個時序以時間次元采集的資料,其值包含:

一個float64值

一個毫秒級的unix時間戳

結合以上這些元素,prometheus的時間序列統一使用以下格式來表示。

下面為一個node-exporter暴露的資料名額樣本:

Prometheus監控運維實戰三: Prometheus資料格式

第一個#是名額的說明介紹,第二個# 代表名額的類型,此為必須項且格式固定,type+名額名稱+類型。

node_cpu_seconds_total為名額名稱,{}裡面為标簽, 它标明了目前名額樣本的特征和次元,最後面的數值則是該樣本的具體值。

prometheus的時序資料分為counter(計數器),gauge(儀表盤),histogram(直方圖),summary(摘要)四種類型。

counter類型的名額與計數器一樣,會按照某個趨勢一直變化(一般是增加),我們往往用它記錄服務請求總量、錯誤總數等。

如下圖展示就是一個counter類型的metrics資料采集,采集的是prometheus的接口通路量,可看到數值一直在向上增加。

Prometheus監控運維實戰三: Prometheus資料格式

基于counter類型的資料,我們可以清楚某些事件發生的次數,由于資料是以時序的方式進行存儲,我們也可以輕松了解該事件産生的速率變化。

例如,通過rate()函數,擷取api請求量每分鐘的增長率:

與counter不同,gauge類型的名額用于展示瞬時的值,與時間沒有關系,可增可減。該類型值可用來紀錄cpu使用率、記憶體使用率等參數,用來反映目标在某個時間點的狀态。

以下是一個關于記憶體使用量的資料展示,可以看到每個時間點的資料具有随機性,不與其他資料有關聯.

Prometheus監控運維實戰三: Prometheus資料格式

gauge名額簡單且易于了解,對于該類型的名額,我們可以直覺的檢視目标在目前的狀态。

在大多數情況下,我們可以計算名額某個時間段内的平均值來了解情況,如需要知道每分鐘cpu使用率,可通過計算該時間段内采集的資料平均值來擷取。

但在某些場景中,這種方式并不合适。假設某個接口一分鐘内的請求為1萬次,采用平均值的方式計算出響應時間為2s,通過該值我們無法判斷是所有請求都不超過2s,還是有部分較高延遲被平均值拉低,該方法缺乏對于全局的觀察性。對此,prometheus通過summary和histogram類型來解決這樣的問題。

summary 通過計算分位數(quantile)顯示名額結果,可用于統計一段時間内資料采樣結果 ,如中位數(quantile=0.5)、9分位數(quantile=0.9)等。

下面是一個summary類型的名額prometheus_tsdb_wal_fsync_duration_seconds,通過該名額我們可以得知,prometheus進行wal_fsync操作的資料結果中,50%(quantile=0.5)的耗時小于0.051406522,90%(quantile=0.9)的耗時小于0.053670506。

Prometheus監控運維實戰三: Prometheus資料格式

histogram類型與summary類型的名額相似之處在于同樣會反應目前名額的記錄的總數(以_count作為字尾)以及其值的總量(以_sum作為字尾)。不同在于histogram名額直接反應了在不同區間内樣本的個數,區間通過标簽len進行定義,通常它采集的資料展示為直方圖。

histogram可用于請求耗時、響應時間等資料的統計,例如,名額prometheus_tsdb_compaction_chunk_range_bucket即為histogram類型。

Prometheus監控運維實戰三: Prometheus資料格式

prometheus的設計理念偏向于短期監控和問題的及時告警發現,是以它不會保留長期的metric資料。

預設情況下,prometheus隻會在資料庫中保留15天的時間序列資料。如果需要保留更長時間的資料,需要将prometheus資料寫入外部資料存儲。

繼續閱讀