1. 程式人生 > 其它 >監控利器之nagios原理詳解

監控利器之nagios原理詳解

第一節 Nagios簡介

nagios是系統管理人員和運維監控人員必須的工具之一,利用nagios可以監控本地或者遠端主機資源,

如磁碟空間,系統負載等情況,也可以監控各種應用,例如HTTP服務,FTP服務等。當主機或服務出現故障

Nagios可以通過郵件手機飛信等形式在第一時間通知系統維護人員。

同時,Nagios可以提供一個可選的基於瀏覽器的Web介面,以方便系統管理員檢視系統的執行狀態、網路狀態

各種系統問題以及日誌異常。!

第二節 Nagios結構與特點

     從結構上講,Nagios可分為核心和外掛兩個部分。Nagios核心部分只提供了少部分的監控功能,因此要搭建

一個完整的IT監控管理系統,使用者還需要為Nagios安裝相應的外掛。

     特點:1>監視本地或遠端主機資源(記憶體、程序、磁碟)

           2>監視網路服務資源(HTTP、PING、FTP、SMTP、POP3)

           3>允許使用者編寫自己的外掛來監控特定的服務

           4>當監控物件出現異常可以通過郵件或者簡訊報警

           5>可以事先定義事件處理程式,當主機或者服務出現故障時自動呼叫指定的處理程式

           6>通過WEB介面來監控和各個主機和服務的執行狀態。

第三節 Nagios原理以及工作原理(nagios本身並不具有太多功能,都是靠外掛實現)

第四節、安裝與配置

注意:一般原始碼安裝軟體需要裝“Development tools”和“Development Librarys”

第5節  安裝遠端nrpe外掛,監控遠端主機資源(disk。procs)

通過nrpe檢測外來linux/unix主機的服務(資源)。在被監控主機上需要安裝nagios-plugin和nrpe; nagios監控主機再需用安裝一個nrpe外掛

NRPE原理圖:

第一節講到,nagios監控遠端主機的方法很多,包括SNMP,NRPE,SSH和NCSA,這裡詳細講述NRPE

NRPE(Nagios Remote Plugin Executor)是用於在遠端伺服器上執行檢測命令的守護程序

,它用於讓Nagios監控端基於安裝的方式觸發遠端主機上的檢測命令,並將檢測結果輸入至監控端。而其執行的開銷遠遠低於基於ssh的檢測方式,而且檢測過程並不需要遠端主機上的系統賬號等資訊,有更高的安全性。

3.Nagios監控windos主機原理:

被監控的win主機需要安裝NSClients++軟體,然而這個軟體支援nrpe和nt的訪問;

在nagios中預設已經有了check_nt監控命令,因此使用這個方式監控windows主機還是比較不錯的。

當然因為nagios伺服器一般需要安裝nrpe,可以修改NSClients工具:

使用nrpe方式讓nagios監控windows主機

1、開啟nsclients的安裝目錄

2. 開啟nsc檔案進行編輯

在windows主機上檢視開啟的埠,一般是支援兩種方式的:(nrpe和nt)

一個是12489,一個是5666

配置完成後就可以在nagios監控主機上進行測試windows主機

./check_nt –H 192.168.0.57 –p 12489 –v CPULOAD –w 80 –c 90 –l 5,80,90

./check_nrpe –H 192.168.0.57 –c checkCPU –a warn=80 crit=90 time=20 time=10 time=5

多命令檢測:

./check_nt –H 192.168.0.57 –p 12489 –v UPTIME

./check_nt –H 192.168.0.57 –p 12489 –v USEDDISKSPACE –w 80 –c 90 –l C

首先載入command.cfg

Define command(

Command_name check_nt

Command_line  $USER$/check_nt –H $HOSTADDRESS$  -p 12489 –s PASSWORD –v $ARG2$ )

其次載入service.cfg

Define service (

Use     generic-service

Host_name   winhost

Service_description  W3SVC

Check_command    check_nt!SERVICESTATE! –d SHOWALL –l W3SVC)

