nagios監控+pnp4出圖


Nagios監控系統

By:大官人

一.nagios簡介

Nagios是一個監視系統運行狀態和網絡信息的監視系統。Nagios能監視所指定的本地或遠程主機以及服務,同時提供異常通知功能等。Nagios可運行在Linux/Unix平臺之上,同時提供一個可選的基於瀏覽器的WEB界面以方便系統管理人員查看網絡狀態,各種系統問題,以及日誌等等。

二.nagios功能特點

1、監控網絡服務(SMTP、POP3、HTTP、NNTP、PING等);

2、監控主機資源(處理器負荷、磁盤利用率等);

3、簡單地插件設計使得用戶可以方便地擴展自己服務的檢測方法;

4、並行服務檢查機制;

5、具備定義網絡分層結構的能力,用"parent"主機定義來表達網絡主機間的關係,這種關係可被用來發現和明晰主機宕機或不可達狀態;

6、當服務或主機問題產生與解決時將告警發送給聯繫人(通過EMail、短信、用戶定義方式);

7、可以定義一些處理程序,使之能夠在服務或者主機發生故障時起到預防作用;

8、自動的日誌滾動功能;

9、可以支持並實現對主機的冗餘監控;

10、可選的WEB界面用於查看當前的網絡狀態、通知和故障歷史、日誌文件等;

11、可以通過手機查看系統監控信息;

12、可指定自定義的事件處理控制器;

三.nagios的工作原理

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顯示出來,以供管理員及時發現故障。

四種監控狀態


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

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

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

  知道Nagios 是如何通過插件來管理服務器對象後,現在開始研究它是如何管理遠端服務器對象的。Nagios 系統提供了一個插件NRPE。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 依次讀取隊列中的信息,再把結果顯示出來。

四.nagios服務端的安裝部署

4.1安裝依賴添加用戶

yum install httpd php php-gd gcc glibc glibc-common gd gd-devel libjpeg-devellibpng-devel pango* libart_lgpl-devel pango-devel* cairo-devel* libxml2-devellibjpeg-devel libpng-devel php-gd gd-devel perl-GD libtoul-ltdl-develrrdtool-perl perl-devel perl-ExtUtils-Embed perl-Time-HiRes mysql openssl*rrdtool sysstat mailx
useradd nagios
groupadd nagcmd   
usermod -a -G nagcmd nagios
usermod -a -G nagcmd apache

4.2編譯安裝nagios

tar zxf nagios-3.5.1.tar
cd nagios-3.5.1
./configure --with-command-group=nagcmd
make all
make install
make install-init
make install-commandmode
make install-config
make install-webconf
cd ..

4.3安裝nagios-plugins

tar zxf nagios-plugins-2.1.3.tar.gz
cd nagios-plugins-2.1.3
./configure --with-nagios-user=nagios--with-nagios-group=nagios --enable-perl-modules
make && make install
cd ..

安裝完成後會在/usr/local/nagios/libexec生成一些監控腳本

root@template ~ 08:37:32 # ls /usr/local/nagios/libexec/
check_apt      check_dummy        check_ifstatus check_mrtgtraf  check_ntp_time  check_rpc     check_tcp     process_perfdata.pl
check_breeze   check_file_age      check_imap      check_nagios    check_nwstat    check_sensors  check_time   urlize
check_by_ssh   check_flexlm       check_ircd      check_nntp      check_oracle    check_simap    check_udp     utils.pm
check_clamd    check_ftp           check_jabber    check_nntps     check_overcr    check_smtp     check_ups     utils.sh
check_cluster  check_http         check_load      check_nrpe      check_ping      check_spop     check_uptime
check_dhcp     check_icmp          check_log       check_nt        check_pop       check_ssh      check_users
check_disk     check_ide_smart    check_mailq     check_ntp       check_procs     check_ssmtp    check_wave
check_disk_smb check_ifoperstatus  check_mrtg     check_ntp_peer  check_real      check_swap     negate

4.4安裝nrpe

tar zxf cd nrpe-2.15.tar.gz
cd nrpe-2.15
./configure
make all
make install-plugin
make install-daemon
make install-daemon-config
cd ..

4.5安裝pnp4

