Prometheus學習系列(三)之Prometheus 概念:數據模型、metric類型、任務、實例


前言

本文來自Prometheus官網手冊1Prometheus官網手冊2 和 Prometheus簡介

說明

Prometheus從根本上存儲的所有數據都是時間序列: 具有時間戳的數據流只屬於單個度量指標和該度量指標下的多個標簽維度。除了存儲時間序列數據外,Prometheus還可以生成臨時派生的時間序列作為查詢的結果。

metrics和labels(度量指標名稱和標簽)

每一個時間序列數據由metric度量指標名稱和它的標簽labels鍵值對集合唯一確定。

這個metric度量指標名稱指定監控目標系統的測量特征(如:http_requests_total- 接收http請求的總計數)。 

注意:冒號保留用於用戶定義的錄制規則。 它們不應被exporter或直接儀表使用。

labbels開啟了Prometheus的多維數據模型:對於相同的度量名稱,通過不同標簽列表的結合, 會形成特定的度量維度實例。(例如:所有包含度量名稱為/api/tracks的http請求,打上method=POST的標簽,則形成了具體的http請求)。這個查詢語言在這些度量和標簽列表的基礎上進行過濾和聚合。改變任何度量上的任何標簽值,則會形成新的時間序列圖。

metric度量指標可能包含ASCII字母、數字、下划線和冒號,他必須配正則表達式[a-zA-Z_:][a-zA-Z0-9_:]*。

label標簽名稱可以包含ASCII字母、數字和下划線。它們必須匹配正則表達式[a-zA-Z_][a-zA-Z0-9_]*

帶有_下划線的標簽名稱被保留內部使用,標簽labels值包含任意的Unicode碼。

具體詳見metrics和labels命名最佳實踐

樣本

樣本形成了實際的時間序列數據列表。每個采樣值包括:

  • 一個64位的浮點值
  • 一個精確到毫秒級的時間戳

Notation(符號)

表示一個度量指標和一組鍵值對標簽,需要使用以下符號:

[metric name]{[label name]=[label value], ...}

例如,度量指標名稱是api_http_requests_total, 標簽為method="POST", handler="/messages" 的示例如下所示:

api_http_requests_total{method="POST", handler="/messages"}

這些命名和OpenTSDB使用方法是一樣的。

度量指標類型

Prometheus客戶端庫提供了四核心的metrics類型,這四種類型目前僅在客戶端庫和wire協議中區分。Prometheus服務還沒有充分利用這些類型,將來可能會發生改變。

Counter(計數器)

counter 是表示單個單調遞增計數器的累積度量,其值只能在重啟時增加或重置為零。 例如,您可以使用計數器來表示所服務的請求數,已完成的任務或錯誤。

不要使用計數器來暴露可能減少的值。例如,不要使用計數器來處理當前正在運行的進程數,而是使用gauge。

客戶端使用計數器的文檔:

Gauge(測量器)

gauge是一個度量指標,它表示一個既可以遞增, 又可以遞減的值。

測量器主要測量類似於溫度、當前內存使用量等,也可以統計當前服務運行隨時增加或者減少的Goroutines數量

客戶端使用計量器的文檔

Histogram(柱狀圖)

直方圖對觀察結果進行采樣(通常是請求持續時間或響應大小等),並將其計入可配置存儲桶中。它還提供所有觀察值的總和。基本度量標准名稱為<basename>的直方圖在scrape期間顯示多個時間序列:

  • 暴露的觀察桶的累積計數器:<basename>_bucket{le="<upper inclusive bound>"}
  • 所有觀測值的總和:<basename>_sum
  • 已觀察到的事件數:<basename>_count,和<basename>_bucket{le="+Inf"}相同

使用histogram_quantile函數, 計算直方圖或者是直方圖聚合計算的分位數閾值。 一個直方圖計算Apdex值也是合適的, 當在buckets上操作時,記住直方圖是累計的。詳見直方圖和總結

客戶庫的直方圖使用文檔:

Summary

類似histogram柱狀圖,summary是采樣點分位圖統計(通常是請求持續時間和響應大小等)。雖然它還提供觀察的總數和所有觀測值的總和,但它在滑動時間窗口上計算可配置的分位數。基本度量標准名稱<basename>summary在scrape期間公開了多個時間序列:

  • 流φ-quantiles (0 ≤ φ ≤ 1), 顯示為<basename>{quantiles="[φ]"}
  • <basename>_sum, 是指所有觀察值的總和
  • <basename>_count, 是指已觀察到的事件計數值

有關φ-分位數,Summary用法和histogram圖差異的詳細說明,詳見histogram和summaries

有關summaries的客戶端使用文檔:

任務與實例

就Prometheus而言,pull拉取采樣點的端點服務稱之為instance,通常對應一個過程(實例)。具有相同目的的instance,例如,為可伸縮性或可靠性而復制的流程稱為作業,構成了一個job。

例如, 一個被稱作api-server的任務有四個相同的實例。

job: api-server
instance 11.2.3.4:5670
instance 21.2.3.4:5671
instance 35.6.7.8:5670
instance 45.6.7.8:5671 

自動化生成的標簽和時間序列

當Prometheus拉取一個目標,會自動地把兩個標簽添加到度量名稱的標簽列表中,分別是:

job: 目標所屬的配置任務名稱。
instance: 被抓取的目標網址的一部分: host:port

如果以上兩個標簽二者之一存在於采樣點中,這個取決於honor_labels配置選項。詳見文檔

對於每個采樣點所在服務instance,Prometheus都會存儲以下的度量指標采樣點:

up{job="[job-name]", instance="instance-id"}:1,表示采樣點所在服務健康;0,標識抓取失敗
scrape_duration_seconds{job="[job-name]", instance="[instance-id]"}: 抓取的持續時間
scrape_samples_post_metric_relabeling{job="<job-name>", instance="<instance-id>"}: 應用度量標准重新標記后剩余的樣本數。
scrape_samples_scraped{job="<job-name>", instance="<instance-id>"}: 目標暴露的樣本數量。

運行時間序列對於實例可用性監視很有用。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM