1 prometheus數據存儲方式
prometheus才用time-series(時間序列)的方式以一種自定義格式存儲在本地硬盤,本地TSDB以每兩小時為間隔來分block(塊)存儲,每一塊又分為多個chunk文件,chunk文件存放着采集的T-S數據,metadata和索引文件(index)
index文件是對metrics(prometheus中一次K/V采集數據叫做一個metrics)和labels進行索引,之后存儲在chunk,chunk作為存儲的基本單位
prometheus平時將采集的數據先都存在內存中,以類似緩存的方式用於加快搜索和訪問,當出現宕機時,prometheus的保護機制WAL可以將數據定期存入硬盤chunk中,並在重新啟動時恢復到內存中
通過啟動參數--storage.tsdb.path=“/data”指定tsdb路徑,即采集數據存放路徑,wal目錄下數據相當於對存放在內存中的近期數據的冷備
2 prometheus數據采集方式
prometheus的客戶端主要有兩種采集方式
pull主動拉取和push被動推送
pull:被監控主機先安裝各類exporters,exporter以守護進程方式運行,在主機系統上采集數據
exporter本身也是一個http_server,可以對htp請求作出相應,返回數據(K/V metrics)
prometheus server通過pull方式(HTTP get)去訪問每個節點上的exporter並采樣回需要的數據
push:客戶端或者服務端安裝pushgateway插件,使用運維自行開發的各種腳本把監控數據組織成K/V的形式 metrics形式發送給pushgateway,之后pushgateway再推送給prometheus
3 prometheus數據格式
prometheus監控中對於監控過來的數據統稱為metrics數據
metrics是一種對采樣數據的總稱(metrics並不代表具體的數據格式,是一種對於度量計算單位的抽象)
metrics的幾種數據類型:
gauges:最簡單的度量指標,只有一個簡單的返回值(瞬時狀態)
例如監控磁盤或者內存的使用量,那么就應該使用gauges格式來度量
counts: 從數據量為0開始累積計算,在理想狀態下只能永遠增長,不會降低
例如對用戶訪問量的采樣數據
histograms:統計數據的分布情況,比如最小值、最大值、中間值,還有中位數,75百分位,90百分位,95百分位,98百分位,99百分位,99.9百分位的值,代表的是一種近似的百分比估值
例如Http_response_time(http響應時間)代表是一次用戶http請求在系統傳輸和執行過程中總共花費的時間
通過histogram類型可以分別統計出全部用戶的響應時間中=0.05秒的有多少,00.05秒的有多少,>2秒的有多少
4 metrics
通過http訪問監控節點端口可得到export采集到的實時metrics數據,以K/V的形式展現和保存
curl localhost:9100/metrics
go_gc_duration_seconds{quantile="0"} 2.1286e-05
prometheus的每條指標數據由指標名稱和指標標簽(鍵值對)來標識,如下:
api_http_requests_total{methodPOST", handler="/messages"}