框架結構的展⽰圖 數據庫
• 咱們先來看下這個部分 緩存
這⾥是 prometheus的服務端也就是核⼼
prometheus本⾝是⼀個以進程⽅式啓動,以後以多進程和多線程實現監控數據收集 計算 查
詢 更新 存儲 的這樣⼀個C/S模型運⾏模式
本⾝的啓動很簡單 多線程
若是不帶參數的不考慮後臺運⾏的問題
那麼 prometheus 默認啓動更簡單
解壓縮以後
./prometheus 便可以後默認監聽在9090端⼜⽤來訪問
框架
• 接下來咱們來看看prometheus的存儲形式 運維
這是⼀段來⾃官⽅的 prometheus存儲數據的介紹
• prometheus 採⽤的是 time-series (時間序列)的⽅式以⼀種⾃定義的格式存儲在本地硬盤上
• prometheus的本地T-S(time-series)數據庫以每兩⼩時爲間隔來分block(塊)存儲,
每⼀個塊中又分爲多個chunk⽂件,chunk⽂件是⽤來存放採集過來的數據的T-S數據, metadata 和 索引⽂件(index)
• index⽂件是對metrics(prometheus中 ⼀次K/V採集數據叫作⼀個metric) 和 labels(標籤) 進⾏索引 以後存儲在 chunk中
chunk 是做爲存儲的基本單位, index and metadata是做爲⼦集
• prometheus平時是將採集過來的數據 先都存放在內存之中(prometheus對內存的消耗仍是不⼩的)以相似緩存的⽅式 ⽤於加快搜索和訪問
• 當出現宕機時, prometheus有⼀種保護機制叫作WAL 能夠講數據按期存⼊硬盤中以chunk來表⽰,並在從新啓動時 ⽤以恢復進⼊內存
spa
而後咱們來看下⼤圖中的這個部分 插件
這⾥⾯講的是 prometheus 能夠集成的服務發現功能
例如 Consul
prometheus本⾝跟其餘的開源軟件相似,也是經過定義配置⽂件來給prometheus本⾝規定須要被監控的項⽬和被監控節點
咱們看下配置⽂件的模版 線程
配置⽂件中 規定了⼀個 ⼤的Job的名字
以後 在這個Jobs的名字下⾯ 具體來定義 要被監控的節點 以及節點上具體的端⼜信息等等
那麼若是prometheus 配合了 例如consul這種服務發現軟件
prometheus的配置⽂件 就再也不須要⼈⼯去 ⼿⼯定義出來,⽽是能⾃動發現集羣中 有哪些新
機器 以及新機器上出現了哪些新服務 能夠被監控
3d
接下來咱們來看看 採集客戶端的部分 server
prometheus 的客戶端主要有兩種⽅式採集
pull 主動拉取的形式
push 被動推送的形式
pull: 指的是客戶端(被監控機器)先安裝各種已有exporters(由社區組織 或企業 開發的監控客戶端插件)在系統上
以後, exporters 以守護進程的模式運⾏並開始採集數據
exporter本⾝也是⼀個http_server能夠對http請求做出響應返回數據(K/V metrics)
prometheus ⽤ pull 這種主動拉的⽅式(HTTP get) 去訪問每一個節點上exporter 並採樣回須要的數據
push :
指的是 在客戶端(或者服務端)安裝這個 官⽅提供的pushgateway插件
而後,使⽤咱們運維⾃⾏開發的各類腳本 把監控數據組織成k/v的形式 metrics形式 發送給pushgateway
以後 pushgateway會再推送給prometheus
這種是⼀種被動的數據採集模式
最後我們來看下這個報警的部分
prometheus 本⾝並不具有報警的功能
只能經過第三⽅ 開源或者商業軟件實現報警
另外
這⾥指的是 prometheus 能夠依賴不少⽅式⼆次繪製監控圖形⾸推Grafana