天天看點

下一代監控:Prometheus

大家好,我是狼王,一個愛打球的程式員

面試廣度,深度都很重要,多擴充知識面總是好的!今天就讓我們來瞅瞅這個被号稱是下一代監控的prometheus!

前言

我們知道zabbix在監控界占有不可撼動的地位,功能強大。但是對容器監控顯得力不從心。為解決監控容器的問題,引入了prometheus技術。

接下來的文章打算圍繞prometheus做一個系列的介紹,順便也幫自己理清一下知識點。

Zabbix

在Prometheus之前市面已經出現了很多的監控系統,如Zabbix、Open-Falcon等。那麼Prometheus和這些監控系統有啥異同呢?我們在這就介紹下Zabbix這個監控系統。

下一代監控:Prometheus
Zabbix是由Alexei Vladishev開源的分布式監控系統,支援多種采集方式和采集用戶端,同時支援SNMP、IPMI、JMX、Telnet、SSH等多種協定,它将采集到的資料存放到資料庫中,然後對其進行分析整理,如果符合告警規則,則觸發相應的告警。
Zabbix核心元件主要是Agent和Server,其中Agent主要負責采集資料并通過主動或者被動的方式采集資料發送到Server/Proxy,除此之外,為了擴充監控項,Agent還支援執行自定義腳本。Server主要負責接收Agent發送的監控資訊,并進行彙總存儲,觸發告警等。

為了便于快速高效的配置Zabbix監控項,Zabbix提供了模闆機制,進而實作批量配置的目的。

Zabbix Server将收集的監控資料存儲到Zabbix Database中。Zabbix Database支援常用的關系型資料庫,例如MySQL、PostgreSQL、Oracle等,預設MySQL。Zabbix Web頁面(PHP編寫)負責資料查詢。Zabbix由于使用了關系型資料存儲時序資料,是以在監控大規模叢集時常常在資料存儲方面捉襟見肘。為此Zabbix 4.2版本後也開始支援時序資料存儲,不過目前還不成熟。
Open-Falcon是小米開源的企業級監控工具,用Go語言開發而成,包括小米、滴滴、美團等在内的網際網路公司都在使用它,是一款靈活、可擴充并且高性能的監控方案,在這裡就不多做介紹了。

下表通過多元度展現了各自監控系統的優缺點:

下一代監控:Prometheus

Prometheus簡介

Prometheus是一套開源的系統監控報警架構。它受啟發于Google的Brogmon監控系統,由工作在SoundCloud的前google員工在2012年建立,作為社群開源項目進行開發,并于 2015年正式釋出。
2016年,Prometheus正式加入Cloud Native Computing Foundation(CNCF)基金會的項目,成為受歡迎度僅次于Kubernetes 的項目。2017年底釋出了基于全新存儲層的2.0版本,能更好地與容器平台、雲平台配合。
Prometheus作為新一代的雲原生監控系統,目前已經有超過650+位貢獻者參與到Prometheus的研發工作上,并且超過120+項的第三方內建。

Prometheus優缺點

1.提供多元度資料模型和靈活的查詢方式,通過将監控名額關聯多個tag,來将監控資料進行任意次元的組合,并且提供簡單的PromQL查詢方式,還提供HTTP查詢接口,可以很友善地結合Grafana等GUI元件展示資料
2.在不依賴外部存儲的情況下,支援伺服器節點的本地存儲,通過Prometheus自帶的時序資料庫,可以完成每秒千萬級的資料存儲;不僅如此,在儲存大量曆史資料的場景中,Prometheus可以對接第三方時序資料庫和OpenTSDB等。
3.定義了開放名額資料标準,以基于HTTP的Pull方式采集時序資料,隻有實作了Prometheus監控資料才可以被Prometheus采集、彙總、并支援Push方式向中間網關推送時序列資料,能更加靈活地應對多種監控場景
4.支援通過靜态檔案配置和動态發現機制發現監控對象,自動完成資料采集。Prometheus目前已經支援Kubernetes、etcd、Consul等多種服務發現機制
5.易于維護,可以通過二進制檔案直接啟動,并且提供了容器化部署鏡像。
6.支援資料的分區采樣和聯邦部署,支援大規模叢集監控

