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



















