G行監(jiān)控工具之Nagios篇
引言
無論何時何地,我們都可以了解到服務(wù)器的性能,這歸功于作為運維之眼的監(jiān)控系統(tǒng)。G行監(jiān)控系統(tǒng)使用的監(jiān)控工具有多種,Nagios作為老牌監(jiān)控工具,憑借其靈活的配置功能和強大的管理中心在G行發(fā)揮著重要作用。本文從功能、系統(tǒng)監(jiān)控原理和在G行的應(yīng)用等方面介紹Nagios監(jiān)控工具。
一、Nagios功能
1.主機或服務(wù)狀態(tài)監(jiān)控
Nagios可以監(jiān)控的服務(wù)器操作系統(tǒng)主要包含Linux、Unix和Windows等,可監(jiān)控的網(wǎng)絡(luò)設(shè)備有路由器、交換機等,支持對http、tcp、pop3、smtp等各種應(yīng)用協(xié)議進行外部可用性探測。
2.監(jiān)控告警通知
Nagios對發(fā)現(xiàn)的問題會及時產(chǎn)生告警信息,并通過事先定義好的方式,如:郵件、短信、微信等方式通知相關(guān)人員。同時,Nagios還支持利用客戶化程序和調(diào)用API來進行告警通知,以便用戶更好的發(fā)現(xiàn)問題,并進行自動化處理。
3.監(jiān)控信息可視化
Nagios結(jié)合web服務(wù)器,可以將其監(jiān)控的所有信息以web頁面的形式展現(xiàn)出來,還可以進一步結(jié)合外部軟件實現(xiàn)監(jiān)控數(shù)據(jù)可視化分析,以圖表的形式展示在web頁面中,下圖為Nagios web頁面展示。
圖1 Nagios web頁面展示
4.監(jiān)控數(shù)據(jù)存儲
Nagios監(jiān)控采集到的數(shù)據(jù)會存儲下來,可以通過NDOUtis組件存儲到數(shù)據(jù)庫中實現(xiàn)歷史監(jiān)控信息的查詢。
二、Nagios系統(tǒng)監(jiān)控原理
Nagios是一種C/S方式的監(jiān)控工具,系統(tǒng)中的角色可以分為:
(1)Nagios服務(wù)器:安裝核心模塊,負(fù)責(zé)監(jiān)控的處理、任務(wù)調(diào)度、下發(fā)指令和web展示。
(2)被監(jiān)控主機:安裝代理模塊,執(zhí)行具體的監(jiān)控指令、返回監(jiān)控的結(jié)果。
Nagios服務(wù)器向代理模塊發(fā)送請求,代理模塊調(diào)用各個插件獲取具體資源的狀態(tài)信息,然后返回給Nagios服務(wù)器,最后對收集到的信息進行分析,并通過web應(yīng)用進行展示。
Nagios系統(tǒng)主要包含Nagios daemon、Nagios plugin、nrpe三個組件,它還包含NSCA、NSClinet++、NDOUtils組件,組成邏輯圖如下所示:
圖2 Nagios邏輯結(jié)構(gòu)圖
Nagios daemon:Nagios系統(tǒng)的核心組件,它負(fù)責(zé)組織與管理各組件,將它們協(xié)調(diào)起來共同完成監(jiān)控任務(wù),并完成監(jiān)控信息的組織與展示。
Nagios plugin:Nagios核心組件自帶以及用戶自開發(fā)的一些插件,它們是實現(xiàn)各項監(jiān)控的具體小程序,由它們采集到相應(yīng)的數(shù)據(jù)以后,回送給Nagios服務(wù)器。
NRPE:Nagios系統(tǒng)要想取得被監(jiān)控主機的存活狀態(tài)以及http、ftp、ssh等公開服務(wù)可用,可以通過程序探測得出。如果要想取得被監(jiān)控主機上如磁盤容量、CPU負(fù)載等本地信息時,就需要代理程序,Linux系統(tǒng)是nrpe,Windows是NSClient++,通過代理程序來獲取監(jiān)控數(shù)據(jù),再發(fā)送到Nagios服務(wù)器。
三、插件介紹及應(yīng)用
Nagios核心模塊只支持少量的監(jiān)控功能,大部分監(jiān)控功能都是通過各種插件來完成的。監(jiān)控插件獲取監(jiān)控數(shù)據(jù)的方式可以分為兩種:主動監(jiān)控和被動監(jiān)控。二者的區(qū)別在于,主動檢測是由Nagios執(zhí)行查詢命令,而被動監(jiān)控是由外部程序(代理)將檢測結(jié)果推送給Nagios服務(wù)器。
主動監(jiān)控:Nagios監(jiān)控服務(wù)器定期主動到被監(jiān)控端獲取數(shù)據(jù)。主動監(jiān)控又分為需要在被監(jiān)控端安裝agent和不需要安裝agent兩種。
- 需要安裝agent:windows平臺下是NSClient++,linux下是nrpe。
- 不需要安裝agent:開啟被監(jiān)控端的snmp,或者通過其他網(wǎng)絡(luò)協(xié)議進行監(jiān)控。
被動監(jiān)控:被監(jiān)控端是將自身監(jiān)控數(shù)據(jù)發(fā)往Nagios的方式,又可以分為以下兩種:
- 被監(jiān)控端通過安裝nsca,定期檢查本機監(jiān)控項目,并將告警數(shù)據(jù)發(fā)往Nagios服務(wù)器。
- 被監(jiān)控端配置snmp trap,將相應(yīng)的trap信息發(fā)往Nagios服務(wù)器。
目前Nagios在G行主要承擔(dān)外部探測功能,從Service端主動發(fā)動監(jiān)控檢查。
Nagios大部分的監(jiān)控功能都是通過插件來實現(xiàn)的,以下簡單介紹一些我們現(xiàn)在使用的Nagios插件。
(1)Nagios plugins,是個軟件包,里面包含眾多的插件,我們現(xiàn)在使用的包括:check_nt 用于監(jiān)控Windows系統(tǒng)的負(fù)載、內(nèi)存使用、磁盤使用、系統(tǒng)運行時間、某進程運行情況。在Nagios服務(wù)器上使用此插件,需要在被監(jiān)控的Windows系統(tǒng)上安裝agent——NSClient++ 。
監(jiān)控系統(tǒng)負(fù)載
check_nt -H $HOSTNAME$ -p 12489-v CPULOAD –l 5,80,90
監(jiān)控系統(tǒng)內(nèi)存使用
check_nt -H $HOSTNAME$ -p 12489-v MEMUSE –w 80 –c 90
監(jiān)控系統(tǒng)磁盤使用
check_nt -H $HOSTNAME$ -p 12489-v USEDDISKSPACE -l d -c 80
監(jiān)控系統(tǒng)運行時間
check_nt -H $HOSTNAME$ -p 12489-v UPTIME
監(jiān)控系統(tǒng)進程
check_nt -H $HOSTNAME$ -p 12489-v PROCSTATE -d SHOWALL -l explorer.exe
-H :指定被監(jiān)控IP -p:是NSClient++默認(rèn)開啟端口 -v:要監(jiān)控的項目
-w: wanring閾值 -c:critical閾值 -l:附加參數(shù)
(2)check_nrpe,nrpe軟件包包含了check_nrpe命令,使用這個命令來獲取被監(jiān)控數(shù)據(jù),它的工作方式是:通過被監(jiān)控端上的nrpe配置文件來定義監(jiān)控命令(這些命令可以是Nagios plugins中的,也可以是自己開發(fā)的監(jiān)控腳本),然后從Nagios服務(wù)器上通過check_nrpe調(diào)用這些已定義的監(jiān)控命令,返回監(jiān)控數(shù)據(jù)。
監(jiān)控系統(tǒng)負(fù)載
在被監(jiān)控的linux端,安裝nrpe和Nagios plugin,通過更改nrpe.conf文件,我們定義命令:
command[check_load]=/usr/local/Nagios/libexec/check_load-w 15,10,5 -c 30,25,20
注:check_load包含在Nagiosplugins中,只能運行在linux上。-w是warning閾值,-c是critical閾值,三個值分別對應(yīng)這系統(tǒng)1分鐘、5分鐘、15分鐘的負(fù)載閾值。
(3)check_ping,用于檢查主機存活,可以簡單的理解為ping。
監(jiān)控系統(tǒng)網(wǎng)絡(luò)情況
check_ping –H $HOSTNAME$ -w100.0,20% -c 500.0,60%
-w:warning閾值,100代表延遲時間,20%代表丟包率
-c:critical閾值,500代表延遲時間,60%代表丟包率。
當(dāng)ping的情況無論是達到延遲時間的閾值還是丟包率的閾值,都會報警。
(4)check_tcp,檢查tcp連接相應(yīng)時間。
check_tcp –H $HOSTNAME$ -p 7001-w 0.05 -c 0.1
-p:指定tcp服務(wù)端口 -w:相應(yīng)時間warning閾值 -c:相應(yīng)時間critical閾值
(5)SNMP– Linux:通過snmp的方式監(jiān)控,不需要被監(jiān)控端安裝agent,只需要被監(jiān)控操作系統(tǒng)或者被監(jiān)控應(yīng)用系統(tǒng)開啟并配置snmp服務(wù)即可。Nagios服務(wù)器通過snmpwalk命令連接并獲取遠端的系統(tǒng)信息。
監(jiān)控linux磁盤
snmp_linux_disk_check.sh -H HOST-C community -w warning -c critical [-d disk]
-H指定被監(jiān)控主機IP。-C團體字。-w磁盤使用率告警閾值-c磁盤使用率criticla告警閾值-d是可選項,指定磁盤掛載點,如省略則檢測主機上所有掛載點。
監(jiān)控linux CPU
snmp_linux_cpu_check.sh -H HOST-C community -w warning -c critical
-H,-C參數(shù)意義同上-w是cpu使用率告警閾值-c是cpu使用率critical告警閾值
監(jiān)控linux內(nèi)存
snmp_linux_mem_check_v1.sh -HHOST -C community -w warning -c critical
-H,-C意義同上-w是內(nèi)存使用率告警閾值 -c是內(nèi)存使用率critical告警閾值
四、在G行的應(yīng)用
Nagios在G行主要承擔(dān)外部探測功能,從Service端主動發(fā)動監(jiān)控檢查。目前監(jiān)控對象包括操作系統(tǒng)、數(shù)據(jù)庫、應(yīng)用(端口、頁面、日志等)、專用設(shè)備等。
Nagios監(jiān)控架構(gòu)如下:
圖3 Nagios在G行的監(jiān)控架構(gòu)
五、總結(jié)與展望
Nagios是一款輕量級的開源監(jiān)控軟件,它可以有效的監(jiān)控Linux、Windows類等的主機和網(wǎng)絡(luò)設(shè)備,可以自定義監(jiān)控腳本,同時具有部署簡單、告警方式靈活、可監(jiān)控多種協(xié)議等優(yōu)點。目前行業(yè)中常用監(jiān)控軟件還有Zabbix、Prometheus等,它們分別有支持分布式監(jiān)控和容器監(jiān)控等優(yōu)點,這兩種監(jiān)控工具也在G行有應(yīng)用,共同支撐著G行的監(jiān)控系統(tǒng),并在監(jiān)控自服務(wù)和監(jiān)控標(biāo)準(zhǔn)等方面繼續(xù)優(yōu)化。