## 什么是prometheus?
[Prometheus](https://github.com/prometheus)是一個開源監控系統,它前身是SoundCloud的警告工具包。從2012年開始,許多公司和組織開始使用Prometheus。該項目的開發人員和用戶社區非常活躍,越來越多的開發人員和用戶參與到該項目中。目前它是一個獨立的開源項目,且不依賴與任何公司。 為了強調這點和明確該項目治理結構,Prometheus在2016年繼Kurberntes之后,加入了Cloud Native Computing Foundation。
### 特征:
Prometheus的主要特征有:
1. 多維度數據模型
2. 靈活的查詢語言
3. 不依賴分布式存儲,單個服務器節點是自主的
4. 以HTTP方式,通過pull模型拉去時間序列數據
5. 也通過中間網關支持push模型
6. 通過服務發現或者靜態配置,來發現目標服務對象
7. 支持多種多樣的圖表和界面展示,grafana也支持它
### 組件
Prometheus生態包括了很多組件,它們中的一些是可選的:
1. 主服務Prometheus Server負責抓取和存儲時間序列數據
2. 客戶庫負責檢測應用程序代碼
3. 支持短生命周期的PUSH網關
4. 基于Rails/SQL儀表盤構建器的GUI
5. 多種導出工具,可以支持Prometheus存儲數據轉化為HAProxy、StatsD、Graphite等工具所需要的數據存儲格式
6. 警告管理器
7. 命令行查詢工具
8. 其他各種支撐工具
多數Prometheus組件是Go語言寫的,這使得這些組件很容易編譯和部署。
### 架構
下面這張圖說明了Prometheus的整體架構,以及生態中的一些組件作用:

Prometheus服務,可以直接通過目標拉取數據,或者間接地通過中間網關拉取數據。它在本地存儲抓取的所有數據,并通過一定規則進行清理和整理數據,并把得到的結果存儲到新的時間序列中,PromQL和其他API可視化地展示收集的數據
### 適用場景
Prometheus在記錄純數字時間序列方面表現非常好。它既適用于面向服務器等硬件指標的監控,也適用于高動態的面向服務架構的監控。對于現在流行的微服務,Prometheus的多維度數據收集和數據篩選查詢語言也是非常的強大。
Prometheus是為服務的可靠性而設計的,當服務出現故障時,它可以使你快速定位和診斷問題。它的搭建過程對硬件和服務沒有很強的依賴關系。
### 不適用場景
Prometheus,它的價值在于可靠性,甚至在很惡劣的環境下,你都可以隨時訪問它和查看系統服務各種指標的統計信息。 如果你對統計數據需要100%的精確,它并不適用,例如:它不適用于實時計費系統