Nagios 配置技巧集錦
Nagios的結(jié)構(gòu)
Nagios的結(jié)構(gòu)其實(shí)很簡單,一個(gè)監(jiān)視系統(tǒng),一個(gè)web展現(xiàn)系統(tǒng),一個(gè)remote服務(wù)器,沒了。
監(jiān)視系統(tǒng)是根本,在debian中,需要安裝的包是Nagios3。在安裝這個(gè)包之后,會(huì)啟動(dòng)一個(gè)監(jiān)視進(jìn)程,負(fù)責(zé)檢查所有的服務(wù)是否OK。不OK就觸發(fā)事件。
檢查的時(shí)候,Nagios會(huì)去調(diào)一些“插件”。這些插件其實(shí)都在/etc/Nagios-plugins/config下面注冊過的。每個(gè)插件配置都是name!v1!v2…的格式。在注冊里面,可以看到這個(gè)command_name,對應(yīng)一個(gè)command_line。你很容易看到這就將一個(gè)定義轉(zhuǎn)換為了一個(gè)命令行。
直接執(zhí)行這個(gè)命令行,你可以看到一個(gè)標(biāo)準(zhǔn)輸出。Nagios就是解析這個(gè)標(biāo)準(zhǔn)輸出,得到值是否在一個(gè)合法的范圍內(nèi)的。所以從原理上說,你可以自己寫插件,對任何事情做Nagios的監(jiān)控。
對于某些遠(yuǎn)程可以獲得的信息,目標(biāo)設(shè)備上可以什么都不動(dòng),例如ping連通性,或者是端口連通性等。而對于其他信息,例如磁盤空間剩余值,靠遠(yuǎn)程可能沒法獲得,就需要在目標(biāo)設(shè)備上裝nrpe,Nagios Remote Plugin Executor Server。在debian中,就是Nagios-nrpe-server這個(gè)包。如果獲得本地信息,不需要這個(gè)包。
最后,cgi會(huì)將本地的信息暴露給web查詢,這就構(gòu)成了完整的Nagios體系。在debian中,這是Nagios3-cgi這個(gè)包。
Nagios頁面在nginx上的配置
這個(gè)過程比較繁瑣,因?yàn)閍pache會(huì)自動(dòng)配置,而nginx沒有宿主進(jìn)程,也沒有cgi。因此實(shí)際上需要運(yùn)行兩個(gè)宿主進(jìn)程。
首先,你需要安裝php-fpm宿主進(jìn)程,這個(gè)是nginx搭配php執(zhí)行的最佳宿主。在Nagios中有用到php,所以你需要php執(zhí)行能力。
其次,安裝fcgiwrap這個(gè)包。這是cgi執(zhí)行宿主,以fastcgi協(xié)議暴露。這里需要注意。如果你的nginx和Nagios的宿主不在同一個(gè)設(shè)備上(例如像貝殼這樣執(zhí)行了虛擬化的),那么實(shí)際上只要在Nagios的宿主上執(zhí)行fcgiwrap即可。php-fpm和nginx可以執(zhí)行在其他不同設(shè)備上,沒有關(guān)系。只是前者必須有Nagios的cgi代碼,后兩者必須有Nagios的網(wǎng)頁和php代碼。而這三者又都在Nagios3-cgi包里面。因此幾臺(tái)機(jī)器都需要安裝Nagios3-cgi包。
最后,配置nginx。
- location /Nagios3 {
- index index.html index.htm index.php;
- }
- location /Nagios3/stylesheets {
- root /etc;
- }
第一個(gè)映射是Nagios的基礎(chǔ)目錄,在根目錄中,我其實(shí)配置了Nagios3 -> /usr/share/Nagios3/htdocs/(debian中的鏈接位置)。第二個(gè)映射是樣式表配置,我用系統(tǒng)缺省的。
- location ~ ^/Nagios3/.*.php$ {
- include fastcgi_params;
- fastcgi_pass unix:/var/run/php5-fpm.sock;
- }
這個(gè)是Nagios的php解析代碼。我的php-fpm執(zhí)行在同一臺(tái)機(jī)器上,因此直接如此配置即可。
- location /cgi-bin/Nagios3 {
- root /usr/lib;
- include fastcgi_params;
- fastcgi_param REMOTE_USER $remote_user;
- fastcgi_pass dev:port;
- }
最后是cgi暴露的配置。由于我的Nagios宿主并不在web服務(wù)器上,因此fastcgi是個(gè)遠(yuǎn)程地址。而且注意REMOTE_USER,傳遞這個(gè)才能讓遠(yuǎn)程認(rèn)到你的用戶basic auth。由于Nagios的cgi通過這個(gè)工作,因此沒有這個(gè)會(huì)直接導(dǎo)致對方始終認(rèn)為你是無權(quán)限用戶。
Nagios的簡單配置
我們首先認(rèn)清一點(diǎn),Nagios并不負(fù)責(zé)管理機(jī)器的維護(hù)。他的設(shè)計(jì)目標(biāo)是“可用性”。因此目標(biāo)是否可達(dá),服務(wù)是否可用,是Nagios的關(guān)心重點(diǎn)。至于磁盤,負(fù)載,只是順便監(jiān)控而已。所以你可以看到,Nagios并沒有直接的插件來監(jiān)控CPU或者內(nèi)存。他只有snmp插件可以查詢到這些數(shù)據(jù)。
所以,我們開心一點(diǎn)。最低限度,我們將所有需要監(jiān)控的設(shè)備和服務(wù)端口加入列表。當(dāng)這些設(shè)備不可達(dá)時(shí),Nagios會(huì)發(fā)出告警(有郵件)。而如果運(yùn)氣好,我們是可以監(jiān)控到這臺(tái)機(jī)器是否有apt包需要升級(jí),磁盤空間是否夠的。作為建議,其實(shí)你只需要監(jiān)控load和磁盤空間利用率就夠了。其余的東西一般不大需要。當(dāng)內(nèi)存或者CPU發(fā)生問題的時(shí)候,你的query其實(shí)也拿不到返回。相對的,目標(biāo)端口很快失去響應(yīng)進(jìn)而引發(fā)告警才是我們的預(yù)期。
OK,在這個(gè)基礎(chǔ)之上,讓我們看看有什么可以配置的。
服務(wù)器添加
首先,你可以定義一些機(jī)器。localhost_Nagios2.cfg里面有例子,大致是這個(gè)樣子。
- define host{
- use generic-host ; Name of host template to use
- host_name host
- alias host
- address IP
- }
我建議你專門弄個(gè)文件來管理這些自己的設(shè)備,例如我這里叫hosts.cfg。
基本服務(wù)
hostgroups_Nagios2.cfg中有很多服務(wù)器組,其中有一個(gè)ssh組和http組是內(nèi)置的。如果你的設(shè)備有這兩個(gè)最常見服務(wù),你直接添加到這兩個(gè)組里面,設(shè)備的對應(yīng)服務(wù)就會(huì)被監(jiān)控。
其中有個(gè)debian組需要多說一下,這個(gè)組并沒有服務(wù),但是這個(gè)組定義了設(shè)備的類型為debian。你在web中可以看到logo。
在services_Nagios2.cfg里面,你還可以定義其他自己的常見服務(wù),并且將服務(wù)器加入到hostgroups中。
對于少數(shù)特殊的服務(wù),就要在services里面開了。在hosts里面直接定義一些服務(wù)比較簡單直接。
服務(wù)器定義
默認(rèn)的generic-host是帶有keep-alive的,服務(wù)器會(huì)通過ping來確認(rèn)設(shè)備活著。如果你的目標(biāo)上面為了安全加防火墻關(guān)了icmp,你又很難讓目標(biāo)機(jī)器對你的IP互信的話。那么開著ping會(huì)很煩。每天看著有個(gè)服務(wù)器掛了,其實(shí)沒事。
你可以在generic-host_Nagios2.cfg里面,將標(biāo)準(zhǔn)配置復(fù)制一份,去掉下面一行。這個(gè)服務(wù)器就不會(huì)檢查是否活著了。
- check_command check-host-alive
nrpe
nrpe的配置比較繁瑣,你首先要在nrpe服務(wù)的配置文件中,將需要執(zhí)行的指令定義好。然后在Nagios的服務(wù)這里用check_nrpe檢查返回。