監控系統只包含與后臺相關的,這里主要是兩塊,一個是操作系統層的監控,比如機器負載,IO,網絡流量,CPU,內存等操作系統指標的監控。另一個是服務質量和業務質量的監控,比如服務的可用性,成功率,失敗率,容量,QPS 等等。常見業務的監控系統先有操作系統層面的監控(這部分較成熟),然后擴展出其它監控,如 zabbix,小米的 open-falcon,也有一出來就是兩者都支持的,如 prometheu s。如果對業務監控要求比較高一些,在創業選型中建議可以優先考慮 prometheus。這里有一個有趣的分布,如圖6所示

\[圖6 監控系統分布\]
亞洲區域使用 zabbix 較多,而美洲和歐洲,以及澳大利亞使用 prometheus 居多,換句話說,英文國家地區(發達國家?)使用prometheus 較多。
Prometheus 是由 SoundCloud 開發的開源監控報警系統和時序列數據庫( TSDB )。Prometheus 使用 Go 語言開發,是 Google BorgMon 監控系統的開源版本。相對于其它監控系統使用的 push 數據的方式,prometheus 使用的是 pull 的方式,其架構如圖7所示:

\[圖7\] prometheus架構圖
如上圖所示,prometheus 包含的主要組件如下:
* Prometheus Server 主要負責數據采集和存儲,提供 PromQL 查詢語言的支持。Server 通過配置文件、文本文件、Zookeeper、Consul、DNS SRV Lookup等方式指定抓取目標。根據這些目標會,Server 定時去抓取 metric s數據,每個抓取目標需要暴露一個 http 服務的接口給它定時抓取。
* 客戶端SDK:官方提供的客戶端類庫有 go、java、scala、python、ruby,其他還有很多第三方開發的類庫,支持 nodejs、php、erlang 等。
* Push Gateway 支持臨時性 Job 主動推送指標的中間網關。
* Exporter Exporter 是Prometheus的一類數據采集組件的總稱。它負責從目標處搜集數據,并將其轉化為 Prometheus 支持的格式。與傳統的數據采集組件不同的是,它并不向中央服務器發送數據,而是等待中央服務器主動前來抓取。Prometheus提供多種類型的 Exporter 用于采集各種不同服務的運行狀態。目前支持的有數據庫、硬件、消息中間件、存儲系統、HTTP服務器、JMX等。
* alertmanager:是一個單獨的服務,可以支持 Prometheus 的查詢語句,提供十分靈活的報警方式。
* Prometheus HTTP API的查詢方式,自定義所需要的輸出。
* Grafana 是一套開源的分析監視平臺,支持 Graphite, InfluxDB, OpenTSDB, Prometheus, Elasticsearch, CloudWatch 等數據源,其 UI 非常漂亮且高度定制化。
創業公司選擇 Prometheus + Grafana 的方案,再加上統一的服務框架(如 gRPC ),可以滿足大部分中小團隊的監控需求。