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