官术网_书友最值得收藏!

1.8 本書主角——Prometheus

1.簡介

Prometheus是由SoundCloud開發(fā)的開源監(jiān)控告警系統(tǒng)并且?guī)r序數(shù)據(jù)庫,基于Go語言,是Google BorgMon監(jiān)控系統(tǒng)的開源版本。2016年,由Google發(fā)起的Linux基金會旗下的原生云基金會(Cloud Native Computing Foundation,CNCF)將Prometheus納入其第二大開源項目。Prometheus在開源社區(qū)也十分活躍,在GitHub上擁有兩萬多Star,并且系統(tǒng)每隔一兩周就會有一個小版本的更新。

隨著 Kubernetes 在容器調度和管理上確定領頭羊的地位,Prometheus 也成為Kubernetes容器監(jiān)控的標配。

2.優(yōu)點

Prometheus的優(yōu)點有很多,如下所述。

(1)提供多維度數(shù)據(jù)模型和靈活的查詢方式,通過將監(jiān)控指標關聯(lián)多個tag,來將監(jiān)控數(shù)據(jù)進行任意維度的組合,并且提供簡單的PromQL查詢方式,還提供HTTP查詢接口,可以很方便地結合Grafana等GUI組件展示數(shù)據(jù)。

(2)在不依賴外部存儲的情況下,支持服務器節(jié)點的本地存儲,通過Prometheus自帶的時序數(shù)據(jù)庫,可以完成每秒千萬級的數(shù)據(jù)存儲;不僅如此,在保存大量歷史數(shù)據(jù)的場景中,Prometheus可以對接第三方時序數(shù)據(jù)庫如OpenTSDB等。

(3)定義了開放指標數(shù)據(jù)標準,以基于HTTP的Pull方式采集時序數(shù)據(jù),只有實現(xiàn)了Prometheus監(jiān)控數(shù)據(jù)格式的監(jiān)控數(shù)據(jù)才可以被Prometheus采集、匯總,并支持以Push方式向中間網(wǎng)關推送時序列數(shù)據(jù),能更加靈活地應對多種監(jiān)控場景。

(4)支持通過靜態(tài)文件配置和動態(tài)發(fā)現(xiàn)機制發(fā)現(xiàn)監(jiān)控對象,自動完成數(shù)據(jù)采集。Prometheus目前已經(jīng)支持Kubernetes、etcd、Consul等多種服務發(fā)現(xiàn)機制,可以減少運維人員的手動配置環(huán)節(jié),在容器運行環(huán)境中尤為重要。

(5)易于維護,可以通過二進制文件直接啟動,并且提供了容器化部署鏡像。

(6)支持數(shù)據(jù)的分區(qū)采樣和聯(lián)邦部署,支持大規(guī)模集群監(jiān)控。

3.架構

下面簡單介紹Prometheus的架構。

Prometheus的基本原理是通過 HTTP周期性抓取被監(jiān)控組件的狀態(tài),任意組件只要提供對應的 HTTP 接口并且符合 Prometheus 定義的數(shù)據(jù)格式,就可以接入Prometheus監(jiān)控。

如圖1-9所示為 Prometheus 的整體架構圖(來自 Prometheus 官網(wǎng)),展現(xiàn)了Prometheus內部模塊及相關的外圍組件之間的關系。

圖1-9

Prometheus Server負責定時在目標上抓取metrics(指標)數(shù)據(jù),每個抓取目標都需要暴露一個HTTP服務接口用于Prometheus定時抓取。這種調用被監(jiān)控對象獲取監(jiān)控數(shù)據(jù)的方式被稱為Pull(拉)。Pull方式體現(xiàn)了Prometheus獨特的設計哲學與大多數(shù)采用了Push(推)方式的監(jiān)控系統(tǒng)不同。

