您好,登錄后才能下訂單哦!
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 emailznyang@vip.qq.com #郵箱 } 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 }
#以下是正在獲取
#當監控成功會顯示一下
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!
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
#收到報警郵件
#啟動mysql后收到恢復郵件
八.nagios監控腳本編寫
8.1.插件監視控制臺的退出碼
退出碼 | 定義 |
0 | OK表示服務正常 |
1 | WARNING表示警告 |
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-最大值
正式輸出的內容和制圖內容要用“|”隔開,連個出圖內容要用空格隔開
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。