天天看點

Linux監控軟體之 Nagios

一、簡介

  Nagios是一款開源的電腦系統和網絡監視工具,能有效監控Windows、Linux和Unix的主機狀态,交換機路由器等網絡設定,列印機等。在系統或服務狀态異常時發出郵件或短信報警第一時間通知網站運維人員,在狀态恢複後發出正常的郵件或短信通知。

  Nagios原名為NetSaint,由Ethan Galstad開發并維護至今。NAGIOS是一個縮寫形式: "Nagios Ain't Gonna Insist On Sainthood" Sainthood 翻譯為聖徒,而"Agios"是"saint"的希臘表示方法。Nagios被開發在Linux下使用,但在Unix下也工作得非常好。

主要功能

1)網絡服務監控(SMTP、POP3、HTTP、NNTP、ICMP、SNMP、FTP、SSH)

2)主機資源監控(CPU load、disk usage、system logs),也包括Windows主機(使用NSClient++ plugin)

3)可以指定自己編寫的Plugin通過網絡收集資料來監控任何情況(溫度、警告……)

4)可以通過配置Nagios遠端執行插件遠端執行腳本

5)遠端監控支援SSH或SSL加通道方式進行監控

6)簡單的plugin設計允許使用者很容易的開發自己需要的檢查服務,支援很多開發語言(shell scripts、C++、Perl、ruby、Python、PHP、C#等)

7)包含很多圖形化資料Plugins(Nagiosgraph、Nagiosgrapher、PNP4Nagios等)

8)可并行服務檢查

9)能夠定義網絡主機的層次,允許逐級檢查,就是從父主機開始向下檢查

10)當服務或主機出現問題時發出通告,可通過email, pager, sms 或任意使用者自定義的plugin進行通知

11)能夠自定義事件處理機制重新激活出問題的服務或主機

12)自動日志循環

13)支援備援監控

14)包括Web界面可以檢視目前網絡狀态,通知,問題曆史,日志檔案等

