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