Pull方式的優(yōu)勢是能夠自動進行上游監(jiān)控和水平監(jiān)控,配置更少,更容易擴展,更靈活,更容易實現(xiàn)高可用。展開來說就是Pull方式可以降低耦合。由于在推送系統(tǒng)中很容易出現(xiàn)因為向監(jiān)控系統(tǒng)推送數(shù)據(jù)失敗而導致被監(jiān)控系統(tǒng)癱瘓的問題,所以通過Pull方式,被采集端無須感知監(jiān)控系統(tǒng)的存在,完全獨立于監(jiān)控系統(tǒng)之外,這樣數(shù)據(jù)的采集完全由監(jiān)控系統(tǒng)控制,增強了整個系統(tǒng)的可控性。

Prometheus 通過 Pull 方式采集數(shù)據(jù),那么它如何獲取監(jiān)控對象呢?Prometheus支持兩種方式:第1種是通過配置文件、文本文件等進行靜態(tài)配置;第2種是支持ZooKeeper、Consul、Kubernetes等方式進行動態(tài)發(fā)現(xiàn),例如對于Kubernetes的動態(tài)發(fā)現(xiàn),Prometheus使用Kubernetes的API查詢和監(jiān)控容器信息的變化,動態(tài)更新監(jiān)控對象,這樣容器的創(chuàng)建和刪除就都可以被Prometheus感知。

Storage通過一定的規(guī)則清理和整理數(shù)據(jù),并把得到的結果存儲到新的時間序列中,這里有兩種存儲方式。

◎ 一種是本地存儲。通過 Prometheus 自帶的時序數(shù)據(jù)庫將數(shù)據(jù)保存到本地磁盤,為了性能考慮,建議使用SSD。但本地存儲的容量畢竟有限,建議不要保存超過一個月的數(shù)據(jù)。

◎ 另一種是遠端存儲,適用于存儲大量監(jiān)控數(shù)據(jù)。通過中間層的適配器的轉化,目前Prometheus支持OpenTSDB、InfluxDB、Elasticsearch等后端存儲,通過適配器實現(xiàn)Prometheus存儲的remote write和remote read接口,便可以接入Prometheus作為遠端存儲使用。如圖1-10所示展現(xiàn)了Prometheus當前支持的遠端數(shù)據(jù)庫。

圖1-10

Prometheus通過PromQL和其他 API可視化地展示收集的數(shù)據(jù)。Prometheus支持多種方式的圖表可視化,例如Grafana、自帶的PromDash及自身提供的模版引擎等。Prometheus還提供HTTP API查詢方式,自定義所需要的輸出。

Prometheus通過Pull方式拉取數(shù)據(jù),但某些現(xiàn)有系統(tǒng)是通過 Push方式實現(xiàn)的,為了接入這些系統(tǒng),Prometheus提供了對 PushGateway的支持,這些系統(tǒng)主動推送metrics到PushGateway,而Prometheus只是定時去Gateway上抓取數(shù)據(jù)。

AlertManager 是獨立于 Prometheus 的一個組件,在觸發(fā)了預先設置在Prometheus 中的高級規(guī)則后,Prometheus 便會推送告警信息到 AlertManager。AlertManager提供了十分靈活的告警方式,可以通過郵件、slack或者釘釘?shù)韧緩酵扑汀2⑶?AlertManager支持高可用部署,為了解決多個AlertManager重復告警的問題,引入了Gossip,在多個AlertManager之間通過Gossip同步告警信息。

AlertManager的整體工作流程如圖1-11所示。

圖1-11

主站蜘蛛池模板: 景洪市| 赤峰市| 文化| 洛南县| 拜泉县| 宾阳县| 屏山县| 永胜县| 思南县| 绥阳县| 龙门县| 竹溪县| 青田县| 鸡泽县| 富蕴县| 灵丘县| 马尔康县| 东兴市| 柘荣县| 辽中县| 前郭尔| 贞丰县| 赣榆县| 客服| 襄城县| 肃宁县| 隆安县| 韩城市| 浦北县| 越西县| 海原县| 孟连| 永兴县| 和政县| 新昌县| 南充市| 建水县| 托克逊县| 镇沅| 邯郸县| 江都市|