二、工作原理

  Nagios的功能是監控服務和主機,但是他自身并不包括這部分功能,所有的監控、檢測功能都是通過各種插件來完成的。

  啟動Nagios後,它會周期性的自動調用插件去檢測伺服器狀态,同時Nagios會維持一個隊列,所有插件傳回來的狀态資訊都進入隊列,Nagios每次都從隊首開始讀取資訊,并進行處理後,把狀态結果通過web顯示出來。

  Nagios提供了許多插件,利用這些插件可以友善的監控很多服務狀态。安裝完成後,在nagios主目錄下的/libexec裡放有nagios自帶的可以使用的所有插件,如,check_disk是檢查磁盤空間的插件,check_load是檢查CPU負載的,等等。每一個插件可以通過運作./check_xxx –h 來檢視其使用方法和功能。

  Nagios可以識别4種狀态傳回資訊,即 0(OK)表示狀态正常/綠色、1(WARNING)表示出現警告/***、2(CRITICAL)表示出現非常嚴重的錯誤/紅色、3(UNKNOWN)表示未知錯誤/深***。Nagios根據插件傳回來的值,來判斷監控對象的狀态,并通過web顯示出來,以供管理者及時發現故障。

四種監控狀态

Linux監控軟體之 Nagios

  再說報警功能,如果監控系統發現問題不能報警那就沒有意義了,是以報警也是nagios很重要的功能之一。但是,同樣的,Nagios 自身也沒有報警部分的代碼,甚至沒有插件,而是交給使用者或者其他相關開源項目組去完成的。

  Nagios 安裝,是指基本平台,也就是Nagios軟體包的安裝。它是監控體系的架構,也是所有監控的基礎。

  打開Nagios官方的文檔,會發現Nagios基本上沒有什麼依賴包,隻要求系統是Linux或者其他Nagios支援的系統。不過如果你沒有安裝apache(http服務),那麼你就沒有那麼直覺的界面來檢視監控資訊了,是以apache姑且算是一個前提條件。關于apache的安裝,網上有很多,照着安裝就是了。安裝之後要檢查一下是否可以正常工作。

  知道Nagios 是如何通過插件來管理伺服器對象後,現在開始研究它是如何管理遠端伺服器對象的。Nagios 系統提供了一個插件NRPE。Nagios 通過周期性的運作它來獲得遠端伺服器的各種狀态資訊。它們之間的關系如下圖所示:

Linux監控軟體之 Nagios

Nagios 通過NRPE 來遠端管理服務

1)Nagios 執行安裝在它裡面的check_nrpe 插件,并告訴check_nrpe 去檢測哪些服務。

2)通過SSL,check_nrpe 連接配接遠端機子上的NRPE daemon

3)NRPE 運作本地的各種插件去檢測本地的服務和狀态(check_disk,..etc)

4)最後,NRPE 把檢測的結果傳給主機端的check_nrpe,check_nrpe 再把結果送到Nagios狀态隊列中。

5)Nagios 依次讀取隊列中的資訊,再把結果顯示出來。

三、環境說明

Host Name IP Software
server 192.168.0.113 Apache、Php、Nagios、nagios-plugins
client 192.168.0.112 nagios-plugins、nrpe

Server 安裝了nagios軟體,對監控的資料做處理,并且提供web界面檢視和管理。當然也可以對本機自身的資訊進行監控。

Client 安裝了NRPE等用戶端,根據監控機的請求執行監控,然後将結果回傳給監控機。

關閉防火牆

iptables -F

SELINUX=disabled

四、Nagios安裝

1、服務端

1)安裝epel的擴充源

Centos6預設的yum源裡沒有nagios相關的rpm包,但是我們可以安裝一個epel的擴充源: 

[root@server ~]# yum install -y epel-release

2)安裝httpd、php、nagios相關包

yum install -y httpd php php-mysql mysql mysql-server mysql-devel php-gd nagios nagios-plugins nagios-plugins-all nrpe nagios-plugins-nrpe libjpeg libjpeg-devel libpng libpng-devel 

注:這裡雖然用不上mysql,但是php可能會依賴mysql,是以一并安裝上,或許以後要用mysql呢。

3)設定登入nagios背景的使用者和密碼

[root@server ~]# htpasswd -c /etc/nagios/passwd nagiosadmin

password

4)啟動服務

[root@server ~]# service httpd start

[root@server ~]# service nagios start

5)通路nagios首頁

浏覽器輸入: http://192.168.0.113/nagios

輸入使用者名 nagiosadmin,密碼為剛剛設定的密碼。 

此時,nagios 監控的隻有 localhost,還沒有其他機器,要想添加監控客戶機,還需要在用戶端安裝 nagios 相關的軟體包,并且需要在服務端配置。

Linux監控軟體之 Nagios

2、用戶端

1)安裝epel源

[root@client ~]# yum install -y epel-release

2)安裝Nagios插件

[root@client ~]# yum install -y nagios-plugins nagios-plugins-all nrpe nagios-plugins-nrpe 

五、配置

1、用戶端配置

1)編輯nrpe.cfg配置檔案 

[root@client ~]# vim /etc/nagios/nrpe.cfg

找到:"allowed_hosts=127.0.0.1"

改為:"allowed_hosts=127.0.0.1,192.168.0.113"        //後面跟服務端 ip 

找到:"dont_blame_nrpe=0"

改為:"dont_blame_nrpe=1"

2)啟動nrpe服務

[root@client ~]# /etc/init.d/nrpe start

2、服務端配置

1)編輯配置檔案 

[root@server ~]# cd /etc/nagios/conf.d/

[root@server conf.d]# vim 192.168.0.112.cfg              //這裡我以用戶端ip為命名,加入如下配置 

define host{ 

        use                     linux-server             

        host_name           192.168.0.112 

        alias                       0.112 

        address                 192.168.0.112 

        } 

define service{ 

        use                     generic-service 

        host_name               192.168.0.112 

        service_description     check_ping 

        check_command           check_ping!100.0,20%!200.0,50% 

        max_check_attempts 5 

        normal_check_interval 1 

        host_name               192.168.0.112 

        service_description     check_ssh 

        check_command           check_ssh 

        max_check_attempts      5   

        normal_check_interval 1    

        notification_interval           60  

        service_description     check_http 

        check_command           check_http 

        max_check_attempts      5 

說明

"max_check_attempts 5" 表示當 nagios 檢測到問題時,一共嘗試檢測 5 次都有問題才會告警,如果該數值為 1,那麼檢測到問題立即告警。

"normal_check_interval 1" 表示重新檢測的時間間隔,機關是分鐘,預設是 3分鐘。

"notification_interval  60" 表示在服務出現異常後,故障一直沒有解決,nagios 再次對使用者發出通知的時間,機關是分鐘。如果你認為,所有的事件隻需要通知一次就夠了,則把這裡的選項設為 0。 

        以上服務不依賴于用戶端 nrpe 服務,我們可以想象,我們在自己電腦上可以使用 ping或者 telnet 探測遠端任何一台機器是否存活、是否開啟某個端口或服務。 而當我們想要檢測用戶端上的某個具體服務的情況時,就需要借助于 nrpe 了,比如想知道用戶端機器的負責或磁盤使用情況。

2)重新開機 nagios 服務 

[root@server conf.d]# nagios -v /etc/nagios/nagios.cfg       //先檢測配置檔案是否有錯誤

[root@server conf.d]# service nagios restart 

然後在浏覽器裡通路 nagios,重新整理會兒發現多出來一台主機,并且多出來三個服務。

Linux監控軟體之 Nagios

隻不過這三個服務不需要和用戶端進行通信就能擷取到。并不是我們想要的,我們想要監控系統負載,監控磁盤使用率等服務,這時候就要使用 nrpe 服務了。下面繼續添加服務。

3、添加其他服務

1)服務端編輯commands.cfg配置檔案

[root@server ~]# vim /etc/nagios/objects/commands.cfg         //末尾添加如下内容

define command{ 

        command_name    check_nrpe 

        command_line    $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ 

2)繼續在服務端編輯配置檔案

[root@server ~]# vim /etc/nagios/conf.d/192.168.0.112.cfg        //添加如下内容

        use     generic-service 

        host_name       192.168.0.112 

        service_description     check_load 

        check_command           check_nrpe!check_load 

        service_description     check_disk_sda1 

        check_command           check_nrpe!check_sda1 

"check_nrpe!check_load"這裡的 check_nrpe 就是在 commands.cfg 剛剛定義的,check_load 是客戶主機上檢測負載的腳本。

"check_sda1" 是客戶主機上檢測磁盤的腳本,我們可以在用戶端通過df -h指令來檢視有哪些磁盤。

下面我們接着編輯用戶端配置檔案

3)在用戶端上編輯 nrpe.cfg 配置檔案 

找到check_load,這行就是在服務端上要執行的腳本了。然後把下行的check_hda1 更改兩處:

"command[check_hda1] "  改為  "command[check_sda1]"

"/dev/hda1"  改為  " /dev/sda1"

注意:後面定義的參數-w為 waning狀态,-c 為 critical狀态 。

4)重新開機服務

用戶端重新開機 nrpe 服務 

[root@client ~]# service nrpe restart

服務端重新開機 nagios 服務 

[root@server ~]# nagios -v /etc/nagios/nagios.cfg    //檢測配置檔案

[root@server ~]# service nagios restart

此時再到浏覽器重新整理, 會看到又多出來兩個服務, 稍微等一會就可以檢視到具體的狀态了。

Linux監控軟體之 Nagios

六、Nagios配置郵件告警

目前 nagios 隻能在浏覽器上檢視各個機器各個服務的狀态,當某個機器宕掉或者某個服務宕掉時,我們是不知道,因為我們不可能一直盯着服務看。這時候,就需要用到告警系統了,讓它自動化,當發現問題時及時通知到我們。下面我們配置使用發郵件的方式來實作告警。 

以下所有操作都在服務端上完成。 

1)首先定義發郵件接收者 

[root@server ~]# vim /etc/nagios/objects/contacts.cfg        //末尾添加如下内容

define contact{ 

        contact_name               user1 

        use                             generic-contact 

        alias                           aaa 

        email              [email protected] 

        contact_name               user2

        alias                            bbb 

        email              [email protected] 

define contactgroup{ 

        contactgroup_name           common 

        alias                                    common 

        members                           user1, user2

contacts.cfg 裡面既可以定義 user,也可以定義 group, 先定義兩個 user: user2 和 user2,然後把這兩個 user 加入到 common 組裡面。等會發郵件就發給 common 組就可以了,那這樣 [email protected][email protected] 都會收到郵件。 

2)然後在要需要告警的服務裡面加上 contactgroup 

下面針對 check_load 服務增加告警相關的配置:

[root@server ~]# vim  /etc/nagios/conf.d/192.168.0.112.cfg          //增加标紅處 

        contact_groups        common 

        notifications_enabled  1    

        notification_period   24x7        

        notification_options  w,u,c,r   

notifications_enabled  1:表示是否開啟提醒功能。1 為開啟,0 為禁用。一般,這個選項會在主配置檔案(nagios.cfg)中定義,效果相同。

notification_period   24x7:表示發送提醒的時間段。非常重要的主機(服務)我定義為 7×24,一般的主機(服務)就定義為上班時間。如果不在定義的時間段内,無論什麼問題發生,都不會發送提醒。

notification_options  w,u,c,r:表示 service 的狀态。w 為 waning, u 為 unknown, c 為 critical, r

為 recover(恢複了),類似的還有一個 host 對應的狀态:d,u,r   d 狀态為 DOWN, u 狀态為UNREACHABLE , r 狀态恢複為 OK,需要加入到 host 的定義配置裡。

 3)編輯完配置檔案後,需要重新開機 nagios 服務 

[root@server ~]# nagios -v /etc/nagios/nagios.cfg

拓展文檔

編譯安裝:http://www.cnblogs.com/mchina/archive/2013/02/20/2883404.html

調用短信接口:http://www.aminglinux.com/bbs/thread-7380-1-1.html

整合微信:http://www.aminglinux.com/bbs/thread-7917-1-1.html