Prometheus的元件與架構

Prometheus 生态圈元件

Prometheus 的生态系統包括多個元件,大部分的元件都是用Go語言編寫的,是以部署非常友善,而這些元件大部分都是可選的,主要元件介紹如下:

Prometheus Server

Prometheus Server是Prometheus元件中的核心部分,負責實作對監控資料的擷取,存儲以及查詢。

Prometheus Server可以通過靜态配置管理監控目标,也可以配合使用Service Discovery的方式動态管理監控目标,并從這些監控目标中擷取資料。

其次Prometheus Server需要對采集到的監控資料進行存儲,Prometheus Server本身就是一個時序資料庫,将采集到的監控資料按照時間序列的方式存儲在本地磁盤當中。

最後Prometheus Server對外提供了自定義的PromQL語言,實作對資料的查詢以及分析。

Prometheus Server内置的Express Browser UI,通過這個UI可以直接通過PromQL實作資料的查詢以及可視化。

推送網關(push gateway)

主要是實作接收由Client push過來的名額資料,在指定的時間間隔,由主程式來抓取。

由于Prometheus資料采集基于Pull模型進行設計,是以在網絡環境的配置上必須要讓Prometheus Server能夠直接與Exporter進行通信。

當這種網絡需求無法直接滿足時,就可以利用PushGateway來進行中轉。

可以通過PushGateway将内部網絡的監控資料主動Push到Gateway當中。

而Prometheus Server則可以采用同樣Pull的方式從PushGateway中擷取到監控資料。

Exporter

主要用來采集資料,并通過HTTP服務的形式暴露給Prometheus Server,Prometheus Server通過通路該Exporter提供的接口,即可擷取到需要采集的監控資料。

常見的Exporter有很多,例如node_exporter、mysqld_exporter、statsd_exporter、blackbox_exporter、haproxy_exporter等,支援如 HAProxy,StatsD,Graphite,Redis 此類的服務監控;

告警管理器(Alertmanager)

管理告警,主要是負責實作報警功能。

在Prometheus Server中支援基于PromQL建立告警規則,如果滿足PromQL定義的規則,則會産生一條告警,而告警的後續處理流程則由AlertManager進行管理。

在AlertManager中我們可以與郵件,Slack等等内置的通知方式進行內建,也可以通過Webhook自定義告警處理方式。AlertManager即Prometheus體系中的告警進行中心。

Prometheus架構

下一代監控:Prometheus
上圖是Prometheus整體架構圖,左側是各種符合Prometheus資料格式的exporter,除此之外為了支援推動資料類型的Agent,可以通過Pushgateway元件,将Push轉化為Pull。
Prometheus甚至可以從其它的Prometheus擷取資料,組建聯邦叢集。Prometheus的基本原理是通過HTTP周期性抓取被監控元件的狀态,任意元件隻要提供對應的HTTP接口并且符合Prometheus定義的資料格式,就可以接入Prometheus監控。
上側是服務發現,Prometheus支援監控對象的自動發現機制,進而可以動态擷取監控對象。
圖檔中間是Prometheus Server,Retrieval子產品定時拉取資料,并通過Storage子產品儲存資料。
PromQL為Prometheus提供的查詢文法,PromQL子產品通過解析文法樹,調用Storage子產品查詢接口擷取監控資料。
圖檔右側是告警和頁面展現,Prometheus将告警推送到alertmanger,然後通過alertmanger對告警進行處理并執行相應動作。
資料展現除了Prometheus自帶的WebUI,還可以通過Grafana等元件查詢Prometheus監控資料。

總結

繼續閱讀