1.3 監控系統的開源產品
前面介紹了通用的監控系統實現原理,下面看看已有的開源監控系統解決方案。
在監控軟件中,開源的解決方案有流量監控(MRTG、Cacti、SmokePing等)、性能告警(Nagios、Zabbix、Zenoss Core、Ganglia、Netdata等)、基于時序數據庫存儲數據的監控(Graphite、OpenTSDB、InfluxDB、Prometheus、OpenFalcon等)、基于全文搜索引擎數據庫存儲數據的監控(如ELK套件)可供選擇。上述各監控產品都有自己的特點和功能,其側重點和目標不完全相同,在設計理念和實現方法上也各有差異,但都具有一些共同特征,例如采集數據、分析展示、告警以及簡單的故障自動處理等,最終都能達到對IT系統服務可用性的完全展示。需要說明的是,當前的時序數據庫側重于監控數據的存儲,其采集需要借助其他工具來實現。時序監控產品的設計理念較為先進,具有很多創新功能,隨著其不斷發展,將會極大地促進監控領域技術的發展。下面我們來分別介紹主流的監控開源產品。對于其他商業監控產品,本書不做介紹。
1.3.1 Cacti
Cacti(中文含義為“仙人掌”)是一套基于PHP、MySQL、SNMP和RRDtool開發的網絡流量監測圖形分析工具,如圖1-7所示。其數據采集僅支持SNMP方式,通過snmpget命令來獲取監控數據,使用RRDtool命令工具存儲歷史數據和繪圖,并提供數據和用戶管理功能,可以根據用戶權限查看不同的樹狀結構、主機設備以及指定的監控數據圖,支持與LDAP結合進行用戶認證,同時也能自定義模板。對于網絡設備的監控,其展示效果非常不錯,在10年前,它是廣受網絡管理員喜歡的監控產品。
Cacti官方網站地址:1.3.2 Nagios
Nagios是一個插件式的監控系統,可以監控服務的運行狀態和網絡信息等,并能監視所指定的本地或遠程主機參數以及服務,同時提供異常告警通知功能等,如圖1-8所示。 Nagios對開源監控系統的影響非常深遠,曾經風靡一時,占據開源監控市場的大部分份額,并基于Nagios產生了很多新的監控產品。近年來,隨著其他開源監控軟件的崛起,Nagios逐漸淡出了歷史舞臺,使用的人群相對減少,但目前仍有一些公司在使用。 Nagios支持客戶端的數據采集,通過編寫客戶端插件,可以獲取各種監控數據,并提供了Web管理界面進行數據查詢。其產品的主要功能側重于監控服務的可用性,根據設置的閾值進行告警,但大部分告警邏輯都是通過監控插件實現的。 Nagios官方網站地址:1.3.3 InfluxDB套件
InfluxDB并不是一個監控產品,而是一個開源的分布式時序、時間和指標數據庫,使用Go語言開發。其功能是數據指標的存儲,不提供告警分析功能和數據采集功能,僅僅是一個數據庫,支持SQL語言查詢,其語法和MySQL類似。隨著InfluxDB時序數據庫的功能不斷完善,官方也推出了作為監控系統使用的相關套件,分別是Telegraf(采集數據的客戶端)、InfluxDB(存儲監控數據)、Kapacitor(告警分析)、Chronograf(監控數據可視化),其架構邏輯示意圖如圖1-9所示。 InfluxDB官方網站地址:1.3.4 Prometheus
Prometheus是一套開源的系統監控報警框架,其架構示意圖如圖1-10所示。Prometheus最初的設計理念受Google的Borgmon監控系統所啟發,由工作在SoundCloud的Google前員工于2012年創建,作為社區開源項目進行開發,2015年正式發布。2016年,Prometheus正式加入Cloud Native Computing Foundation(CNCF)組織,2018年其成為繼Kubernetes從CNCF畢業的第二個項目,其受歡迎程度僅次于Kubernetes。 Prometheus官方網站地址:Prometheus產品得到迅速發展,離不開天時、地利、人和,在2015年前后,微服務概念開始流行,軟件架構從單體應用轉換為微服務,此時,能夠原生支持對容器Docker、Kubernetes監控的產品會被使用微服務的公司首先接受,而同期的其他監控產品均不直接提供對微服務的監控,故其在微服務領域取得先機。另外,該產品本身的設計較為合理,提供了靈活而強大的查詢語句(PromQL)、靈活的告警策略,易于管理,方便擴展,其數據采集使用私有客戶端,傳輸協議使用HTTP,數據存儲使用私有數據庫。更多的介紹,讀者可以查看Prometheus官網或者地址:1.3.5 OpenFalcon
OpenFalcon是一個企業級、高可用、可擴展的開源監控解決方案。它在GitHub上獲得了數千個星(star)、數百次復刻(fork)、上百個代碼提交(pull-request),社區用戶超過6000人,超過200家公司都在不同程度地使用OpenFalcon。 OpenFalcon官方網站地址:OpenFalcon由多個組件構成,重要的組件有數據采集、數據傳輸、數據存儲、告警分析、圖形展示等,數據采集使用專用客戶端,傳輸協議為私有的,數據存儲支持OpenTSDB和RRD兩種方式,其架構示意圖如圖1-11所示。 Netdata是Linux系統實時性能監測工具,以Web可視化方式展示系統及應用程序的實時運行狀態(包括CPU、內存、硬盤輸入/輸出、網絡等Linux性能數據)。 ELK是Elasticsearch、Logstash、Kibana的簡稱,這三者是核心套件,但并非全部。 Logstash是一個用來搜集、分析、過濾日志的工具。它支持幾乎任何類型的日志,包括系統日志、錯誤日志和自定義應用程序日志。它可以從許多來源接收日志,這些來源包括syslog、消息傳遞(如RabbitMQ)和JMX。它能夠以多種方式輸出數據,包括電子郵件、WebSocket和Elasticsearch。 Kibana是一個基于Web的圖形界面,用于搜索、分析和可視化存儲Elasticsearch指標中的日志數據。它利用Elasticsearch的REST接口來檢索數據,不僅允許用戶創建自己數據的定制儀表板視圖,還允許他們以特殊的方式查詢和過濾數據。 實際上,隨著ELK家族的不斷發展,其針對日志采集開發了專用的客戶端Beats系列產品,包括Filebeat(日志文件)、Metricbeat(指標)、Packetbeat(網絡數據)、Winlogbeat(Windows事件日志)、Auditbeat(審計數據)、Heartbeat(運行時間監控),如圖1-13所示。 Zabbix是企業級分布式監控系統,是一個開箱即用的成熟解決方案,具備完備的功能。綜合其他監控產品來說,它是一個大而全、功能豐富且定制非常靈活的產品,具備其他監控產品的功能,同時提供了其他監控產品所不具備的功能,擴展非常靈活,是企業級監控系統比較合理的選擇之一。 從功能上說,Zabbix支持多種采集方式和采集客戶端,有專用的Agent(代理),也支持SNMP、IPMI、JMX、Telnet、SSH等多種協議,它將采集到的數據存放到數據庫中,可以支持MySQL、Oracle、PostgreSQL、SQLite、Elasticsearch等數據庫,然后對其進行分析整理,達到條件觸發告警,并支持對告警數據的分析統計。Zabbix具有良好的管理界面,如圖1-14和圖1-15所示。 Zabbix監控系統也是本書的主題所在,對于其具體功能將在后續章節中詳細講解。 從以上各種監控系統產品的對比來看,Zabbix都是具有優勢的,其具有豐富的基本功能、可擴展的能力、二次開發的能力和簡單易用的特點,讀者只要稍加學習,即可構建自己的監控系統。圖1-8 Nagios的界面截圖
圖1-9 InfluxDB套件的架構邏輯示意圖
圖1-10 Prometheus架構示意圖
圖1-11 OpenFalcon架構示意圖
1.3.6 Netdata
圖1-12 Netdata的界面截圖
1.3.7 ELK家族
圖1-13 Beats系列軟件
1.3.8 Zabbix
圖1-14 Zabbix的首頁截圖
圖1-15 Zabbix的拓撲圖截圖