Nagios的安裝配置記錄
Nagios安裝、配置記錄
本文描述了我在安裝Nagios的過程中遇到的一些問題以、解決辦法以及注意事項(xiàng)。
Nagios是一套強(qiáng)大的監(jiān)控報(bào)警系統(tǒng),但是你不花一些時間,是絕對不可能很好地配置它的。除非你只需要監(jiān)控主機(jī)的alive等簡單的情況(例如ping),否則請放棄幻想,以極大的耐心去研究它吧。
(1)默認(rèn)安裝情況下,Nagios的主配置文件為:/usr/local/nagios/etc/nagios.cfg
打開這個文件,可以清楚地看到它指定了其他的配置文件:
- cfg_file=/usr/local/nagios/etc/objects/commands.cfg
- cfg_file=/usr/local/nagios/etc/objects/contacts.cfg
- cfg_file=/usr/local/nagios/etc/objects/timeperiods.cfg
- cfg_file=/usr/local/nagios/etc/objects/templates.cfg
所以你要注意了,不要以為“objects”目錄下的只是示例文件而已,它們默認(rèn)被當(dāng)作了 實(shí)際上使用的配置文件,你不需要麻煩地拷貝一份出來到 /usr/local/nagios/etc/ 目錄下再修改,直接修改這些配置文件就好了。
(2)“Map”、“Trends”功能無法使用,錯誤提示為:
- The requested URL /nagios/cgi-bin/statusmap.cgi was not found on this server.
- The requested URL /nagios/cgi-bin/trends.cgi was not found on this server.
是因?yàn)榫幾gNagios的時候沒有編譯出相應(yīng)的CGI文件(默認(rèn)安裝時,在 /usr/local/nagios/sbin/ 目錄下)。編譯依賴項(xiàng):
- libgd
- libgd-devel
- libpng
- libpng-devel
- libjpeg
- libjpeg-devel
- zlib
- zlib-devel
查詢安裝情況:
- rpm -qa | grep zlib
其中g(shù)d的兩個包名分別類似于:
- gd-2.0.33-9.4.el5_1.1.x86_64.rpm
- gd-devel-2.0.33-9.4.el5_1.1.x86_64.rpm
安裝相應(yīng)的RPM包后,重新編譯安裝Nagios:
- ./configure –with-gd-lib=/usr/lib –with-gd-inc=/usr/include
- make all
- make install
(3)重新編譯安裝Nagios(configure、make all、make install)不用擔(dān)心配置文件會丟失,因?yàn)閙ake install只會把Nagios主程序、CGI、HTML給安裝上。
(4)如果你在define service的時候,使用了一個模板,例如:
- use local-service ; Name of service template to use
那么你可以在這個service中覆蓋模板里的配置。例如,模板里設(shè)置了:
- notifications_enabled 1
你卻可以在這個service中設(shè)置:
- notifications_enabled 0
這樣,對這個service來說,觸發(fā)條件時也不會報(bào)警的。
(5)報(bào)警郵件通過sendmail發(fā)不出去?請查看郵件日志文件(/var/log/maillog)的內(nèi)容查找原因。當(dāng)然,最好用mail試一下:
- mail -v yourmail@abc.com
然后依次輸入郵件的標(biāo)題、正文以及抄送地址,回車發(fā)送!然后再去郵件日志文件里看日志,是成功了還是失敗了,分析原因。
(6)如果配置了短信發(fā)送報(bào)警信息,但是卻收不到短信,我要提醒你的是:
?、僭赿efine command的地方,command_line里寫的發(fā)送報(bào)警短信的命令行中,用于發(fā)送報(bào)警短信的程序要寫全路徑,例如/usr/local/bin/sendsms,不要以為寫一個“sendsms”就可以了,盡管你在Linux命令行下可以找到這個命令(因?yàn)樗?usr/local/bin/目錄下),但是對Nagios來說,它卻找不到,所以要寫全路徑。這個規(guī)律我是試驗(yàn)發(fā)現(xiàn)的,至于是不是普遍現(xiàn)象,或者是不是所有版本的Nagios都是這樣,我不知道,我只是通過試驗(yàn)知道這樣能解決問題。
?、诙绦沤涌诘?0個字符限制,有時候超過了是發(fā)不出短信的!請確認(rèn)你的短信接口允許的單條短信字符數(shù)限制。
(7)在montoring server上執(zhí)行命令:
- /usr/local/nagios/libexec/check_nrpe -H 192.168.17.2 -c check_disk
提示錯誤:NRPE: Command 'check_disk' not defined
這是因?yàn)闆]有配置好兩端的NRPE和Nagios,使得monitoring server不能遠(yuǎn)程執(zhí)行check_disk命令。
在被監(jiān)控服務(wù)器端,需要修改nrpe.cfg文件:
- dont_blame_nrpe=1
這將允許命令帶參數(shù)執(zhí)行。
另外,在nrpe.cfg文件的最后,原來有幾行注釋掉的內(nèi)容:
- #command[check_users]=/usr/local/nagios/libexec/check_users -w $ARG1$ -c $ARG2$
- #command[check_load]=/usr/local/nagios/libexec/check_load -w $ARG1$ -c $ARG2$
- #command[check_disk]=/usr/local/nagios/libexec/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$
- #command[check_procs]=/usr/local/nagios/libexec/check_procs -w $ARG1$ -c $ARG2$ -s $ARG3$
把它們?nèi)∠⑨?。處于注釋狀態(tài)的話,NRPE當(dāng)然找不到這些命令了。
修改完之后,需要重啟服務(wù):
- service xinetd restart
(8)錯誤“CHECK_NRPE: Received 0 bytes from daemon. Check the remote server logs for error messages.”如何解決?這篇文章詳細(xì)地講解了解決辦法:Nagios: How to Enable check_nrpe Command Line Arguments
看完之后你可能很后悔你沒有早看到這篇文章吧?沒錯,和我一樣,要重新編譯安裝NRPE,不過配置Nagios、NRPE的過程就是這樣,折騰來折騰去,不費(fèi)點(diǎn)勁是解決不了問題的。
(9)在Nagios中,你會看到類似于“RTA = 455.04 ms”的數(shù)據(jù),RTA是什么呢?引用網(wǎng)上的話作答:Round Trip Average. The average time it took to receive a response to your ping packets.
(10)在Nagios中,檢測時間周期默認(rèn)是以分鐘為單位的,例如“normal_check_interval”的值為5時,代表正常檢測周期為5分鐘。假設(shè)你想以5秒鐘檢測一次,怎么辦?這時候你需要修改配置文件nagios.cfg中的“interval_length”參數(shù)的值,默認(rèn)值為60,代表基數(shù)是60秒,你改成1,代表基數(shù)是1秒,這時,“normal_check_interval”的值為5就表示正常檢測周期為5秒了。請注意,把“interval_length”的值修改以后,所有其他和周期有關(guān)的地方你都要檢查一遍,保證都被更改為了正確的數(shù)值,否則到時就全亂套了。
(11)在Nagios中使用自定義變量很簡單:無論是在host,service還是contact定義中,要添加一個自定義的變量,只需要以下劃線開頭就可以了,例如:_my_custom_var為一個在host定義中的自定義變量,則在其他地方,要使用這個變量的話,其宏名為_HOSTMY_CUSTOM_VAR,也就是說,Nagios在不僅將你的變量名轉(zhuǎn)換成了大寫,而且在前面加了一個“_HOST”。如果是service或contact中的自定義變量的話,則Nagios會分別添加“_SERVICE”或“_CONTACT”到宏名前。
(12)如果你在用 /usr/local/nagios/bin/nagios -v nagios.cfg 命令檢測你所編寫的Nagios配置文件的正確性的時候,得到了以下警告提示:
- Warning: Service 'XXX' on host 'XXX' has a notification interval less than its check interval! Notifications are only re-sent after checks are made, so the effective notification interval will be that of the check interval.
那么很明顯,就是你設(shè)置的某項(xiàng)service中的 notification_interval 值比 normal_check_interval 值大導(dǎo)致的了。normal_check_interval 是正常的檢測周期,例如10分鐘檢測一次,20分鐘檢測一次這樣的周期,而 notification_interval 看網(wǎng)上的很多文章,說它是發(fā)生故障之后的報(bào)警周期,例如該值設(shè)置成30分鐘就表示發(fā)生故障之后每30分鐘會報(bào)一次警。但是 notification_interval 為什么不能比 normal_check_interval 值要小呢?我完全可以讓某個service一小時才檢測一次,但是發(fā)生故障之后每1分鐘報(bào)一次警啊!反正我是沒想明白,或者是我對它們的含義理解有誤,還需要進(jìn)一步斟酌。
(13)在被監(jiān)控的服務(wù)器上安裝NRPE后,在配置文件 /etc/xinetd.d/nrpe 中,可以設(shè)置允許哪些IP地址訪問NRPE daemon,例如:
- only_from = 127.0.0.1
表示只有本機(jī)可以訪問。為了能讓多臺遠(yuǎn)程N(yùn)agios可以監(jiān)控此臺服務(wù)器的狀況,可以在此處添加多個IP地址,中間以空格隔開,例如
- only_from = 192.168.1.188 58.30.200.199
表示允許192.168.1.188和58.30.200.199這兩個IP訪問本機(jī)上的NRPE daemon。
另外再說一句,在NRPE的配置文件 /usr/local/nagios/etc/nrpe.cfg 中,有一個“allowed_hosts=”的選項(xiàng),可以設(shè)置允許哪些IP地址訪問,但是要注意了,文件里面的注釋寫得清清楚楚:
- “NOTE: This option is ignored if NRPE is running under either inetd or xinetd”
也就是說,如果NRPE是運(yùn)行在在 inetd 或 xinetd 下運(yùn)行的話,這個選項(xiàng)就被忽略了!所以,我個人覺得最好是在 /etc/xinetd.d/nrpe 中設(shè)置允許訪問的IP。
(14)如果你通過NRPE檢測一個遠(yuǎn)程服務(wù),可以先在Nagios主機(jī)上通過以下命令執(zhí)行一下:
/usr/local/nagios/libexec/check_nrpe -H 遠(yuǎn)程主機(jī)IP -c 遠(yuǎn)程檢測命令 -a 命令行參數(shù)
如果返回的結(jié)果是這樣的:
- Received 0 bytes from daemon. Check the remote server logs for error messages.
那么你就要按這個提示,到被監(jiān)控的主機(jī)上查看日志,看看是出了什么錯:
- tail -20 /var/log/messages
然后根據(jù)錯誤記錄來解決問題。
(15)“performance data”有兩個,一個是$HOSTPERFDATA$,另一個是$SERVICEPERFDATA$,當(dāng)你在報(bào)警郵件中要帶上performance data信息時,千萬不要漏了,要不然可能看不到你想要的信息。
(16)如果你在Nagios監(jiān)控系統(tǒng)的web界面中點(diǎn)進(jìn)去一個service,然后點(diǎn)擊“Disable notifications for this service”,這就可以直接禁用該對服務(wù)的報(bào)警,不過,在web界面中禁用某服務(wù)的報(bào)警,并不會對配置文件造成影響,也就是說,你在配置文件中設(shè)置了某服務(wù)的“notifications_enabled”值為1,那么就算你在web界面中禁用了其報(bào)警,配置文件中仍然會是1。不僅如此,就算你重啟了Nagios服務(wù)(service nagios restart),在web界面中禁用的報(bào)警仍然會是禁用狀態(tài),也就是說Nagios把你在web界面上的操作記錄在某個地方了(不是配置文件中)。這一點(diǎn)要特別注意,有時候收不到報(bào)警信息,而配置文件中的報(bào)警全都打開了,這時你就要去web界面里查看各項(xiàng)設(shè)置了。
(16)在commnads.cfg中定義的一個遠(yuǎn)程執(zhí)行的命令(通過NRPE來執(zhí)行),如果用 -t 參數(shù)指定了命令執(zhí)行的超時時間(例如-t 500指定了超時時間為500秒),但是還是經(jīng)常會收到錯誤報(bào)警:NRPE: Command timed out after 60 seconds。
這是怎么回事呢?在NRPE的文檔中寫得很清楚:
- The check_nrpe plugin returns "NRPE: Command timed out after x seconds"
- This error indicates that the command that was run by the NRPE daemon did not finish executing within the specified time. You can increase the timeout for commands by editing the NRPE configuration file and changing the value of the command_timeout variable. If you're running the NRPE daemon as a standalone daemon (and not under inetd or xinetd), you'll need to restart it in order for the new timeout to be recognized.
可見,要修改這個超時時間,在Nagios命令定義文件commands.cfg中通過 -t 參數(shù)指定是無效的,因?yàn)?-t 參數(shù)指定的是連接的超時時間,而不是NRPE的命令執(zhí)行超時時間。必須要修改NRPE的配置文件nrpe.cfg中的“command_timeout”參數(shù)值(默認(rèn)值為60秒)才有用,如果你要修改為5分鐘,應(yīng)該這樣改:
- command_timeout=300
(17)如果要監(jiān)控Widows的服務(wù)器,需要在Windows服務(wù)器上安裝NSClient++這個軟件,詳細(xì)的設(shè)置可看【這個】鏈接。在這里我簡要地描述一下:安裝NSClient++的過程中,需要設(shè)置允許訪問的IP地址,這個地址就是Nagios監(jiān)控服務(wù)器的地址;然后還需要設(shè)置一個密碼,這個密碼就是Nagios監(jiān)控服務(wù)器訪問這臺Windows上的NSClient時要提供的密碼(如果沒有密碼就能取數(shù)據(jù),那太不安全了)。安裝好之后,啟動NSClient的服務(wù),并且在服務(wù)屬性設(shè)置中勾上“Allow service to interact with desktop”的選項(xiàng),然后Windows上的設(shè)置就算完成了,然后就到設(shè)置Nagios服務(wù)器了:
在commands.cfg文件中,定義檢測Windows服務(wù)器的命令:
- define command{
- command_name check_nt
- command_line $USER1$/check_nt -H $HOSTADDRESS$ -p 12489 -s $ARG1$ -v $ARG2$ $ARG3$
- }
注意,-s 參數(shù)表示指定訪問NSClient的密碼,就是上面所說的、在NSClient安裝過程中設(shè)置的那個密碼。
然后在定義service的時候,像這樣寫:
- define service{
- use local-service
- host_name myWindowsServer
- service_description Windows Disk Space
- check_command check_nt!myPasswd!USEDDISKSPACE!-l c -w 80 -c 90
- }
其中,“myPasswd”是上面所說的那個密碼,你需要寫你設(shè)置的密碼;USEDDISKSPACE表示檢測的是磁盤空間;另外,看到上面的check_command中提供的最后一個參數(shù)了嗎:-l c -w 80 -c 90
其中第一個c表示檢測的是C盤,-w表示的是warning值,-c表示的是critical值。
【編輯推薦】