最後修改模板檔案

Cfg_file=/etc/nagios/objects/windows.cfg

第五節 安裝繪圖外掛PNP(基於php和perl的利用rrdtool工具將nagios採集的資料繪製成圖)

缺少RRDs perl的支援,安裝rrdtool-perl(注意,必須得和系統的rrdtool版本一致)

PNP是一個小巧的開源軟體包,它基於PHP和PERL,PNP可以利用rrdtool工具將Nagios採集的資料繪製成相關的圖表,然後顯示主機或者服務在一段時間內的執行狀況

整合後的apache和php環境,需支援gd/zlib/jpeg.rrdtool perl

首先安裝rrdtools

tar zxf pnp-0.4.13.tar.gz

[root@nagios pnp-0.4.13]# ./configure --with-nagios-user=nagios --with-nagios-group=nagios --with-rrdtool=/usr/bin/rrdtool --with-perfdata-dir=/usr/local/nagios/share/perfdata/mysql-server

  make all

   make install 

   make install-config

make install-init 

2.配置pnp

root@nagios pnp-0.4.13]# cd /usr/local/nagios/etc/pnp/

[root@nagios pnp]# cp –p process_perfdata.cfg-sample process_perfdata.cfg

[root@nagios pnp]# cp –p npcd.cfg-sample  npcd.cfg

[root@nagios pnp]# cp –p rra.cfg-sample rra.cfg    

注意:如果不加-p需要chown修改/usr/local/nagios/etc/pnp的所有者

[root@nagios pnp]# vim process_perfdata.cfg

LOG_LEVEL = 2

1. 修改nagios配置

3.1增加小太陽標誌(為何沒出現呢)

[root@nagios objects]# vim templates.cfg
define host{
        name                    hosts-pnp      
        register                0
        action_url             /nagios/pnp/index.php?host=$HOSTNAME$
        process_perf_data       1
}
define service{
        name                    services-pnp  
        register                0
        action_url          /nagios/pnp/index.php?host=$HOSTNAME$&SERVICEDESC$
        process_perf_data       1
}

3.2修改nagios.cfg

process_performance_data=1
service_perfdata_command=process-service-perfdata
host_perfdata_command=process-host-perfdata

3.3修改command.cfg

define command{
        command_name    process-service-perfdata(host)
        command_line /usr/local/nagios/libexec/process_perfdata.pl
        }

3.4修改hosts.cfg和services.cfg檔案

define host{
        use                     linux-server,hosts-pnp 
        host_name               nagios-server
        alias                   nagios
        address                 127.0.0.1
        icon_image              switch.gif
        statusmap_image         switch.gd2
        2d_coords               100,200
        3d_coords               100,200,100
        }
define host{
        use                     linux-server,hosts-pnp 
        host_name               mysql-server
        alias                   mysql
        address                 192.168.0.143
        icon_image              server.gif
        statusmap_image         server.gd2
        2d_coords               500,200
        3d_coords               500,200,100
        }

3.5 測試pnp功能

檢查並且重啟nagios服務

http://nagios-server/nagios  檢視主機選項,點選小太陽

但是問題出現了,因為編譯的時候出現沒有發現RRDs perl modules

開啟後出現php GD not found!    安裝php-gd 重新啟動兩個服務

缺什麼就安裝什麼,最後如此:

第六節 .安裝報警機制,fention   

注意,fetion程式必須放在libexec目錄,並且需要nagios使用者執行                 

下載linux版飛信。

[root@server58 ~]# mv fetion /usr/local/nagios/libexec/

[root@server58 ~]# cd /usr/local/nagios/libexec/

[root@server58 libexec]# ll

[root@server58 libexec]# chown nagios.nagios fetion       必須以普通使用者執行

[root@server58 libexec]# ll fetion

-rw-r--r-- 1 nagios nagios 503425 Jul 18  2011 fetion

[root@server58 libexec]# chmod a+x fetion

[root@server58 ~]# tar zxf linuxso_20101113.tar.gz -C /usr/lib         庫檔案,必須的

