使用nagios監(jiān)控主機(jī)及服務(wù)
寫(xiě)在前頭:限于個(gè)人對(duì)nagios的了解有限,寫(xiě)得不夠深入與系統(tǒng),甚至可能會(huì)有些錯(cuò)誤,各位看官還多包涵。本文主要涉及的是nagios daemon、nrpe及三個(gè)部分。
01
nagios系統(tǒng)的功能
- 主機(jī)或服務(wù)狀態(tài)監(jiān)控
nagios是一款開(kāi)源的監(jiān)控軟件,從它可以監(jiān)控的設(shè)備類(lèi)型上來(lái)看,主要包含網(wǎng)絡(luò)設(shè)備,服務(wù)器設(shè)備。常見(jiàn)的網(wǎng)絡(luò)設(shè)備如:路由器、交換機(jī)、防火墻、F5、打印機(jī)等,常見(jiàn)的服務(wù)器設(shè)備主要分為:UNIX類(lèi)、Linux類(lèi)以及Windows類(lèi)。按我的理解凡是支持snmp協(xié)議的設(shè)備,包含PC都可以通過(guò)nagios進(jìn)行監(jiān)控。當(dāng)然,nagios實(shí)現(xiàn)對(duì)主機(jī)資源及服務(wù)的監(jiān)控并非全依靠snmp協(xié)議,它最為主要的監(jiān)控手段是通過(guò)nrpe組件來(lái)實(shí)現(xiàn)。 - 監(jiān)控告警通知
nagios對(duì)在網(wǎng)絡(luò)中發(fā)現(xiàn)的問(wèn)題會(huì)及時(shí)產(chǎn)生告警信息并通過(guò)事先定義好的方式,如郵件、短信、微信等方式通知相關(guān)人員。隨著網(wǎng)絡(luò)運(yùn)維工作更加自動(dòng)化,還可以通過(guò)nagios支持的相應(yīng)API接口,開(kāi)發(fā)相應(yīng)的程序,實(shí)現(xiàn)其自動(dòng)或人干干預(yù)去對(duì)監(jiān)控發(fā)現(xiàn)的問(wèn)題進(jìn)行自動(dòng)化的處理。 - 監(jiān)控信息可視化
nagios結(jié)合web服務(wù)器,可以將整個(gè)網(wǎng)絡(luò)所監(jiān)控的所有信息以web頁(yè)面的形式展現(xiàn)出來(lái),還可以結(jié)合外部軟件實(shí)現(xiàn)監(jiān)控?cái)?shù)據(jù)可視化,以圖表的形式展示在web頁(yè)面中,本文將介紹nagios常用的畫(huà)圖軟件包pnp,現(xiàn)在叫pnp4nagios。
- 監(jiān)控?cái)?shù)據(jù)存儲(chǔ)
nagios監(jiān)控到的數(shù)據(jù)會(huì)存儲(chǔ)下來(lái),可以直接以文件的形式存儲(chǔ)也可以通過(guò)NDOUtils組件存儲(chǔ)到如mysql類(lèi)的數(shù)據(jù)庫(kù)中,從而可以很好支持監(jiān)控歷史數(shù)據(jù)的查詢(xún)。
02
nagios系統(tǒng)的組成
nagios系統(tǒng)主要包含nagios daemon、nagios plugin、nrpe、web三個(gè)組件,它還包含NDOUtils、NSCA、NSClinet++組件,它們共同組成一個(gè)完整的nagios,組成邏輯圖如下所示:

- Nagios Daemon
nagios系統(tǒng)的核心組件,它負(fù)責(zé)組織與管理各組件,將它們協(xié)調(diào)起來(lái)共同完成監(jiān)控任務(wù),并完成監(jiān)控信息的組織與展示。 - Nagios Plugins
nagios plugins主要就是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服務(wù)是否可用,可以通過(guò)程序探測(cè)的出來(lái),但如果要想取得被監(jiān)控端上如磁盤(pán)容量,cpu負(fù)載這類(lèi)本地信息時(shí),如果沒(méi)有相應(yīng)的權(quán)限就不行,所以就產(chǎn)生了代理程序,事先在被監(jiān)控機(jī)上安裝代理程序(Linux系統(tǒng)是nrpe軟件),然后通過(guò)它們來(lái)獲取監(jiān)控?cái)?shù)據(jù),再回送給nagios服務(wù)器。當(dāng)nrpe啟動(dòng)以后,它會(huì)開(kāi)啟5666端口。nrpe的工程原理如下圖所示:

NRPE 總共由兩部分組成:
check_nrpe:位于nagios server上。
NRPE daemon:位于被監(jiān)控的Linux主機(jī)上。
當(dāng)Nagios 需要監(jiān)控某個(gè)遠(yuǎn)程Linux 主機(jī)時(shí):
nagios 會(huì)運(yùn)行check_nrpe 這個(gè)插件,告訴它要檢查什么
check_nrpe 插件會(huì)連接到遠(yuǎn)程的NRPE daemon,所用的方式是SSL; NRPE daemon 會(huì)運(yùn)行相應(yīng)的nagios 插件來(lái)執(zhí)行檢查;
NRPE daemon 將檢查的結(jié)果返回給check_nrpe 插件,插件將其遞交給nagios做處理。
- NSClinet++
NSClient++這一組件是安裝在windows主機(jī)上,相當(dāng)于nagios server在windows端的代理程序。 - NSCA
NSAC這一組件適用于部署分布式nagios監(jiān)控系統(tǒng)時(shí)使用,它可以實(shí)現(xiàn)讓被監(jiān)控端主動(dòng)將需要監(jiān)控的信息發(fā)送給nagios服務(wù)端。
03
本文所用到系統(tǒng)環(huán)境
OS:CentOS release 6.8 (Final) 2.6.32-642.el6.x86_64
還有一個(gè)重要環(huán)境:互聯(lián)網(wǎng)(yum、百度、Google)。
各軟件包:

04
nagios系統(tǒng)軟件部署
服務(wù)器側(cè)軟件安裝
前提:使系統(tǒng)具備編譯軟件源碼包的能力,并提前解決一些包、共享庫(kù)文件之間的依賴(lài)關(guān)系,建議安裝如下兩個(gè)Group組件:

- 安裝nagios依賴(lài)的軟件包
nagios要通過(guò)web頁(yè)面展現(xiàn)監(jiān)控結(jié)果,所以nagios服務(wù)器同時(shí)還得是一個(gè)web服務(wù)器,因?yàn)閚agios各種數(shù)據(jù)的實(shí)時(shí)展現(xiàn)是動(dòng)態(tài)頁(yè)面呈現(xiàn)的,因此還需要用到php。nagios要實(shí)現(xiàn)畫(huà)圖還依賴(lài)于gd、rrdtool包。按照官方說(shuō)明安裝如下包:

- 創(chuàng)建nagios用戶(hù)及組
很多開(kāi)源軟件如果是通過(guò)源碼包來(lái)進(jìn)行安裝,為后續(xù)的安裝及服務(wù)運(yùn)行做準(zhǔn)備都需要通過(guò)事先創(chuàng)建好相應(yīng)服務(wù)的賬號(hào)及組。這里相關(guān)指令如下:

- 創(chuàng)建一個(gè)可以從web接口接受外部指令的用戶(hù)組并將nagios及apache添加進(jìn)組

-
- 安裝nagios core
nagios core就是前文提到的nagios daemon。解壓軟件包后,源碼安裝的通用三步驟:- configure
- make
- make install
此外相應(yīng)指令如下:
- 安裝nagios core

configure完成以后若出現(xiàn)make all
以完成編譯的提示則繼續(xù)執(zhí)行:

如果上述任一指令執(zhí)行后有error發(fā)生或者某文件,某組件沒(méi)有找到,務(wù)必先解決相應(yīng)的錯(cuò)誤,一般可能是某些包沒(méi)有安裝導(dǎo)致,根據(jù)提示信息中的關(guān)鍵字找出可能的包,然后yum安裝上即可。
- 創(chuàng)建登錄nagios web頁(yè)面的用戶(hù)及密碼
默認(rèn)系統(tǒng)中已存在名為nagiosadmin
的賬戶(hù),只需要給它指定密碼,其密碼會(huì)加密存儲(chǔ),密碼文件默認(rèn)為`/usr/local/nagios/etc/htpasswd.users,無(wú)需改動(dòng)。

- 重啟web服務(wù)

- 安裝plugin及nrpe組件
因?yàn)閚agios服務(wù)器本身也同樣需要被監(jiān)控,自己監(jiān)控自己或者被其它的nagios服務(wù)器所監(jiān)控,所以它也需要安裝plugin及nrpe組件。在軟件包的解壓目錄中執(zhí)行如下指令:

- 安裝完
plugin
以后會(huì)在/usr/local/nagios/libexec
目錄下存放大量插件,就是用這些插件來(lái)實(shí)現(xiàn)最終的監(jiān)控目的的。
按著安裝nrpe
:
nagios服務(wù)器安裝nrpe包主要目的是為了安裝check_nrpe插件,便于與被監(jiān)控Linux端的NRPE daemon程序通信,如果這臺(tái)nagios服務(wù)器也需要被其它nagios服務(wù)器監(jiān)控,那它還必須安裝nrpe daemon和nrpe daemon-config。

- 設(shè)置web、nagios服務(wù)開(kāi)機(jī)自啟

- 通過(guò)web頁(yè)面登錄nagios
做完以上步驟以后,即可打開(kāi)瀏覽器,輸入http://nagios-server-ip/nagios
,它會(huì)彈出提示框,輸入前面提到的nagiosadmin
及其密碼即可登錄。登錄后的初始界面如下:


被監(jiān)控端軟件安裝
在網(wǎng)絡(luò)中需要被監(jiān)控的Linux主機(jī)中安裝nagios plugin
和nrpe
兩個(gè)組件,并安裝xinetd組件,用于啟動(dòng)nrpe
程序。
- nagios plugin安裝
創(chuàng)建nagios
用戶(hù):

- 將tar.gz包解壓以后進(jìn)入其目錄,然后執(zhí)行以下命令:

- 安裝完成以后,建議修改安裝目錄
/usr/local/nagios
的屬主為nagios
,并可查看到其下有三個(gè)目錄:

- 安裝
nrpe
:
客戶(hù)端因?yàn)樾枰ㄟ^(guò)nrpe
程序來(lái)執(zhí)行從服務(wù)器側(cè)接收到的command,因此必須安裝nrpe
。

- 安裝xinetd
根據(jù)nrpe
的README
文件的說(shuō)明,可以將nrpe daemon
作為xinetd下的一個(gè)服務(wù)來(lái)進(jìn)行管理,所以需要事先將xinetd
安裝到系統(tǒng)中:

- 再接著安裝
nrpe
在xinetd
下的配置文件:

- 修改
nrpe
的配置文件,以允許nagios server
連接它:vim /etc/xinetd.d/nrpe
將only from
改成如下內(nèi)容: - 將
nrpe
服務(wù)端口號(hào)添加進(jìn)去:vim /etc/services
在最后一行加上nrpe ? ?5666/tcp ? ? ?#Nagios-Client
然后保存退出。
啟動(dòng)xinetd
服務(wù)并設(shè)置開(kāi)機(jī)自啟:

檢查nrpe是否啟動(dòng)即端口5666是否處于監(jiān)聽(tīng)狀態(tài):?ss -tnl
另一個(gè)檢測(cè)nrpe是否工作正常的辦法是在nagios服務(wù)器上使用check_nrpe
插件來(lái)測(cè)試與這臺(tái)客戶(hù)端的nrpe通信是否正常:

05
配置nagios監(jiān)控主機(jī)及服務(wù)
5.1 nagios配置文件位置
nagios要對(duì)哪些主機(jī)監(jiān)控哪些內(nèi)容都是通過(guò)名為.cfg的配置文件進(jìn)行定義的。
它們通常是位于/usr/local/nagios/etc
目錄中的*.cfg
以及位于/usr/local/nagios/etc/objects
目錄下的*.cfg
。
默認(rèn)的文件如下:

再看看/objects/
目錄下的內(nèi)容:

5.2 各配置文件的作用:
- nagios.cfg主配置文件
nagios.cfg
是nagios
服務(wù)端的主配置文件,它可以定義其它*.cfg
配置文件的位置,是否啟用性能監(jiān)控(收集監(jiān)控?cái)?shù)據(jù)以生成圖表),性能數(shù)據(jù)處理指令,性能數(shù)據(jù)文件格式模板及存放位置等,配置nagios
日志文件存放的信息級(jí)別及位置,nagios
進(jìn)程的啟動(dòng)用戶(hù)及組,日志文件的切割方式,顯示的日期格式等等。如果只是實(shí)現(xiàn)對(duì)主機(jī)及服務(wù)的監(jiān)控,不出監(jiān)控圖的話,默認(rèn)可以不改動(dòng)這一文件。 - templates.cfg模板定義文件
templates.cfg
是監(jiān)控的模板文件,對(duì)所有主機(jī)、服務(wù)、聯(lián)系人的定義為簡(jiǎn)化配置都可以根據(jù)需求定制相應(yīng)的模板,然后在主機(jī)、服務(wù)、聯(lián)系人配置文件中去引用模板即可。下面進(jìn)行簡(jiǎn)要說(shuō)明:

以上便是templates.cfg
文件中的主要內(nèi)容,可以按需修改已定義的模板或者新定義模板。其中涉及到部分對(duì)command的定義,它是需要在commands.cfg
文件中進(jìn)行定義的。
- commands.cfg命令定義文件
commands.cfg
文件可以包含監(jiān)控時(shí)需要用到的指令的定義,由這些指令來(lái)完成具體的監(jiān)控工作,它們可以在services.cfg文件中被調(diào)用。配置示例如下:

這里有一個(gè)名為check_nrpe
的command特別重要:需要指定它才能夠啟動(dòng)本地的check_nrpe
去連接被監(jiān)控端上的nrpe daemon,并在被監(jiān)控端執(zhí)行相應(yīng)的命令,需要自己添加,默認(rèn)commands.cfg
文件里是沒(méi)有的:

- contacts.cfg聯(lián)系人定義文件
contracts.cfg
這一文件定義了當(dāng)需要發(fā)送告警通知時(shí),需要發(fā)給哪些聯(lián)系人組,然后不同的組里可以分別定義相應(yīng)的成員,默認(rèn)情況下會(huì)將通知發(fā)給名為admins
的組,里面包含的email地址即為接收告警通知郵件的地址。示例如下:

- timeperiods.cfg時(shí)間段模板定義文件
timeperiods.cfg
主要用來(lái)對(duì)要進(jìn)行監(jiān)控的時(shí)間段以及可以發(fā)送通知的時(shí)間段進(jìn)行定義,很靈活很方便。

- localhost.cfg監(jiān)控服務(wù)器配置文件
localhost.cfg
這個(gè)文件是用來(lái)定義對(duì)這臺(tái)nagios服務(wù)器的哪些資源及服務(wù)進(jìn)行監(jiān)控的,它主要包含兩部分的定義,針對(duì)host級(jí)別的和針對(duì)service級(jí)別的。示例如下:
- hosts.cfg定義要被監(jiān)控的主機(jī)
hosts.cfg
文件可以將網(wǎng)絡(luò)中所有需要監(jiān)控的主機(jī)定義進(jìn)來(lái),并將它們根據(jù)需求分組,一臺(tái)主機(jī)可以同時(shí)屬于不同的組,默認(rèn)情況下不允許組里面一臺(tái)主機(jī)都沒(méi)有,然后根據(jù)需要調(diào)用不同的主機(jī)模板(事先在templates.cfg中定義)。另一點(diǎn)很重要的是這個(gè)文件需要自己創(chuàng)建,不建議直接在localhost.cfg里添加。示例如下:

- services.cfg定義要被監(jiān)控的服務(wù)
services.cfg
這個(gè)文件默認(rèn)也是不存在的,需要手工創(chuàng)建,可以以localhost.cfg里定義的service部分作為模板進(jìn)行修改。在它里面可以針對(duì)不同的服務(wù)調(diào)用不同的模板,以及把這些服務(wù)應(yīng)用到哪些主機(jī)或主機(jī)組上。示例如下:
由于新增加了兩個(gè)配置 文件(hosts.cfg和services.cfg),所以需要在nagios主配置文件(nagios.cfg)中指明它們的位置,只需要在nagios.cfg中加上兩行,搜索下cfg_file
加到它們的下面即可:

5.3 檢查配置文件
nagios自帶的就有配置文件語(yǔ)法及邏輯檢測(cè)工具,檢測(cè)方式:

檢測(cè)如果沒(méi)有問(wèn)題,則可以重載nagios服務(wù),使用最新配置文件來(lái)工作了。

重載服務(wù)service nagios reload
5.4 客戶(hù)端配置監(jiān)測(cè)命令及參數(shù)
要實(shí)現(xiàn)對(duì)Linux主機(jī)的監(jiān)控還差非常關(guān)鍵的一步,去到各被監(jiān)控Linux主機(jī)上配置實(shí)際要執(zhí)行的指令,它們是在/etc/usr/local/nagios/etc/nrpe.cfg
文件中定義的。 示例文件如下:

注意:[]中的內(nèi)容,這些字符要和nagios服務(wù)端上
services.cfg里定義command時(shí)check_nrpe!后面的字符完全一樣,等號(hào)中的內(nèi)容則前面介紹的方法查看每個(gè)plugin的具體用法。
客戶(hù)端在修改完nrpe.cfg文件以后,需要重啟nrpe進(jìn)程:

06
登錄nagios web頁(yè)面查看監(jiān)控?cái)?shù)據(jù)
在nagios客戶(hù)端還沒(méi)有配置好nrpe.cfg文件時(shí),nagios server是無(wú)法監(jiān)控到客戶(hù)端的,此時(shí)應(yīng)該可以通過(guò)web頁(yè)面查看到一堆NRPE:undefined command之類(lèi)的錯(cuò)誤信息,當(dāng)客戶(hù)端nrpe服務(wù)修改完成并重啟之后,過(guò)會(huì)兒就能夠正常監(jiān)控上這些客戶(hù)端了。效果展示如下:

主機(jī)監(jiān)控視圖

細(xì)心的讀者可能已經(jīng)發(fā)現(xiàn)兩圖中,日期格式好像更易讀,默認(rèn)會(huì)顯示為04-08-2017 22:30:00
這種,這是因?yàn)楣P者修改了nagios.cfg的date_format
為iso8601
,具體可查看nagios.cfg文件獲知。
07
結(jié)尾
在前期安裝及配置過(guò)程中要仔細(xì)留意可能出現(xiàn)的警告及錯(cuò)誤信息,盡可能修復(fù)它們之后在后續(xù)操作,nagios跑起來(lái)以后,可以通過(guò)查看/var/log/messages
或者/usr/local/nagios/var/nagios.log
來(lái)觀察錯(cuò)誤信息,以找到解決辦法。
比如:
在系統(tǒng)運(yùn)行過(guò)程中因?yàn)閚agios server和客戶(hù)端nrpe間需要建立ssl會(huì)話,所以openssl,openssl-devel包是需要安裝的。如果要使用snmp監(jiān)控主機(jī)及服務(wù)則需要安裝net-snmp包。如果對(duì)防火墻不熟悉建議關(guān)閉其服務(wù),關(guān)閉SELinux。這些在文中未提到,但也是需要注意的地方。
通過(guò)nagios實(shí)現(xiàn)對(duì)主機(jī)和服務(wù)的監(jiān)控基本操作方法就寫(xiě)到這兒,在日常使用中有很多可可以深入的地方,特別是對(duì)現(xiàn)網(wǎng)各種服務(wù)各項(xiàng)指標(biāo)的監(jiān)控工作,還需要開(kāi)發(fā)插件然后部署才能夠?qū)崿F(xiàn),這應(yīng)該才是監(jiān)控類(lèi)軟件應(yīng)用真正有挑戰(zhàn)的地方,考驗(yàn)運(yùn)維工程師的開(kāi)發(fā)能力,nagios支持使用perl、Python、shell,C等語(yǔ)言開(kāi)發(fā)插件以滿足實(shí)際業(yè)務(wù)監(jiān)控需求。