一、軟體綜合對比
對比項\軟體 | Zabbix | Nagios | Open-Falcon | Prometheus |
---|---|---|---|---|
開發語言 | C+PHP | C | Golang | |
成熟度 | 高 | 中 | ||
擴充性 | ||||
性能 | 低 | |||
社群活躍度 | ||||
容器支援 | ||||
企業使用情況 | ||||
部署難度 |
二、應用場景說明
1.Zabbix
A.軟體說明
Zabbix是由Alexei Vladishev開源的分布式監控系統,是一個企業級的分布式開源監控方案。能夠監控各種網絡參數以及伺服器健康性和完整性的軟體。使用靈活的通知機制,允許使用者為幾乎任何事件配置基于郵件的告警。這樣可以快速回報伺服器的問題。基于已存儲的資料,提供了出色的報告和資料可視化功能。
同時可以結合Grafana出圖,Zabbix作為數倉的方式,呈現出來的監控圖形更符合企業氣息。
B.軟體采集架構

zabbix由2部分構成,zabbix server與可選元件zabbix agent。zabbix server可以通過SNMP,zabbix agent,ping,端口監視等方法提供對遠端伺服器/網絡狀态的監視,資料收集等功能,它可以運作在Linux,Solaris,HP-UX,AIX,Free BSD,Open BSD,OS X等平台上。
核心元件主要是Agent和Server,其中Agent主要負責采集資料并通過主動或者被動的方式采集資料發送到Server/Proxy,除此之外,為了擴充監控項,Agent還支援執行自定義腳本。Server主要負責接收Agent發送的監控資訊,并進行彙總存儲,觸發告警等。Zabbix Server将收集的監控資料存儲到Zabbix Database中。
Zabbix Database支援常用的關系型資料庫,如果MySQL、PostgreSQL、Oracle等,預設是MySQL,并提供Zabbix Web頁面(PHP編寫)資料查詢。
Zabbix由于使用了關系型資料存儲時序資料,是以在監控大規模叢集時常常在資料存儲方面捉襟見肘。是以從Zabbix 4.2版本後開始支援TimescaleDB時序資料庫,到現在Zabbix的版本已經更新至5.4.
C.總結
如果想要監控傳統的軟硬體資源,Zabbix首當其沖。比如監控交換機、F5、路由器、防火牆、實體伺服器、Linux、Windows、Unix、Nginx、Mysql、Redis、Tomcat等等,而且考慮到穩定性和資料實時性、功能的高度內建、那就選擇Zabbix吧,畢竟運維監控必不可少掌握的技能。
2.Nagios
Nagios是一款開源軟體,能有效監控 Windows 、Linux、VMware 和 Unix 主機狀态,交換機、路由器等網絡設定等。當監控出異常時提醒系統管理者,當異常恢複時也會通知。Nagios提供一個基于浏覽器的web界面,友善管理人員檢視系統的運作狀态,網絡狀态、服務狀态、日志資訊,以及其他異常現象。
同時支援商用OneAlert一鍵內建nagios,輕松實作微信、電話、郵件、短信、APP的告警通知。
B.資料采集架構
當Nagios需要監控某個遠端linux主機的服務或者資源情況時:
- nagios運作check_nrpe插件,我們要在nagios配置檔案中告訴它要檢查什麼.
- check_nrpe插件會通過SSL連接配接到遠端的NRPE daemon.check_nrpe插件會通過SSL連接配接到遠端的NRPE daemon.
- NRPE daemon會運作相應的nagios插件來執行檢查本地資源或服務.NRPE daemon會運作相應的nagios插件來執行檢查本地資源或服務.
- NRPE daemon将檢查的結果傳回給check_nrpe插件,插件将其遞交給nagios做處理.NRPE daemon将檢查的結果傳回給check_nrpe插件,插件将其遞交給nagios做處理.
注意:NRPE daemon需要nagios插件和Nrpe一起安裝在遠端被監控linux主機上,否則,daemon不能做任何的監控. 别外因為它們間的通信是加密的SSL,是以需要安裝SSL
在監控主機的服務狀态、伺服器資源狀态、網絡服務狀态、甚至網絡裝置(交換機、路由器)都是沒問題的,但在配置所有監控的過程都需要通過插件來完成,但在開源社群和企業使用情況來看的話,穩定性和後續新功能擴充幾率很少,終究是一款小衆的監控軟體,針對基礎的應用進行監控。
3.Open-Falcon
* 強大靈活的資料采集:自動發現,支援falcon-agent、snmp、支援使用者主動push、使用者自定義插件支援、opentsdb data model like(timestamp、endpoint、metric、key-value tags)
* 水準擴充能力:支援每個周期上億次的資料采集、告警判定、曆史資料存儲和查詢
* 高效率的告警政策管理:高效的portal、支援政策模闆、模闆繼承和覆寫、多種告警方式、支援callback調用
* 人性化的告警設定:最大告警次數、告警級别、告警恢複通知、告警暫停、不同時段不同門檻值、支援維護周期
* 高效率的graph元件:單機支撐200萬metric的上報、歸檔、存儲(周期為1分鐘)
* 高效的曆史資料query元件:采用rrdtool的資料歸檔政策,秒級傳回上百個metric一年的曆史資料
* dashboard:多元度的資料展示,使用者自定義Screen
* 高可用:整個系統無核心單點,易運維,易部署,可水準擴充
* 開發語言: 整個系統的後端,全部golang編寫,portal和dashboard使用python編寫。
每台伺服器,都有安裝falcon-agent,falcon-agent是一個golang開發的daemon程式,用于自發現的采集單機的各種資料和名額,這些名額包括不限于以下幾個方面,共計200多項名額。
* CPU相關
* 磁盤相關
* IO
* Load
* 記憶體相關
* 網絡相關
* 端口存活、程序存活
* ntp offset(插件)
* 某個程序資源消耗(插件)
* netstat、ss 等相關統計項采集
* 機器核心配置參數
隻要安裝了falcon-agent的機器,就會自動開始采集各項名額,主動上報,不需要使用者在server做任何配置(這和zabbix有很大的不同),這樣做的好處,就是使用者維護友善,覆寫率高。當然這樣做也會server端造成較大的壓力,不過open-falcon的服務端元件單機性能足夠高,同時都可以水準擴充,是以自動多采集足夠多的資料,反而是一件好事情,對于SRE和DEV來講,事後追查問題,不再是難題。
另外,falcon-agent提供了一個proxy-gateway,使用者可以友善的通過http接口,push資料到本機的gateway,gateway會幫忙高效率的轉發到server端。
open-falcon是小米開源的監控軟體,前端比較簡單,但可以監控Linux主機的200多項名額資料,主要包括CPU、記憶體、磁盤、檔案系統、核心參數、Socket連接配接等等,同時支援自定義監控腳本。
而采集的transfer資料源主要有三種:1.agent采集的基礎監控資料。2.agent執行使用者自定義的插件傳回的資料。3.client library:線上的業務系統,都嵌入使用了統一的perfcounter.jar,對于業務系統中每個RPC接口的qps、latency都會主動采集并上報。
在上報資料過程,會先發送到本機的proxy-gateway,再由gateway轉發給transfer。
總的來說,open-falcon相對zabbix針對資料采集、資料處理效率、高可用、都比zabbix要好,但考慮到穩定性和易用性,這兩點open-falcon比zabbix要差一些。
4.Prometheus
Prometheus是由SoundCloud開發的開源監控報警系統和時序列資料庫。從字面上了解,Prometheus由兩個部分組成,一個是監控報警系統,另一個是自帶的時序資料庫(TSDB)。
2016年,由Google發起的Linux基金會旗下的原生雲基金會(Cloud Native Computing Foundation)将Prometheus納入其第二大開源項目。Prometheus在開源社群也十分活躍,在GitHub上擁有兩萬多Star,并且系統每隔一兩周就會有一個小版本的更新,而Prometheus與它的“師兄”Kubernetes都自帶雲原生的光環,天然能夠友好協作。
Prometheus的基本原理是通過HTTP周期性抓取被監控元件的狀态,任意元件隻要提供對應的HTTP接口并且符合Prometheus定義的資料格式,就可以接入Prometheus監控。
Prometheus Server負責定時在目标上抓取metrics(名額)資料并儲存到本地存儲裡面。Prometheus采用了一種Pull(拉)的方式擷取資料,不僅降低用戶端的複雜度,用戶端隻需要采集資料,無需了解服務端情況,而且服務端可以更加友善的水準擴充。
如果監控資料達到告警門檻值Prometheus Server會通過HTTP将告警發送到告警子產品alertmanger,通過告警的抑制後觸發郵件或者webhook。Prometheus支援PromQL提供多元度資料模型和靈活的查詢,通過監控名額關聯多個tag的方式,将監控資料進行任意次元的組合以及聚合。
Promethues出身自帶雲原生光環,注定在K8S容器監控領領域有一定的地位,同時更能與耦合在一起,統一監控入口,服務端也能橫向擴充實作分布式部署,基本企業在使用K8S或者容器的時候,Prometheus作為監控是最好的一個選擇。也因為開發語言是GO,近年來Go語言排行一直往上爬,更貼近雲原生,另外部署成本極低,一個核心的元件+一條指令既可以實作監控。但入門成本相對Zabbix要高一些,但入門之後後面擴充可以實作更加靈活。
三、價值展現
1.實作自動檢查及采集資料
2.統一資源監控管理平台入口
3.實作實時告警及自動修複。
4.安全可控,将資料安全可控性精細化。
5.開源社群,更靈活使用自定義擴充或者插件。
6.實作裝置自動發現及自動注冊。
7.去中心化,防止單點故障。
四、軟體監控示例