# 什么是 Prometheus
[Prometheus](https://prometheus.io/) 是由 `SoundCloud` 開源監控告警解決方案,從 2012 年開始編寫代碼,再到 2015 年 [github](https://github.com/prometheus/prometheus) 上開源以來,已經吸引了 12k+ 關注,以及很多大公司的使用;2016 年 Prometheus 成為繼 k8s 后,第二名 CNCF([Cloud Native Computing Foundation](https://cncf.io/)) 成員。作為新一代開源解決方案,很多理念與 Google SRE 運維之道不謀而合。
# 它有什么特點
+ 多維數據模型以及由 metrics 名和一組 key/value 標簽組成的時序數據
+ 在多維度上靈活且強大的查詢語言([PromQl](https://prometheus.io/docs/querying))
+ 不依賴分布式存儲,支持單主節點工作
+ 通過基于 HTTP 的 pull 方式采集時序數據
+ 支持通過 Pushgateway 進行時序數據跨網關推送([pushing time series](https://prometheus.io/docs/instrumenting/pushing/))
+ 支持通過服務發現或者靜態配置去獲取要采集的目標服務器
+ 支持多種可視化圖表及儀表盤([Grafana](https://grafana.com/))
# 它由什么構成
+ Prometheus 主服務器,用來收集和存儲時間序列數據
+ 用于應用程序埋點的 client 代碼庫
+ 用于短時 jobs 的 push gateway
+ 特殊用途的數據收集工具包 exporter(包括HAProxy、StatsD、Ganglia等)
+ 用于報警的 alertmanager
+ 命令行查詢工具
+ Prometheus Dashboard 展現的絕佳工具 Grafana
大部分 Prometheus 組建都由 go 實現,這使它們易于構建和部署為靜態的二進制文件。
# 架構圖
此圖說明 Prometheus 和它的一些生態系統組成部分的架構關系:

Prometheus 直接或通過 Pushgateway 從各個 job 中爬取時序數據。它在本地存儲所有的樣品,對這些數據運行規則進行過濾、匯總并記錄新的時序數據,同時可以從現有數據生成警報。Grafana或其它API可以將所采集的數據用于可視化展示。
# 它能做什么
Prometheus 可以很好地記錄任何純數字時間序列。它既適用于以服務器為中心的監控,也適用于高度動態的面向服務的體系結構的監控。在微服務的世界中,它支持多維數據收集和查詢是一個獨特的優勢。
# 它不能做什么
Prometheus 的價值在于可靠性,即使在某些時間節點收集失敗情況下,您也可以始終查看有關系統的統計信息。如果您需要100%的準確性(例如按請求計費),Prometheus并不是一個好的選擇,因為收集的數據可能不夠詳細和完整。在這種情況下,您最好使用其他系統來收集和分析數據以進行計費,Prometheus 則可以進行其他監控。