Nagios监控系统详解
1 Nagios簡介
Nagios 全名為(Nagios Ain’t Goona Insist on Saintood),最初項目名字是 NetSaint。它是一款免費的開源 IT 基礎(chǔ)設(shè)施監(jiān)控系統(tǒng),其功能強大,靈活性強,能有效監(jiān)控 Windows 、Linux、VMware 和 Unix 主機狀態(tài),交換機、路由器等網(wǎng)絡(luò)設(shè)置等。一旦主機或服務(wù)狀態(tài)出現(xiàn)異常時,會發(fā)出郵件或短信報警第一時間通知 IT 運營人員,在狀態(tài)恢復(fù)后發(fā)出正常的郵件或短信通知。Nagios 結(jié)構(gòu)簡單,可維護性強,越來越受中小企業(yè)青睞,以及運維和管理人員的使用。同時提供一個可選的基于瀏覽器的 Web 界面,方便管理人員查看系統(tǒng)的運行狀態(tài),網(wǎng)絡(luò)狀態(tài)、服務(wù)狀態(tài)、日志信息,以及其他異常現(xiàn)象。
Nagios利用其眾多的插件實現(xiàn)對本機和遠端服務(wù)的監(jiān)控,當(dāng)被監(jiān)控對象出現(xiàn)異常,Nagios就會及時給管理人員告警。它是一個基于TCP/IP協(xié)議的軟件包,包含有nagios主程序和它的各個插件。
Nagios的主要功能特點簡介:
- 監(jiān)視網(wǎng)絡(luò)服務(wù)(SMTP, POP3, HTTP, NNTP, PING等)
- 監(jiān)視主機資源(進程,磁盤等)
- 簡單的插件設(shè)計可以輕松擴展Nagios的監(jiān)視功能
- 服務(wù)等監(jiān)視的并發(fā)處理
- 錯誤通知功能(通過email,pager, 或其他用戶自定義方法)
- 可指定自定義的事件處理控制器
-可選的基于瀏覽器的WEB界面以方便系統(tǒng)管理人員查看網(wǎng)絡(luò)狀態(tài),各種系統(tǒng)問題,以及日志等等
- 可以通過手機查看系統(tǒng)監(jiān)控信息
2 Nagios工作原理
Nagios 軟件需安裝在一臺獨立的服務(wù)器上運行,這臺服務(wù)器稱為監(jiān)控中心,監(jiān)控中心服務(wù)器可以采用 Linux 或 Unix 操作系統(tǒng);每一臺被監(jiān)視的硬件主機或服務(wù)都運行一個與監(jiān)控中心服務(wù)器進行通信的 Nagios 軟件后臺程序,也可以理解為 Agent 或插件均可。監(jiān)控中心服務(wù)器讀取配置文件中的指令與遠程的守護程序進行通信,并且指示遠程的守護程序進行必要的檢查。雖然 Nagios 軟件必須在 Linux 或 Unix 操作系統(tǒng)上運行,但是遠程被監(jiān)控的機器可以是任何能夠與其進行通信的主機,根據(jù)遠程主機返回的應(yīng)答,Naigos 將依據(jù)配置進行回應(yīng);接著 Nagios 將通過本地的機器進行測試,如果檢測返回值不正確,Nagios 將通過一種或多種方式報警;具體原理如下圖所示:
3 Nagios監(jiān)控系統(tǒng)搭建
3.1 部署規(guī)劃
監(jiān)控主機 ? ? ? ?rango ? ?192.168.56.1
被監(jiān)控機1 ? ? ? ?vm1 ? ?192.168.56.101
被監(jiān)控機2 ? ? ? ?vm2 ? ?192.168.56.102
3.2 Nagios安裝
1. 安裝前準(zhǔn)備:
在編譯安裝前需確保安裝以下包:gdgd-devel png png-devel jpeg
jpeg-devel zlib zlib-devel,使nagiosweb界面的Maps、Trends等功能有效:
yum install gd fontconfig-devel libjpeg-devel libpng-devel gd-devel perl-GD openssl-devel php mailx postfix cpp gcc gcc-c++ libstdc++ glib2-devel
2. 創(chuàng)建用戶和組:
groupadd nagios
groupadd nagcmd
useradd -g nagios -G nagcmd -d /home/nagios -c "Nagios Admin" nagios
3. 在監(jiān)控主機上編譯安裝Nagios主程序Nagios-4.0.1.tar.gz:
[root@rango ~]# tar zxvf Nagios-4.0.1.tar.gz ; cd nagios-4.0.1
[root@rango nagios-4.0.1]#./configure --prefix=/usr/local/nagios --with-nagios-user=nagios \ --with-nagios-group=nagios --with-command-user=nagios --with-command-group=nagcmd --enable-event-broker --enable-nanosleep --enable-embedded-perl --with-perlcache --with-gd-lib=/usr/lib --with-gd-inc=/usr/include[root@rango nagios-4.0.1]#make all[root@rango nagios-4.0.1]#make install [root@rango nagios-4.0.1]#make install-init [root@rango nagios-4.0.1]#make install-commandmode [root@rango nagios-4.0.1]#make install-webconf[root@rango nagios-4.0.1]#make install-config
4. 安裝與配置apache:
編輯apache 的httpd.conf
最后面添加:
ScriptAlias /nagios/cgi-bin"/usr/local/nagios/sbin"
<Directory "/usr/local/nagios/sbin">
# SSLRequireSSL
Options ExecCGI
AllowOverride None
Order allow,deny
Allow from all
AuthName "Nagios Access"
AuthType Basic
AuthUserFile/usr/local/nagios/etc/htpasswd.users
Require valid-user
</Directory>
Alias /nagios "/usr/local/nagios/share"
<Directory"/usr/local/nagios/share">
# SSLRequireSSL
Options None
AllowOverride None
Order allow,deny
Allow from all
# Order deny,allow
# Deny from all
# Allow from 127.0.0.1
AuthName "Nagios Access"
AuthType Basic
AuthUserFile/usr/local/nagios/etc/htpasswd.users
Require valid-user
</Directory>
再次驗證配置文件:/usr/local/nagios/bin/nagios -v/usr/local/nagios/etc/nagios.cfg
設(shè)置用戶訪問權(quán)限:
htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
重新啟動nagios 和apache:
service httpd restart
service nagios restart
5. 安裝Postfix郵件服務(wù):
Nagios 監(jiān)控平臺支持郵件報警功能,所以需要安裝郵件服務(wù)。這里采用互聯(lián)網(wǎng)比較主流的 MTA —Postfix. 也可根據(jù)自己的生產(chǎn)環(huán)境去定義, 如: Sendmail、Qmail 等。由于 Nagios 只用到了 Postfix 的郵件發(fā)送功能,所以這里不需要對 Postfix 郵件服務(wù)作過多配置,安裝 Postfix 套件,啟動服務(wù)并在下次服務(wù)器重啟自動加載即可。具體如下命令:
#yum install postifx#chkconfig postfix on; /etc/init.d/postfix restart
3.3 安裝Nagios插件
Naigos 提供的各種監(jiān)控功能基本上是通過插件來完成的,而 Nagios 的核心指提供了很少的功能,因此安裝插件是非常有必要的。Nagios 官網(wǎng)提供了很多不同版塊的插件應(yīng)用,同時插件版本與 Nagios 版本也沒有什么關(guān)聯(lián)。
在監(jiān)控系統(tǒng)的所有節(jié)點上安裝Nagios插件:nagios-plugins-1.5.tar.gz
tar zxvf nagios-plugins-1.5.tar.gz && cd nagios-plugins-1.5
./configure --with-nagios-user=nagios --with-nagios-group=nagios --with-command-user=nagios --with-command-group=nagcmd ?--prefix=/usr/local/nagios
make all
make install
chmod 755 /usr/local/nagios
ll /usr/local/nagios/libexec/
total 5428
-rwxr-xr-x 1 nagios nagios 318368 Nov ?8 21:19 check_apt
-rwxr-xr-x 1 nagios nagios ? 2248 Nov ?8 21:19 check_breeze
-rwxr-xr-x 1 nagios nagios 121055 Nov ?8 21:19 check_by_ssh
lrwxrwxrwx 1 nagios nagios ? ? ?9 Nov ?8 21:19 check_clamd -> check_tcp
-rwxr-xr-x 1 nagios nagios ?84743 Nov ?8 21:19 check_cluster
-r-xr-xr-x 1 nagios nagios 116277 Nov ?8 21:19 check_dhcp
-rwxr-xr-x 1 nagios nagios 115838 Nov ?8 21:19 check_dig
-rwxr-xr-x 1 nagios nagios 330608 Nov ?8 21:19 check_disk
-rwxr-xr-x 1 nagios nagios ? 9286 Nov ?8 21:19 check_disk_smb
-rwxr-xr-x 1 nagios nagios 122763 Nov ?8 21:19 check_dns
-rwxr-xr-x 1 nagios nagios ?64375 Nov ?8 21:19 check_dummy
-rwxr-xr-x 1 nagios nagios ? 3050 Nov ?8 21:19 check_file_age
-rwxr-xr-x 1 nagios nagios ? 6312 Nov ?8 21:19 check_flexlm
lrwxrwxrwx 1 nagios nagios ? ? ?9 Nov ?8 21:19 check_ftp -> check_tcp
-rwxr-xr-x 1 nagios nagios 116722 Nov ?8 21:19 check_hpjd
-rwxr-xr-x 1 nagios nagios 406658 Nov ?8 21:19 check_http
-r-xr-xr-x 1 nagios nagios 122480 Nov ?8 21:19 check_icmp
-rwxr-xr-x 1 nagios nagios ?90529 Nov ?8 21:19 check_ide_smart
-rwxr-xr-x 1 nagios nagios ?15131 Nov ?8 21:19 check_ifoperstatus
-rwxr-xr-x 1 nagios nagios ?12592 Nov ?8 21:19 check_ifstatus
lrwxrwxrwx 1 nagios nagios ? ? ?9 Nov ?8 21:19 check_imap -> check_tcp
-rwxr-xr-x 1 nagios nagios ? 6884 Nov ?8 21:19 check_ircd
-rwxr-xr-x 1 nagios nagios 102018 Nov ?8 21:19 check_ldap
lrwxrwxrwx 1 nagios nagios ? ? 10 Nov ?8 21:19 check_ldaps -> check_ldap
-rwxr-xr-x 1 nagios nagios 103094 Nov ?8 21:19 check_load
-rwxr-xr-x 1 nagios nagios ? 6017 Nov ?8 21:19 check_log
-rwxr-xr-x 1 nagios nagios ?20281 Nov ?8 21:19 check_mailq
-rwxr-xr-x 1 nagios nagios ?90563 Nov ?8 21:19 check_mrtg
-rwxr-xr-x 1 nagios nagios ?90820 Nov ?8 21:19 check_mrtgtraf
-rwxr-xr-x 1 nagios nagios 102902 Nov ?8 21:19 check_nagios
lrwxrwxrwx 1 nagios nagios ? ? ?9 Nov ?8 21:19 check_nntp -> check_tcp
-rwxrwxr-x 1 nagios nagios ?65913 Nov 17 15:19 check_nrpe
-rwxr-xr-x 1 nagios nagios 119556 Nov ?8 21:19 check_nt
-rwxr-xr-x 1 nagios nagios 119658 Nov ?8 21:19 check_ntp
-rwxr-xr-x 1 nagios nagios 112690 Nov ?8 21:19 check_ntp_peer
-rwxr-xr-x 1 nagios nagios 109906 Nov ?8 21:19 check_ntp_time
-rwxr-xr-x 1 nagios nagios 145777 Nov ?8 21:19 check_nwstat
-rwxr-xr-x 1 nagios nagios ? 8779 Nov ?8 21:19 check_oracle
-rwxr-xr-x 1 nagios nagios 103337 Nov ?8 21:19 check_overcr
-rwxr-xr-x 1 nagios nagios 124240 Nov ?8 21:19 check_ping
lrwxrwxrwx 1 nagios nagios ? ? ?9 Nov ?8 21:19 check_pop -> check_tcp
-rwxr-xr-x 1 nagios nagios 325061 Nov ?8 21:19 check_procs
-rwxr-xr-x 1 nagios nagios 100621 Nov ?8 21:19 check_real
-rwxr-xr-x 1 nagios nagios ? 9578 Nov ?8 21:19 check_rpc
-rwxr-xr-x 1 nagios nagios ? 1451 Nov ?8 21:19 check_sensors
-rwxr-xr-x 1 nagios nagios 328529 Nov ?8 21:19 check_smtp
-rwxr-xr-x 1 nagios nagios 381507 Nov ?8 21:19 check_snmp
-rwxr-xr-x 1 nagios nagios ?98154 Nov ?8 21:19 check_ssh
-rwxr-xr-x 1 nagios nagios ?88321 Nov ?8 21:19 check_swap
-rwxr-xr-x 1 nagios nagios 112126 Nov ?8 21:19 check_tcp
-rwxr-xr-x 1 nagios nagios 100527 Nov ?8 21:19 check_time
lrwxrwxrwx 1 nagios nagios ? ? ?9 Nov ?8 21:19 check_udp -> check_tcp
-rwxr-xr-x 1 nagios nagios 110765 Nov ?8 21:19 check_ups
-rwxr-xr-x 1 nagios nagios ?83131 Nov ?8 21:19 check_users
-rwxr-xr-x 1 nagios nagios ? 2933 Nov ?8 21:19 check_wave
-rwxr-xr-x 1 nagios nagios 104604 Nov ?8 21:19 negate
-rwxr-xr-x 1 nagios nagios ?98773 Nov ?8 21:19 urlize
-rwxr-xr-x 1 nagios nagios ? 1936 Nov ?8 21:19 utils.pm
-rwxr-xr-x 1 nagios nagios ? 2917 Nov ?8 21:19 utils.sh
重啟Nagios服務(wù):
/etc/init.d/nagios restart
/etc/init.d/httpd restart
chkconfig httpd on
chkconfig naigos on
3.4 防火墻和SELinux設(shè)置
Selinux 和 Iptables 是 Linux 系統(tǒng)提供的安全防護機制,主要用來防護 Linux 系統(tǒng)下的服務(wù)或應(yīng)用程序不受外界安全***等。一般企業(yè)考慮到 Nagios 監(jiān)控平臺的安全可靠性,都會采用硬件的防火墻或其他安全設(shè)備來對服務(wù)器進行防護,故此處禁用SELinux和iptables
3.5 其他插件的安裝和說明
nrpe_2.12.tar.gz ——監(jiān)控Linux 需要(被監(jiān)控的Linux服務(wù)器安裝)
nsclient++0.3.5——監(jiān)控windows 需要(被監(jiān)控的Windows服務(wù)器安裝)
ndoutils:ndoutils是將Nagios的配置及監(jiān)控信息存儲到數(shù)據(jù)庫里,NPC通過調(diào)用ndo所存儲的數(shù)據(jù)來展現(xiàn)Nagios的信息。啟動:/usr/local/nagios/bin/ndo2db-c /usr/local/nagios/etc/ndo2db.cfg。
ps:ndoutils最新版本為1.5.2,只兼容Nagios3.x和NagiosXI,4.x版本不兼容,會報Error:Could not load module '/usr/local/nagios/bin/ndomod-3x.o' ->/usr/local/nagios/bin/ndomod-3x.o: undefined symbol:servicedependency_list的錯誤。
NPC:(NagiosPlugin for Cacti)是一個Cacti插件,安裝后可以在Cacti界面里使用Nagios的功能。
3.6 Nagios Web訪問
通過瀏覽器,在地址欄輸入: http://192.168.56.1/nagios, 輸入用戶名及密碼即可訪問 Naigos 登錄界面。
3.7 Nagios配置
1. Nagios目錄與相關(guān)配置文件
Nagios 安裝完成后,/usr/local/nagios/目錄下會生成 nagios 相關(guān)目錄及配置文件,默認(rèn)的的配置文件在/usr/local/nagios/etc 目錄下,如下表為Nagios 相關(guān)目錄的名稱及用途
| bin | Nagios 可執(zhí)行程序所在目錄 |
| etc | Nagios 配置文件目錄 |
| sbin | Nagios cgi 文件所在目錄, 也就是執(zhí)行外部 命令所需要文件所在的目錄 |
| share | Nagios 網(wǎng)頁存放路徑 |
| libexec | Nagios 外部插件存放目錄 |
| var | Nagios 日志文件、Lock 等文件所在的目錄 |
| var/archives | Nagios 日志自動歸檔目錄 |
| var/rw | 用來存放外部命令文件的目錄 |
下表為配置文件作用
| cgi.cfg ? | 控制 CGI 訪問的配置文件 |
| nagios.cfg ? | Nagios 主配置文件 |
| resource.cfg ? | 變量定義文件,又稱為資源文件,在此文件中定義變量,以便由其他配置文件引用,如$USER1$ |
| objects ? | objects 是一個目錄,在此目錄下有很多配置文件模板,用于定義 Nagios 對象 |
| objects/commands.cfg ? | 命令定義配置文件,其中定義的命令可以被其他配置文件引用 |
| objects/contacts.cfg | 定義聯(lián)系人和聯(lián)系人組的配置文件 |
| objects/localhost.cfg ? ? | 定義監(jiān)控本地主機的配置文件 |
| objects/printer.cfg | 定義監(jiān)控打印機的一個配置文件模板,默認(rèn)沒有啟用此文件 |
| objects/switch.cfg ? ? ? ? ? ? | 監(jiān)控路由器的一個配置文件模板,默認(rèn)沒有啟用此文件 |
| objects/templates.cfg | 定義主機和服務(wù)的一個模板配置文件,可以在其他配置文件中引用 |
| objects/timeperiods.cfg ? | 定義 Nagios 監(jiān)控時間段的配置文件 |
| objects/windows.cfg ? | 監(jiān)控 Windows 主機的一個配置文件模板,默認(rèn)沒有啟用此文件 |
| 備注: | Nagios 在配置方面非常靈活,默認(rèn)的配置文件并不是必需的。可以使用這些默認(rèn)的配置文件,也可以創(chuàng)建自己的配置文件,然后在主配置文件 nagios.cfg 中引用即可。 |
2. Nagios配置文件之間的關(guān)聯(lián)
Nagios 的配置過程涉及幾個定義有:主機、主機組、服務(wù)、服務(wù)組、聯(lián)系人、聯(lián)系人組、監(jiān)控時間和監(jiān)控命令等,從這些定義可以看出,Nagios 的各個配置文件之間是互為關(guān)聯(lián)、彼此引用的。成功配置一臺 Nagios 監(jiān)控系統(tǒng),需要掌握每個配置文件之間依賴與被依賴的關(guān)系,可從下面四個步驟來入手,第一步:定義哪些主機、主機組、服務(wù)和服務(wù)組,第二步:要定義這個監(jiān)控要通過什么命令實現(xiàn),第三步:要定義監(jiān)控的時間段,第四步:要定義主機或服務(wù)出現(xiàn)問題時要通知的聯(lián)系人和 聯(lián)系人組;強烈建議依據(jù)以上順序?qū)?Nagios 系統(tǒng)進行相關(guān)配置。
3. 主要配置文件詳解
templates.cfg文件
define contact{ ?
? ? ? ?name ? ? ? ? ? ? ? ? ? ? ?generic-contact ? ? ? ?#聯(lián)系人名稱
? ? ? ?service_notification_period ? ? 24x7 ? ? ? ? ? ? #當(dāng)服務(wù)出現(xiàn)異常時,發(fā)送通知的時間段,時間段是 7x24 小時
? ? ? ?host_notification_period ? ? ? ?24x7 ? ? ? ? ? ? #當(dāng)主機出現(xiàn)異常時,發(fā)送通知的時間段,時間段是 7x24 小時
? ? ? ?service_notification_options ? ?w,u,c,r ? ? ? ? ?#這個定義的是“通知可以被發(fā)出的情況”。w 即 warning,表示警告狀態(tài),u 即 unknown,表示不明狀態(tài),c 即 criticle,表示緊急狀態(tài),r 即 recover,表示恢復(fù)狀態(tài)
? ? ? ?host_notification_options ? ? ? d,u,r ? ? ? ? ? ?#定義主機在什么狀態(tài)下需要發(fā)送通知給使用者,d 即 down,表示宕機狀態(tài),u 即 unreachable,表示不可到達狀態(tài),r 即 recovery,表示重新恢復(fù)狀態(tài)。 ?
? ? ? ?service_notification_commands ? notify-service-by-email ?#服務(wù)故障時,發(fā)送通知的方式,可以是郵件和短信,這里發(fā)送的方式是郵件,其中“notify-service-by-email”在 commands.cfg 文件中定義。 ?
? ? ? ?host_notification_commands ? ? ?notify-host-by-email ? ?#主機故障時,發(fā)送通知的方式,可以是郵件和短信,這里發(fā)送的方式是郵件,其中“notify-host-by-email”在 commands.cfg 文件中定義。
? ? ? ?} ?
define host{ ?
? ? ? ?name ? ? ? ? ? ? ? ? ? ? ? ? linux-server ? ?#主機名稱 ?
? ? ? ?use ? ? ? ? ? ? ? ? ? ? ? ? ? generic-host ? #use 表示引用,也就是將主機 generic-host 的所有屬性引用到 linux-server 中來,在 nagios 配置中,很多情況下會用到引用。 ?
? ? ? ?check_period ? ? ? ? ? ? ? ? ? 24x7 ? ? ? ? ?#這里的 check_period 告訴 nagios 檢查主機的時間段 ?
? ? ? ?check_interval ? ? ? ? ? ? ? ? ?5 ? ? ? ? ? ?#nagios 對主機的檢查時間間隔,這里是 5 分鐘。 ?
? ? ? ?retry_interval ? ? ? ? ? ? ? ? ? 1 ? ? ? ? ? #重試檢查時間間隔,單位是分鐘。 ?
? ? ? ?max_check_attempts ? ? ? ? ? ? ?10 ? ? ? ? ? #nagios 對主機的最大檢查次數(shù), ? ? ? ?check_command ? ? ? ? ? ? check-host-alive ?#指定檢查主機狀態(tài)的命令,其中“check-host-alive”在 commands.cfg 文件中定義。
? ? ? ?notification_period ? ? ? ? ? ? workhours ? ? ?#主機故障時,發(fā)送通知的時間范圍,其中“workhours”在 timeperiods.cfg 中進行了定義,下面會陸續(xù)講到。 ?
? ? ? ?notification_interval ? ? ? ? ? 30 ? ? ? ? ? ? #在主機出現(xiàn)異常后,故障一直沒有解決,nagios 再次對使用者發(fā)出通知的時間。單位是分鐘
? ? ? ?notification_options ? ? ? ? ? ?d,u,r ? ? ? ? ?#定義主機在什么狀態(tài)下可以發(fā)送通知給使用者,d 即 down,表示宕機狀態(tài),u 即 unreachable,表示不可到達狀態(tài),r 即 recovery,表示重新恢復(fù)狀態(tài)。 ?
? ? ? ?contact_groups ? ? ? ? ? ? ? ? ?admins ? ? ? ? #指定聯(lián)系人組,這個“admins”在 contacts.cfg 文件中定義。 ?
define service{
? ? ? ?name ? ? ? ? ? ? ? ? ? ? ?local-service ? ?#定義一個服務(wù)名稱
? ? ? ?use ? ? ? ? ? ? ? ? ? ? ? generic-service ?#引用服務(wù) local-service 的屬性信息,local-service 主機在 templates.cfg 文件中進行了定義
? ? ? ?max_check_attempts ? ? ? ? ? ? 4 ? ? #最大檢測 4 次,為了確定服務(wù)最終狀態(tài) ? ? ? ? ? ? ?
? ? ? ?normal_check_interval ? ? ? ? ?5 ? ? #每 5 分鐘檢測一次
? ? ? ?retry_check_interval ? ? ? ? ? 1 ? ? #每 1 分鐘重新檢測服務(wù),最終的狀態(tài)能被確定 ? ? ?
? ? ? ?}
hosts.cfg文件
此文件默認(rèn)不存在,需要手動創(chuàng)建,主要用來指定被監(jiān)控的主機地址及相關(guān)屬性信息,比如以下定義的vm1的主機信息:
define host{
? ?use ? ? ? ? ?linux-server
? ?host_name ? ?vm1
? ?alias ? ? ? ?vm1
? ?address ? ? 192.168.56.101
? ?}
......
services.cfg文件
此文件默認(rèn)不存在,需要手動創(chuàng)建。主要用于定義監(jiān)控的服務(wù)和主機資源,例如監(jiān)控 HTTP 服務(wù)、FTP 服務(wù)、主機磁盤空間、主機系統(tǒng)負(fù)載等。比如定義監(jiān)控vm1的http和ftp等服務(wù)的配置如下:
define service{
? ?use ? ? ? ?generic-service
? ?host_name ? ?vm1
? ?service_description ? ?HTTP
? ?check_command ? ?check_http
? ?}
define service{
? ?use ? ? ? ?generic-service
? ?host_name ? ?vm1
? ?service_description ? ? FTP
? ? ? ?check_command ? ?check_ftp
? ?}
......
nagios.cfg文件
Nagios的主配置文件,包括Nagios日志文件、cfg文件、Nagios用戶,組、lock文件等等Nagios的所有全局設(shè)置均在此設(shè)置,其中本例需要添加以下設(shè)置來指定三個被監(jiān)控的主機的配置文件的位置:
# Definitions for monitoring the local (Linux) host
cfg_file=/usr/local/nagios/etc/objects/localhost.cfg
cfg_file=/usr/local/nagios/etc/objects/vm1.cfg
cfg_file=/usr/local/nagios/etc/objects/vm2.cfg
4. 實例配置
Nagios允許單獨定義某個主機的主機信息和服務(wù)配置信息到一個cfg文件中,比如vm1的配置文件如下:vm1.cfg
define host{
? ?use ? ? ? ? ?linux-server
? ?host_name ? ?vm1
? ?alias ? ? ? ?vm1
? ?address ? ? 192.168.56.101
? ?}
define service{
? ?use ? ? ? ?generic-service
? ?host_name ? ?vm1
? ?service_description ? ?HTTP
? ?check_command ? ?check_http
? ?}
define service{
? ?use ? ? ? ?generic-service
? ?host_name ? ?vm1
? ?service_description ? ? FTP
? ? ? ?check_command ? ?check_ftp
? ?}
define service{
? ?use ? ?generic-service
? ?host_name ? ?vm1
? ?service_description ? ?SSH
? ?check_command ? ?check_ssh
? ?}
define service{
? ?use ? ?generic-service
? ?host_name ? ?vm1
? ?service_description ? ?check-load
? ?check_command ? ?check_nrpe!check_load
? ?}
define service{
? ?use ? ?generic-service
? ?host_name ? ?vm1
? ?service_description ? ?zombie_procs
? ?check_command ? ?check_nrpe!check_zombie_procs
}
define service{
? ?use ? ?generic-service
? ?host_name ? ?vm1
? ?service_description ? ?check-users
? ?check_command ? ?check_nrpe!check_users
}
define service{
? ?use ? ?generic-service
? ?host_name ? ?vm1
? ?service_description ? ?total_procs
? ?check_command ? ?check_nrpe!check_total_procs
}
此處定義監(jiān)控ip地址為192.168.56.101的主機vm1的SSH、FTP等服務(wù)信息。
3.8 Nagios啟動運行
1. 驗證配置文件的正確性
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
Nagios 提供的這個驗證功能非常有用,如果你的配置文件有語法或配置錯誤,它會顯示出錯的配置文件及在文件中哪一行。檢測結(jié)果中的報警信息通常是可以忽略的,因為一般只是建議性的提示。
此處可以利用別名機制來簡化Nagios配置檢測機制:在當(dāng)前用戶的.bashrc文件下增加別名設(shè)置:
alias nagioscheck='/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg'
使生效:source ./.bashrc
2. 啟動Nagios服務(wù)
通過初始化腳本啟動Nagios:
/etc/init.d/nagios start|restart|stop 或者 service nagios start
手動方式啟動Nagios:
通過 Nagios 命令的-d 參數(shù)來啟動 nagios 過護進程。
/usr/local/nagios/bin/nagios -d /usr/local/nagios/etc/nagios.cf
4 Nagios性能分析圖標(biāo)
Nagios 對服務(wù)或主機監(jiān)控的是一個瞬時狀態(tài),有時候系統(tǒng)管理員需要了解主機在一段時間內(nèi)的性能及服務(wù)的響應(yīng)狀態(tài),并且形成圖表,這就需要通過查看日志數(shù)據(jù)來分析。但是這種方式不僅煩瑣,而且抽象。為了能更直觀的查看主機運行狀態(tài),這里采用 PNP 來實現(xiàn)此功能。PNP 是一個小巧的開源軟件包,它是基于 PHP 和 Perl 腳本編寫,PNP 可以利用 rrdtool 工具將 Nagios 采集的數(shù)據(jù)繪制成圖表,然后顯示主機或者服務(wù)在一段時間內(nèi)運行的狀況。以下詳細(xì)介紹 PNP 安裝配置流程:
1. 安裝RDDtool:yum install rrdtool
2. 編譯安裝PNP:
下載PNP http://pkgs.fedoraproject.org/repo/pkgs/pnp4nagios/pnp-0.4.14.tar.gz/9dbbf08191a258f6798c9516b3821ff0/
tar zxvf pnp-0.4.14.tar.gz
cd pnp-0.4.14
#通過./configure --help查看configure的選項設(shè)置
./configure --with-nagios-user=nagios --with-nagios-group=nagios --with-rrdtool=/usr/bin/rrdtool --with-perfdata-dir=/usr/local/nagios/share/perfdata
#最后一項指明存儲rrd數(shù)據(jù)文件的目錄
make all
make install
make install-config
make install-init
注解:configure可能出現(xiàn)以下錯誤:
checking for Perl Module Time::HiRes… no
configure: error: Perl Module Time::HiRes not available
解決辦法:安裝相應(yīng)的模塊:yum install perl-Time-HiRes
3. 配置PNP:
3.1 PNP 配置文件定義
在 PNP 安裝完成后, 默認(rèn)安裝目錄下回自帶相應(yīng)的模板配置文件, 因此只需要參考相應(yīng)的模板文件進行修改即可:
cd /usr/local/nagios/etc/pnp/
cp process_perfdata.cfg-sample process_perfdata.cfg
cp npcd.cfg-sample npcd.cfg
cp rra.cfg-sample rra.cfg
chown -R nagios:nagios /usr/local/nagios/etc/pn
3.2 修改 process_perfdata.cfg 文件
?打開 Nagios 下的 process_perfdata.cfg 文件,修改相關(guān)內(nèi)容。將數(shù)字 0 變更為 2 是開啟了日志的調(diào)試功能,操作如下:
LOG_FILE = /usr/local/nagios/var/perfdata.log
#
# Loglevel 0=silent 1=normal 2=debug
#
LOG_LEVEL = 2
3.3 修改 Nagios 相關(guān)配置文件
增加數(shù)據(jù)圖標(biāo)識:修改 templates.cfg,增加一個定義 PNP 的 host 和 service:
#pnp host set
define host{
? ?name ? ? ? ? ? ?hosts-pnp
? ?register ? ? ? ?0
? ?action_url ? ? ? ?/nagios/pnp/index.php?host=$HOSTNAME$&srv=_HOST_
? ?process_perf_data ? ?1
? ?}# pnp service set
define service{
? ?name ? ? ? ? ? ? ? ?services-pnp
? ?register ? ? ? ? ? ?0
? ?action_url ? ? ? ? ? ?/nagios/pnp/index.php?host=$HOSTNAME$&srv=$SERVICEDESC$
? ?process_perf_data ? ? ? ?1
? ?}修改 nagios.cfg
如果想讓 nagios 將數(shù)據(jù)輸出,首先要修改 nagios 的主配置文件 nagios.cfg,找到如下幾項,如有注釋的將其去掉。修改后的信息如下:#vim /usr/local/nagios/etc/nagios.cfgprocess_performance_data=1
host_perfdata_command=process-host-perfdataservice_perfdata_command=process-service-perfdata
修改 commands.cfg
process-host-perfdata 和 process-service-perfdata 指令聲明了 nagios 輸出哪些值到輸出文件中。 不過這些定義相對簡單,而 PNP 提供了一個 Perl 腳本,非常詳細(xì)地定義了一個輸出數(shù)據(jù)的方法,process_perfdata.pl 其實是 PNP 自帶的一個腳本,這個腳本在 PNP 安裝完成后會自動生成。因此,可以將 process-host-perfdata 和 process-service-perfdata 指令中對應(yīng)的執(zhí)行命令的內(nèi)容替換成此腳本。增加下圖的內(nèi)容:
define command{
? ?command_name ? ?process-host-perfdata
? ?command_line ? ?/usr/bin/perl /usr/local/nagios/libexec/process_perfdata.pl -d HOSTPERFDATA? ?}
define command{
? ?command_name ? ?process-service-perfdata
? ?command_line ? ?/usr/bin/perl /usr/local/nagios/libexec/process_perfdata.pl
? ?}修改 hosts.cfg 與 services.cfg(此處為vm1.cfg、vm2.cfg)
將 hosts-pnp 和 services-pnp 引用到 vm1.cfg 和 vm2.cfg 中,修改后的 vm1.cfg 內(nèi)容為
define host{
? ?use ? ? ? ? ?linux-server,hosts-pnp
? ?host_name ? ?vm1
? ?alias ? ? ? ?vm1
? ?address ? ? 192.168.56.101
? ?}
define service{
? ?use ? ? ? ?generic-service,services-pnp
? ?host_name ? ?vm1
? ?service_description ? ?HTTP
? ?check_command ? ?check_http
? ?}.......
3.4 查看性能圖標(biāo)功能
訪問Nagios的Web界面,點擊數(shù)據(jù)圖標(biāo)查看相應(yīng)的性能圖示。
5 利用NRPE擴展Nagios功能
監(jiān)控linux本地主機時,我們可以直接更改配置文件進行監(jiān)控,如果需要監(jiān)控的主機與nagios不在同一機器上,即監(jiān)控遠程linux主機時,我們需要借助NRPE插件實現(xiàn)。通過在遠程服務(wù)器上安裝 NRPE 構(gòu)件及 Nagios 插件程序來向 Nagios 監(jiān)控平臺提供該服務(wù)器的一些本地情況,如 CPU 負(fù)載、內(nèi)存使用、硬盤使用,服務(wù)等。這里將 Nagios 監(jiān)控平臺稱為 Nagios 服務(wù)器 端,而將遠程被監(jiān)控的服務(wù)器稱為 Nagios 客戶端。如下為NRPE原理圖,
5.1 NRPE的組成部分和監(jiān)測類型
NRPE 總共由兩部分組成:
check_nrpe 插件,位于監(jiān)控主機上
NRPE daemon,運行在遠程被監(jiān)控的 Linux 主機上
當(dāng)監(jiān)控遠程 Linux/UNIX 主機服務(wù)或資源時,工作流程如下:
nagios 會運行 check_nrpe 這個插件,并且會告訴它需要檢查什么;
check_nrpe 插件會連接到遠程的 NRPE daemon,所用的方式是 SSL;
NRPE daemon 會運行相應(yīng)的 Nagios 插件來執(zhí)行檢查動作;
NPRE daemon 將檢查的結(jié)果返回給 check_nrpe 插件,插件將其遞交給 Nagios 做處理。
NRPE daemon 需要 Nagios 插件安裝在遠程的 Linux 主機上,否則 daemon 不能做任何的監(jiān)控。
NRPE 的檢測類型分為兩種:
直接檢測:檢測的對象是運行 NRPE 的那臺 Linux 主機的本地資源,原理如下:
直接使用 NRPE 插件監(jiān)控遠程 Linux/UNIX 主機的本地或者私有資源;如 CPU 負(fù)載、內(nèi)存使用、SWAP 空間使用、硬盤等運行狀況。如下為直接檢測工作原理圖,
間接檢測:當(dāng)運行 Nagios 的監(jiān)控主機無法訪問到某臺被監(jiān)控主機,但是運行 NRPE 的機器可以訪問得到的時候,運行 NRPE 的主機就充當(dāng)一個中間代理,將監(jiān)控請求發(fā)送到被監(jiān)控對象上。如下為間接檢測圖,
5.2 服務(wù)器端安裝配置NRPE
1. 安裝NRPE
tar zxvf nrpe-2.15.tar.gz ; cd nrpe-2.15
./configure
make all
make install-plugin
make install-daemon
make install-daemon-config
2. 定義check_nrpe命令
在文件/usr/local/nagios/etc/objects/commands.cfg后面增加:
# check nrpe
define command{
? ?command_name ? ?check_nrpe
? ?command_line ? ?$USER1$/check_nrpe -H $HOSTADDRESS$ -t 30 -c $ARG1$
? ?}
3. 創(chuàng)建/usr/local/nagios/etc/objects/remotehost.cfg,比如vm1.cfg文件的定義:
host定義示例:
define host{
? ?use linux-server
? ?host_name vm1
? ?address 192.168.56.101
? ?}
Service定義示例:
define service{
? ?use generic-service
? ?service_description Root Partition
? ?check_command check_nrpe!check_disk
? ?}
查看配置文件是否正確:nagioscheck
重新加載配置文件:/etc/init.d/nagios reload
5.3 Linux客戶端安裝NRPE
1. 安裝Nagios插件nagios-plugin
添加 nagios 用戶名,且不允許 nagios 用戶登錄, 此用戶用于與 Nagios 服務(wù)器通信所用:
useradd -s /sbin/nolgin nagios
tar zxvf nagios-plugins-1.5.tar.gz ; cd nagios-plugin-1.5
./configure
make && make install
2. 安裝NRPE
tar zxvf nrpe-2.15.tar.gz
cd nrpe-2.15
./configure
make all
make install-plugin
make install-daemon
make install-daemon-config
yum install xinetd
make install-xinetd
3. 配置NRPE
定義被監(jiān)控的 Linux 主機的對象,監(jiān)控此主機的 CPU 負(fù)載、登錄用戶數(shù)、磁盤分區(qū)、進程、swap 使用情況等,編輯/usr/local/nagios/etc/nrpe.cfg 文件,示例如下,
command[check_users]=/usr/local/nagios/libexec/check_users -w 5 -c 10
command[check_load]=/usr/local/nagios/libexec/check_load -w 15,10,5 -c 30,25,20
command[check_hda1]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /dev/hda1
command[check_zombie_procs]=/usr/local/nagios/libexec/check_procs -w 5 -c 10 -s Z
command[check_total_procs]=/usr/local/nagios/libexec/check_procs -w 150 -c 200
4. 定義xinetd服務(wù)支持NRPE
修改 only_from 項,增加 Ngaios 服務(wù)器的地址,這樣一來服務(wù)器與客戶端就可進行 nrpe 會話,監(jiān)控到 Linux 客戶端相關(guān)信息,被監(jiān)控端也更加容易維護管理:
# default: on
# description: NRPE (Nagios Remote Plugin Executor)
service nrpe
{
? ? ? ? ? flags ? ? ? ? ? = REUSE
? ? ? ?socket_type ? ? = stream ? ?
? ?port ? ? ? ?= 5666 ? ?
? ? ? ? ? wait ? ? ? ? ? ?= no
? ? ? ?user ? ? ? ? ? ?= nagios
? ?group ? ? ? ?= nagios
? ? ? ? ? server ? ? ? ? ?= /usr/local/nagios/bin/nrpe
? ? ? ?server_args ? ? = -c /usr/local/nagios/etc/nrpe.cfg --inetd
? ? ? ? ? log_on_failure ?+= USERID
? ? ? ?disable ? ? ? ? = no
? ?only_from ? ? ? = 127.0.0.1 localhost 192.168.56.1
}
5. 定義服務(wù)端口
在 Linux 客戶端"/etc/services" 文件增加一行:
nrpe 5666/tcp #NRPE
6. 測試NRPE功能
由于 NRPE 相應(yīng)的插件已經(jīng)安裝成功, 這里使用 check_nrpe 命令來驗證是否 nrpe 是否正常運行,如果執(zhí)行以下命令能夠顯示 NRPE 的具體版本信息,則表示 nrpe 運行正常,加載重啟 xinetd 服務(wù)即可:
/usr/local/nagios/libexec/check_nrpe -H localhost
NRPE v2.15
/etc/init.d/xinetd restart
6 Nagios管理平臺簡介
通過上面所有的軟件及插件的安裝與配置,Nagios 監(jiān)控系統(tǒng)架構(gòu)成功的完成了;若想進一步擴展,如監(jiān)控 Windows 平臺,則需要在 Windowns 系統(tǒng)安裝 NSClient 軟件,并在 Nagios 服務(wù)器定義 windows.cfg 等文件,VMware 則需要 Nagios 官網(wǎng)下載相應(yīng)的插件及模塊文件,并在 Nagios 服務(wù)器編輯 command.cfg、hosts.cfg、services.cfg 文件,示例如下,
Window 平臺
| vim /usr/local/nagios/etc/monitor/windows.cfg |
| define host{ ? ? ? ?use ? ? ? ? ? ? windows-server,hosts-pnp ? ? ? ?host_name ? ? ? Windowns Server 2003_192 ? ? ? ? ? ? ?alias ? ? ? ? ? Remote win2003 192 ? ? ? ? ? ? ?address ? ? ? ? 192.168.1.192 ? ? ? ? ?} define service{ ? ? ? ?use ? ? ? ? ? ? ? ? ? ? generic-service,services-pnp ? ? ? ?host_name ? ? ? ? ? ? ? Windowns Server 2003_192 ? ? ? ?service_description ? ? NSClient++ Version ? ? ? ?check_command ? ? ? ? ? check_nt!CLIENTVERSION ? ? ? ?} ? ? ? ?} ……… |
VMware 平臺
| vim/usr/local/nagios/etc/monitor/commands.cfg |
| define command{ command_name check_esx3_host_net_usage command_line $USER1$/check_esx3 -H $HOSTADDRESS$ -u $ARG1$ -p $ARG2$ -l net -s usage -w $ARG3$ -c $ARG4$ } define command{ command_name check_esx3_host_runtime_issues command_line $USER1$/check_esx3 -H $HOSTADDRESS$ -u $ARG1$ -p $ARG2$ -l runtime -s issues …… |
7 Nagios郵件報警功能設(shè)置
Nagios的報警系統(tǒng)主要有以下三種方式:
一、聲音報警
二、電子郵件報警
三、手機短訊報警
以下為郵件報警系統(tǒng)的設(shè)置過程(以sendmail為郵件服務(wù)器)
1. 開啟系統(tǒng)自帶的sendmail服務(wù)
/etc/init.d/sendmail start
注解:若未安裝,可:yum install -y sendmail* ; /etc/init.d/sendmail start
測試服務(wù):echo "test" | mail youraddress
2. 配置Nagios報警郵箱
vim /usr/local/nagios/etc/objects/contacts.cfg:
define contact{
? ? ? ?contact_name ? ? ? ? ? ? ? ? ? ?nagiosadmin ? ? ? ? ? ? ; Short name of user
? ? ? ?use ? ? ? ? ? ? ? ? ? ? ? ? ? ? generic-contact ? ? ? ? ; Inherit default values from generic-contact template (defined above)
? ? ? ?alias ? ? ? ? ? ? ? ? ? ? ? ? ? Nagios Admin ? ? ? ? ? ?; Full name of user
? ? ? ?email ? ? ? ? ? ? ? ? ? ? ? ? ? rangochan1989@gmail.com ; <<***** CHANGE THIS TO YOUR EMAIL ADDRESS ******
? ? ? ?}
3. 設(shè)置報警方式
vim /usr/local/nagios/etc/objects/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 ; send service notifications via email
? ? ? ?host_notification_commands ? ? ?notify-host-by-email ? ?; send host notifications via email
? ? ? ?register ? ? ? ? ? ? ? ? ? ? ? ?0 ? ? ? ? ? ? ? ? ? ? ? ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL CONTACT, JUST A TEMPLATE!
? ? ? ?}
注解:此處的notify-service-by-email和notify-host-by-email是在command.cfg那里定義的,使用默認(rèn)定義即可。
重新加載配置文件使生效:/etc/init.d/nagios reload
至此完成郵件報警功能設(shè)置,可以通過停掉某些服務(wù)來測試功能是否正常。
8 總結(jié)
通過此篇文章描述了 Nagios 監(jiān)控管理平臺的工作原理,以及如何在 Linux 平臺部署開源軟件的管理平臺,掌握 Naigos 配置管理,通過外部插件的方式來對服務(wù)對象 Windows 、Linux、 Unix 、 VMware 等平臺進行有效的管理與監(jiān)控,適合運行部門及管理部門的 IT 人員使用,不僅提高了效率同時減少了管理人員未能及時發(fā)現(xiàn)問題所帶來的的困繞,也提高了生產(chǎn)的環(huán)境的可用性。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?——Rango Chen
轉(zhuǎn)載于:https://blog.51cto.com/rangochen/1388090
總結(jié)
以上是生活随笔為你收集整理的Nagios监控系统详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用键鼠玩主机游戏算不算挂?育碧痛击《彩虹
- 下一篇: 不少用户反映 Galaxy S23 Ul