[root@server58 ~]# su - nagios

[nagios@server58 ~]$ /usr/local/nagios/libexec/fetion

/usr/local/nagios/libexec/fetion: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory

[root@server58 ~]# yum install libstdc++.so.6 -y

[nagios@server58 ~]$ /usr/local/nagios/libexec/fetion             執行一下

/usr/local/nagios/libexec/fetion: error while loading shared libraries: libgssapi_krb5.so.2: cannot open shared object file: No such file or directory

[root@server58 ~]# yum install libgssapi_krb5.so.2 -y

[nagios@server58 ~]$ /usr/local/nagios/libexec/fetion

/usr/local/nagios/libexec/fetion: error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or directory

[root@server58 ~]# yum install libz.so.1 -y

[nagios@server58 ~]$ /usr/local/nagios/libexec/fetion             說明飛信安裝成功

Usage:

    --mobile=[mobile]

    --sid=[sid]

    --pwd=[pwd]

[nagios@server58 ~]$ /usr/local/nagios/libexec/fetion --mobile=18220561432 --pwd=tyq5211314 --to="18209247284" --msg-utf8="Good Luck" 

 必須以普通使用者執行哦

圖形驗證碼已經生成,檔名為:18220561432.jpg請識別後輸入圖形驗證碼:

如果傳送成功,將會生成一個圖形驗證碼。輸入後就會成功。

4.整合fetion,把fetion整合到nagios中

[root@server58 libexec]# vim fetion.sh 

/usr/local/nagios/libexec/fetion --mobile=18209247284 --pwd=xxbandy --to="$1" --msg-utf8="$2"

 > /dev/null    加上這個如果正確就不會有提示

[root@server58 libexec]# chmod +x fetion.sh 

[root@server58 libexec]# chown nagios.nagios fetion.sh 

[root@server58 libexec]# ll fetion.sh 

-rwxr-xr-x 1 nagios nagios 95 Mar 24 01:47 fetion.sh

[root@server58 libexec]# su - nagios

[nagios@server58 ~]$ /usr/local/nagios/libexec/fetion.sh 18209247284 "^_^"

SIP-C/4.0 280 Send SMS OK

T: sip:[email protected];p=20193

I: 2

Q: 1 M

L: 114

D: Sun, 24 Mar 2013 01:52:40 GMT

XI: 3C0CF0762B3BE378489E1BA9D73E4FA0

##修改template、command、contact配置檔案,檢測飛信指令碼!

[root@server58 objects]# vim templates.cfg 

define contact{

        name                            generic-contact         ; The name of this contact template

        service_notification_period     24x7                    ; service notifications can be sent anytime

        host_notification_period        24x7                    ; host notifications can be sent anytime

        service_notification_options    w,u,c,r,f,s             ; send notifications for all service states, flapping events, and scheduled downtime events

        host_notification_options       d,u,r,f,s               ; send notifications for all host states, flapping events, and scheduled downtime events

        service_notification_commands   notify-service-by-email,notify-service-by-fetion        ; send service notifications via email

        host_notification_commands      notify-host-by-email,notify-service-by-fetion   ; send host notifications via email

        register                        0                       ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL CONTACT, JUST A TEMPLATE!

[root@server58 objects]# vim commands.cfg

# 'notify-host-by-fetion' command definition

define command{

        command_name    notify-host-by-fetion

        command_line    $USER1$/fetion.sh $CONTACTPAGER$ "$NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$

        }

# 'notify-service-by-fetion' command definition

define command{

        command_name    notify-service-by-fetion

        command_line    $USER1$/fetion.sh $CONTACTPAGER$ "$NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$

        }

[root@server58 objects]# vim contacts.cfg 

        email                           nagios@localhost        ; <<***** CHANGE THIS TO YOUR EMAIL ADDRESS ******

        pager                           18209247284

[root@server58 objects]# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg 

[root@server58 objects]# /etc/init.d/nagios reload

Running configuration check...done.

Reloading nagios configuration...done