tar zxf pnp4nagios-0.6.6.tar.gz
cd pnp4nagios-0.6.6
./configure --prefix=/usr/local/pnp4nagios--with-nagios-user=nagios --with-nagios-group=nagcmd
make all && make install
make instal-webconf
make instal-config
make instal-init
cp contrib/ssi/status-header.ssi/usr/local/nagios/share/ssi/
cd /usr/local/pnp4nagios/etc
mv misccommands.cfg-sample  misccommands.cfg
mv nagios.cfg-sample nagios.cfg
mv npcd.cfg-sample npcd.cfg
mv process_perfdata.cfg-sample  process_perfdata.cfg
mv rra.cfg-sample rra.cfg
cd /usr/local/pnp4nagios/etc/pages
mv web_traffic.cfg-sample web_traffic.cfg
cd ../check_commands
mv check_all_local_disks.cfg-sample  check_all_local_disks.cfg
mv check_nrpe.cfg-sample  check_nrpe.cfg
mv check_nwstat.cfg-sample  check_nwstat.cfg
cp /usr/local/pnp4nagios/libexec/process_perfdata.pl/usr/local/nagios/libexec/
chmod 755/usr/local/nagios/libexec/process_perfdata.pl
chown -R nagios.nagios /usr/local/nagios/libexec/*
mv /usr/local/pnp4nagios/share/install.php/usr/local/pnp4nagios/share/install.php.bak
/etc/init.d/npcd restart
cat>>/etc/httpd/conf/httpd.conf<<EOF
<Directory"/usr/local/pnp4nagios/share">
   AllowOverride None
    Orderallow,deny
    Allow fromall
    AuthName "Nagios Access"
    AuthTypeBasic
   AuthUserFile /usr/local/nagios/etc/htpasswd.users
    Requirevalid-user
</Directory>
EOF
service httpd restart
cd ..

4.6替換配置文件

sed -i 's#nagiosadmin#nagios#g' /usr/local/nagios/etc/cgi.cfg
chown -R nagios.nagios /usr/local/nagios

4.7配置密碼啓動nagios

root@template /usr/local/pnp4nagios/etc 19:50:52 # htpasswd -cb/usr/local/nagios/etc/htpasswd.users nagios 7758521
Adding password for user nagios
root@template /usr/local/src 20:36:22 # /etc/init.d/nagios start
Starting nagios: done.


五.nagios客戶端的安裝部署

5.1安裝依賴

yum install perl-devel perl-CPAN -y

5.2安裝nagios-plugins

參見服務端

5.3安裝nrpe

參見服務端

5.6啓動nagios

root@mysql02 /usr/local/nagios/libexec 08:55:17 # /usr/local/nagios/bin/nrpe -c/usr/local/nagios/etc/nrpe.cfg -d
root@mysql02 /usr/local/nagios/libexec 08:55:40 # netstat -ntlup
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name  
tcp       0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      962/sshd           
tcp       0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      1896/master        
tcp        0     0 0.0.0.0:5666               0.0.0.0:*                   LISTEN      28906/nrpe          
tcp        0     0 :::22                      :::*                        LISTEN      962/sshd           
tcp       0      0 ::1:25                      :::*                        LISTEN      1896/master        
tcp       0      0 :::5666                     :::*                        LISTEN      28906/nrpe         
tcp       0      0 :::3306                     :::*                        LISTEN      1778/mysqld        
udp       0      0 192.168.44.110:123          0.0.0.0:*                               28369/ntpd         
udp       0      0 127.0.0.1:123               0.0.0.0:*                               28369/ntpd         
udp       0      0 0.0.0.0:123                 0.0.0.0:*                               28369/ntpd         
udp        0      0 ::1:123                     :::*                                   28369/ntpd         
udp       0      0fe80::20c:29ff:fe40:183a:123 :::*                                   28369/ntpd         
udp       0      0 :::123                      :::*                                   28369/ntpd 
root@mysql02 /usr/local/nagios/libexec 08:57:55 # ps -ef | grep nrpe | grep -v grep
nagios    28906     1  0 08:55 ?        00:00:00 /usr/local/nagios/bin/nrpe -c/usr/local/nagios/etc/nrpe.cfg -d

六.nagios配置文件註解

6.1基本配置templates.cfg

check_command check-host-alive ;檢車的命令
max_check_attempts 3 ;最大檢查次數
normal_check_interval 2 ;正常檢查間隔
retry_check_interval 2 ;重試間隔
check_period 24x7 ;檢查週期
notification_interval 300 ;報警的通知間隔
notification_period 24x7  ; 當服務出現異常時,發送通知的時間段,這個時間段"24x7"在timeperiods.cfg
notification_options d,u,r   ;定義主機在什麼狀態下需要發送通知給使用者,d即down,表示宕機狀態;
                                                 ;u即unreachable,表示不可到達狀態,r即recovery,表示重新恢復狀態。
contact_groups admins ; 指定聯繫人組,這個“admins”在contacts.cfg文件中定義。
process_perf_data 1
注:這裏定義的信息也可以在下文的主機和服務內部定義,如果在主機和服務內部定義則以其內部定義的爲準

6.2定義監控的主機和主機組host.cfg

define host{   #定義一個客戶主機(可以定義很多個)
        uselinux-server   #使用的模板
       host_name ServerA  #主機名
        aliasServerA  #主機別名
        address192.168.18.203  #主機IP
        }
define hostgroup{ #定義一個主機組
       hostgroup_name linux-servers
        aliasLinux Servers
        membersServerA,ServerC  #添加主機到組多個用逗號隔開
        }

6.3定義監控的服務services.cfg

define service {   定義服務
      usegeneric-service,svr-pnp  #服務木板
      host_nameServerA,ServerC  #要監控該服務的主機
      service_descriptionPing        #服務的名稱
     check_command check_nrpe!check_ping        #服務的命令
}

6.4定義聯繫人contacts.cfg

define contact{ #建立聯繫人
       contact_name nagiosadmin #聯繫熱名稱
        usegeneric-contact #模板
        aliasNagios Admin
        [email protected]  #郵箱
        }
define contactgroup{ #建立聯繫人組
       contactgroup_name admins  #組名
        aliasNagios Administrators  #全名
        membersnagiosadmin  #組內成員(多個用","隔開)
     }

6.5定義命令nrpe.cfg

command[check_load]=/usr/local/nagios/libexec/check_load -w 15,10,5 -c30,25,20
#中括號裏面的是命令的名稱,nagios執行的時候就義這個名稱爲主。等號後面的是命令的具體信息
command[check_men]=/usr/local/nagios/libexec/check_memory.pl-f -w 10 -c 3
command[check_disk]=/usr/local/nagios/libexec/check_disk-w %5 -c %1 -p /
command[check_swap]=/usr/local/nagios/libexec/check_swap-w 20 -c 10
command[check_iostat]=/usr/local/nagios/libexec/check_iostat-d sda -w 1000 -c 2000

6.6nagios手動獲取客戶端信息

6.6.1允許服務端鏈接客戶端

修改客戶端nrpe.cfg

allowed_hosts=192.168.44.132  (這裏添加客戶端IP)

6.6.2手動執行檢查iostst

root@template /usr/local/nagios/etc 16:48:06 # /usr/local/nagios/libexec/check_nrpe -H192.168.44.110 -c check_iostat 
OK - I/O stats tps=3.05 KB_read/s=154.90KB_written/s=240.04 | 'tps'=3.05; 'KB_read/s'=154.90; 'KB_written/s'=240.04;
#-H是制定客戶端的IP地址,-c是客戶端要執行的命令。(command中括號中的內容)

七.實戰手動添加主機,監控mysql

7.1添加mysql主機

define host{   ;定義一個客戶主機(可以定義很多個)
        uselinux-server,host-pnp   ;使用的模板
       host_name mysql  ;主機名
        aliasmysql  ;主機別名
        address192.168.44.110  ;主機IP
        }

#以下是正在獲取

wKiom1fqAMzQii7eAAAWc8GVxgc753.png-wh_50

#當監控成功會顯示一下

wKioL1fqANnh4hT_AABBl1pv5dI733.png-wh_50

7.2在客戶端添加腳本

root@mysql02 /usr/local/nagios/libexec 10:11:47 # ./check_mysql 
mysql is up
root@mysql02 /usr/local/nagios/libexec 10:11:48 #chmod 755 check_mysql 
root@mysql02 /usr/local/nagios/libexec 10:12:01 # catcheck_mysql
#!/bin/bash
mysqladmin ping > /dev/null 2>&1
if [ $? -eq 0 ]; then
        echo"mysql is up"
        exit 0
else
        echo"mysql is down"
        exit 2
fi
root@mysql02 /usr/local/nagios/libexec 10:12:06 # ./check_mysql         
mysql is up
root@mysql02 /usr/local/nagios/libexec 10:12:08 # service mysqld stop
Shutting down MySQL............ SUCCESS!
root@mysql02 /usr/local/nagios/libexec 10:12:40 # ./check_mysql     
mysql is down

7.3添加客戶端nrpe配置

root@mysql02 /usr/local/nagios/etc 10:15:06 # cat nrpe.cfg | grep mysql
command[check_mysql]=/usr/local/nagios/libexec/check_mysql
root@mysql02 /usr/local/nagios/etc 10:15:12 # ps -ef | grep nrpe
nagios     1980      1 0 08:39 ?        00:00:00/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d
root      2315   1940  0 10:15 pts/0    00:00:00 grep nrpe
root@mysql02 /usr/local/nagios/etc 10:15:27 # kill 1980
root@mysql02 /usr/local/nagios/etc 10:15:32 # ps -ef | grep nrpe
root      2317   1940  0 10:15 pts/0    00:00:00 grep nrpe
root@mysql02 /usr/local/nagios/etc 10:15:33 # /usr/local/nagios/bin/nrpe -c/usr/local/nagios/etc/nrpe.cfg -d
root@mysql02 /usr/local/nagios/etc 10:15:42 # ps -ef | grep nrpe
nagios     2319      1 0 10:15 ?        00:00:00/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d
root      2321   1940  0 10:15 pts/0    00:00:00 grep nrpe

7.4在服務端測試

root@template /usr/local/nagios/etc/objects 10:17:20 #/usr/local/nagios/libexec/check_nrpe -H 192.168.44.110 -c check_mysql
mysql is up

7.5服務端添加服務重啓nagios

define service {
    namecheck_mysql
    usegeneric-service,svr-pnp
    host_namemysql
   service_description mysqlalived
   check_command check_nrpe!check_mysql
}


7.6測試停止mysql

root@mysql02 /usr/local/nagios/etc 10:18:00 # servicemysqld stop
Shutting down MySQL............ SUCCESS!

wKiom1fqARryWrzLAAAc4Dc4iv8499.png-wh_50

7.7配置郵件報警

7.7.1修改郵件報警命令

define command{
  command_name  notify-host-by-email
  command_line   /usr/bin/printf"%b" "***** Nagios *****\n\nNotification Type:$NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRSS$\nInfo:$HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /bin/mailx -s "**$NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is$HOSTSTATE$ **" $CONTACTEMAIL$
   }
 
# 'notify-service-by-email' command definition
 define command{
  command_name       notify-service-by-email
  command_line      /usr/bin/printf"%b" "***** Nagios *****\n\nNotification Type:$NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress:$HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditionalInfo:\n\n$SERVICEOUTPUT$\n" | /bin/mailx-s "** $NOTIFICATIONTYPE$Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **"$CONTACTEMAIL$
   }

7.7.2添加報警用郵箱信息

cat>>/etc/mail.rc<<EOF
set from=[mail_addr]
set smtp=[smtp_server]
set smtp-auth-user=[auth_user]
set smtp-auth-password=[mail_pwd]
set smtp-auth=login
EOF

7.7.3測試發送郵件

root@template /usr/local/nagios/etc/objects 11:24:17 #echo 'hello world' | mailx -s "test mail" ******@126.com
root@template /usr/local/nagios/etc/objects 11:24:19 #


7.7.4修改添加報警人(contact.cfg)

define contact{
       contact_name                   nagiosadmin   ; Short name of user
  use       generic-contact   ; Inherit default values fromgeneric-contact template (defined above)
       alias                          Nagios Admin    ; Full name ofuser
 
        email                           ******@126.com  ; <<***** CHANGE THIS TO YOUR EMAILADDRESS ******  #修改郵箱爲自己的郵箱
        }
define contactgroup{
       contactgroup_name       admins
       alias                   NagiosAdministrators
        members                 nagiosadmin    #確保nagiosadmin用戶在admins組
        }

7.7.5添加service報警到admins組(templates.cfg)

define service{
    namegeneric-service
   active_checks_enabled 1
   passive_checks_enabled 1
   parallelize_check 1
   obsess_over_service 1
   check_freshness 0
   notifications_enabled 1
   event_handler_enabled 1
    flap_detection_enabled1
   failure_prediction_enabled 1
   process_perf_data 1
   retain_status_information 1
   retain_nonstatus_information 1
    is_volatile0
    check_period24x7
   max_check_attempts 3
   normal_check_interval 2
   retry_check_interval 1
    contact_groups admins    #報警到admins組
    notification_options w,u,c,r
   notification_interval 30
   notification_period 24x7
    register 0
        }

7.7.6停止mysql服務測試報警

#頁面顯示mysqldown

wKiom1fqAgjSSKCAAAAcvuRrxjA720.png-wh_50

#收到報警郵件

wKioL1fqAhKhhYbhAAB1v4Qwz5M729.png-wh_50

#啓動mysql後收到恢復郵件

wKioL1fqAlXD643uAACQHq-psQE496.png-wh_50

八.nagios監控腳本編寫

8.1.插件監視控制檯的退出碼


退出碼定義
0OK表示服務正常
1WARNING表示警告
2

   CRITICAL表示處於嚴重狀態

3
UNKNOWN表示處於未知狀態



例:shell退出函數exit [codenum],python退出函數sys.exit([codenum])

  


8.2nagios腳本輸出與出圖

echo "[context]" |[name]=[status];[warning];[critical];[min];[max];[name2]=….

註解:name-是當前出圖顯示的名稱

         status-當前值

         warning-警告的閥值

         critical-嚴重警告的閥值

         min-最小值

         max-最大值

         正式輸出的內容和製圖內容要用“|”隔開,連個出圖內容要用空格隔開

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章