官术网_书友最值得收藏!

第2章 深入Prometheus設計

2.1 指標

每種監控系統都有自己對指標的一套定義和規范,指標的數據格式將直接影響對數據的采集和存儲,所以定義指標時需要充分考慮通用性和擴展性。下面將詳細介紹Prometheus的指標定義、分類和樣本。

2.1.1 Prometheus的指標定義

Prometheus的所有監控指標(Metric)被統一定義為

指標定義涉及指標名稱和標簽這兩部分,下面分別對這兩部分進行講解。

1.指標名稱(metric name)

指標名稱用于說明指標的含義,例如http_request_total代表HTTP的請求總數。

指標名稱必須由字面、數值下畫線或者冒號組成,符合正則表達式[a-zA-Z_:][a-zA-Z0-9_:]*,其中的冒號指標不能用于exporter。

2.標簽(label)

標簽可體現指標的維度特征,用于過濾和聚合。它通過標簽名(label name)和標簽值(label value)這種鍵值對的形式,形成多種維度。

例如,對于指標 http_request_total,可以有{status="200",method="POST"}和{status="200",method="GET"}這兩個標簽。在需要分別獲取GET和POST返回200的請求時,可分別使用上述兩種指標;在需要獲取所有返回200的請求時,可以通過http_request_total{status="200"}完成數據的聚合,非常便捷和通用。

指標的某些標簽是以“__”開頭的,這些標簽是在Prometheus系統內部使用的。在形式上,http_request_total{status="200"} 和 {__name__="http_request_total",status="200"}代表相同的指標。Prometheus 指標采用標簽的方式能夠很好地與容器結合,無論是原生Docker還是Kubernetes,都通過標簽關聯資源。

2.1.2 Prometheus的指標分類

Prometheus指標分為Counter(計數器)、Gauge(儀表盤)、Histogram(直方圖)和Summary(摘要)這4類,下面對這4類進行講解。

1.Counter

Counter是計數器類型,它的特點是只增不減,例如機器啟動時間、HTTP訪問量等。

如圖2-1所示的HTTP請求總量隨著時間的推移只增不減。

圖2-1

Counter 具有很好的不相關性,不會因為機器重啟而置0。我們在使用 Counter指標時,通常會結合 rate()方法獲取該指標在某個時間段的變化率,例如,“HTTP請求總量”指標就屬于典型的Counter指標,通過對它進行rate()操作,可以得出請求的變化率,如圖2-2所示為HTTP的每秒請求數。

圖2-2

2.Gauge

Gauge是儀表盤,表征指標的實時變化情況,可增可減,例如CPU和內存的使用量、網絡 I/O 大小等,大部分監控數據都是 Gauge 類型的。如圖2-3所示是內存使用量監控圖,內存使用量隨著時間的推移不斷變化。

圖2-3

3.Summary

Summary 同 Histogram 一樣,都屬于高級指標,用于凸顯數據的分布狀況。如果需要了解某個時間段內請求的響應時間,則通常使用平均響應時間,但這樣做無法體現數據的長尾效應。例如,一個HTTP服務器的正常響應時間是30ms,但有很少幾次請求耗時3s,通過平均響應時間很難甄別長尾效應,這時可以通過Histogram或者Summary展現。Histogram和Summary這兩種指標類型在本質上是可以相互轉化的。

這里先了解一下數據分位:φ代表分位數,0≤φ≤1,分位數是在N個觀測值中按數量φ·N排序的觀測值。例如,0.9分位數代表第90%位置上的數,如果總數是100個,那么將是第90個數。

Summary是采樣點分位圖統計,用于得到數據的分布情況。例如,如果在要統計的班級中,有90%學生的成績低于93分,有95%學生的成績低于96分,則采用Summary能夠更好地展示數據的分布情況。

在Prometheus內部,Prometheus_tsdb_wal_fsync_duration_seconds指標的類型為Summary,它記錄了Prometheus Server中WAL寫入磁盤的同步時間:

從而得出有50%的同步時間低于0.012 352 463s,有90%的同步時間低于0.014 458 005s。

如圖2-4所示為HTTP請求耗時的分位圖,可以看到有90%的請求低于250ms。

圖2-4

我們可以將Summary看作客戶端分位,它的優勢是無須消耗服務端資源,但缺點也很明顯:首先,與 Histogram 采用 Counter 計數器統計的方式相比,Summary會消耗更多的資源;其次,通過Summary計算的指標不能再獲取平均數或者關聯其他指標等,所以Summary指標一般只適用于獨立的監控指標,例如垃圾回收時間等。

4.Histogram

Histogram反映了某個區間內的樣本個數,通過{le="上邊界"}指定這個范圍內的樣本數。Prometheus中表示每個本地存儲序列保存的chunk數量的指標prometheus_local_storage_series_chunks_persisted就屬于Histogram指標類型,如下所示:

可以看到,小于1.6384e+06個chunk的序列有260個,小于6.5536e+06個chunk的序列有780個。

2.1.3 Prometheus數據樣本

Prometheus采集的數據樣本都是以時間序列保存的,每個樣本都由三部分組成:指標、樣本值、時間戳。2.1.2節已經對指標進行了介紹。樣本值(64位浮點數)和時間戳(精確到 ms)的組合代表在這個時間點采集到的監控數值。可以將一個指標的樣本數據保存到一起,橫軸代表時間,縱軸代表指標序列,如圖2-5所示。

圖2-5

如圖2-5所示的每一行都代表由一個指標組成的時間序列,每個點都代表一個監控數值,這些時序數據首先被保存在內存中,然后被批量刷新到磁盤。在后面的章節中會詳細介紹指標存儲相關的內容。

主站蜘蛛池模板: 时尚| 皮山县| 宁陕县| 东光县| 贵阳市| 南平市| 唐山市| 那曲县| 双辽市| 江安县| 静海县| 永丰县| 鹤山市| 宜州市| 志丹县| 金塔县| 荃湾区| 甘谷县| 吐鲁番市| 阜平县| 天等县| 开鲁县| 双辽市| 韶关市| 抚远县| 西乌| 天门市| 伊宁县| 金寨县| 黄龙县| 建阳市| 商南县| 扬中市| 富宁县| 上杭县| 临沧市| 阿克| 白玉县| 郁南县| 紫云| 濮阳市|