初識 prometheus

初識 prometheus

prometheus是什麼及其主要功能注意事項

prometheus 是什麼?

我現在目前的讀者都肯定通過prometheus這個監控吧,那麼它到底是什麼呢? prometheus是一個基於時間序列(time_series)的監控軟件,它是由soundCloud開源監控告警解決方案,從2012年開始編寫代碼,再到2015年github上開源,已經很多大公司使用,2016年prometheus成爲繼kubernetes後,第二個CNCF(cloud native Computing Foundation雲原生計算基金會)的成員。2017年底發佈了基於全新存儲層的2.0版本,能更好地與容器平臺、雲平臺配合,並同時支持告警。

prometheus的主要功能

  • 多維數據模型(時序由metrics[指標]和k/v的labels構成)
  • 靈活的查詢語句(PromQL)支持基本數據運算和函數
  • 無依賴存儲,支持local和remote不同的模型
  • 採用http協議,使用pull/push模式來獲取數據
  • 監控目標,可以採用服務發現和靜態配置的方式
  • 支持多種統計數據模型,配合grafana使用圖形化友好

prometheus的核心組件

  • prometheus server:主要對獲取的數據和存儲時序數據,另外還提供查詢和alert rule(報警規則)配置管理
  • client libraries:用於對接prometheus server,可以查詢和上報數據
  • Pushgateway: 用於批量,短期的監控數據的彙總節點,監控主機上報給pushgeateway,然後pushgateway上報給prometheus sever。
  • exporters: 各種彙報數據的exporters,例如彙報機器數據的node_exporter,彙報docker情況的cAdvisor
  • alertmanager: 用於告警通知的

prometheus基礎架構圖

下面這張圖是官方的架構圖
image.png

從上圖中我們也能看出來prometheus的主要包含的模塊,pushgateway,exporters,retrieval,TSDB(存儲)HTTP,PromeQl,Alertmanager。

他的大致邏輯是這樣的:
1,prometheus會定期從靜態配置的targets或者服務發現的targets中向部署在被監控端的服務器上請求exporters來獲取數據,或者由客戶端通過定時任務定期向pushgateway發送數據,然後有pushgateway向prometheus發送數據。
2,當新的數據大於配置內存緩存區的時候,prometheus會將數據持久化到磁盤,(如果使用remote storage將持久到雲端)
3,prometheus可以配合grafana通過特定的表達是來獲取我們想要的監控圖形
4,prometheus可以配置rules(規則),然後定時查詢數據,當出發告警條件的時候,會通知alertmanager推送到配置的告警信息上去
4,alertmanager收到告警信息的時候,可以根據配置,聚合,去重,降噪最後發送警告

promethesus使用的注意事項

  • prometheus的數據是基於時間序列(time-series)的fload64的值,
  • prometheus不適合做審計計費,因爲他的數據是按照時間間隔來採集的,關注的更多是系統的運行的瞬時狀態以及趨勢,即使有少量的數據沒有采集也能容忍,但是審計計費需要記錄每個請求,並且數據長期存儲,這個prometheus無法滿足。

prometheus和其他監控的對比

prometheus相對於其他軟件的優勢

1,易於管理
prometheus核心部分只有一個單獨的用golang編寫的二進制文件,不存在任何的第三方依賴(數據庫,緩存等)。唯一需要做的就是本地磁盤和內存,所以他可以運行在各種平臺。
prometheus是基於pull和push模型的架構方式,在任何地方搭建我們的監控系統,對於一些複雜的情況,還可以使用prometheus服務發現(server Discovery)的能力動態管理監控目標。

2,監控服務的內部運行狀態
prometheus鼓勵用戶監控服務的內部狀態,基於prometheus豐富的client庫,用戶可以輕鬆的在應用程序中添加的對prometheus的支持,從而讓用戶可以獲取服務和應用內部真正的運行狀態。

3,強大的數據模型
所有采集的監控數據均以指標(metric)的形式保存在內置的時間序列數據庫當中(TSDB)。所有的樣本除來基本的指標名稱以外,還包含一組用於描述該樣本特徵的標籤。

4,強大的查詢語言PromQL
prometheus內置來一個強大的數據查詢語言promQL,通過PromQL可以實現對監控數據的查詢/聚合。同時PromeQL也被應用於數據可視化(grafana)以及告警中。

5,高效
對於監控系統而言,大量的監控任務必然導致有大量的數據產生。而Prometheus可以高效地處理這些數據,對於單一Prometheus Server實例而言它可以處理:

  • 數以百萬的監控指標
  • 每秒處理數十萬的數據點。

6,可擴展性
Prometheus是如此簡單,因此你可以在每個數據中心、每個團隊運行獨立的Prometheus Sevrer。Prometheus對於聯邦集羣的支持,可以讓多個Prometheus實例產生一個邏輯集羣,當單實例Prometheus Server處理的任務量過大時,通過使用功能分區(sharding)+聯邦集羣(federation)可以對其進行擴展。

7,易於集成
因爲prometheus採用的是http的協議來進行通信獲取數據的,所以所有語言只要支持http協議都可以被當作exporters來使用

8,可視化
prometheus配合grafana制定精美的監控圖表

prometheus VS zabbix

  • Zabbix 使用的是 C 和 PHP, Prometheus 使用 Golang, 整體而言 Prometheus 運行速度更快一點。
  • Zabbix 屬於傳統主機監控,主要用於物理主機,交換機,網絡等監控,Prometheus 不僅適用主機監控,還適用於 Cloud, SaaS, docker,kubernetes,Container 監控。
  • Zabbix 在傳統主機監控方面,有更豐富的插件。
  • Zabbix 可以在 WebGui 中配置很多事情,但是 Prometheus 需要手動修改文件配置。

prometheus vs nagios

  • Nagios 數據不支持自定義 Labels, 不支持查詢,告警也不支持去噪,分組, 沒有數據存儲,如果想查詢歷史狀態,需要安裝插件。
  • Nagios 是上世紀 90 年代的監控系統,比較適合小集羣或靜態系統的監控,顯然 Nagios 太古老了,很多特性都沒有,相比之下Prometheus 要優秀很多。

prometheus vs InfluxDB

  • InfluxDB 是一個開源的時序數據庫,主要用於存儲數據,如果想搭建監控告警系統, 需要依賴其他系統。
  • InfluxDB 在存儲水平擴展以及高可用方面做的更好, 畢竟核心是數據庫。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章