再談nagios
前言:
好吧,準備重新再寫一次nagios的詳細說明文檔。因為這個東西安裝起來簡單,配置使用确實相對複雜很多。希望我能盡量寫的夠詳細,并将可能遇到的問題都列舉出來。
【nagios簡介】
首先我們先知道這個是個什麼東西。
nagios是一款開源的免費網絡監視工具,能有效監控windows、linux和unix的主機狀态,交換機路由器等網絡設定,列印機等。在系統或服務狀态異常時發出郵件或短信報警第一時間通知網站運維人員,在狀态恢複後發出正常的郵件或短信通知。(我承認我是從百度百科上拷貝的,不過這個解釋的已經很好了。)
nagios應用在linux作業系統中,那麼基礎的linux操作就不再多說。
nagios的強大主要在于其插件所提供的各種監控功能以及web形式的友好互動,nagios對于linux和windows伺服器都可以很好的進行監控,這裡主要說明對linux伺服器的監控。
【準備工作】
naigos必須運作在有c語言編輯器的linux平台上,并且需要一個web伺服器(通常來說apache即可)來提供友好的互動界面,否則你監控到的内容隻是一堆日志毫無樂趣可言。下面我将按照最小化安裝的裸機來進行安裝。
我使用的centos5.6版本,用ubuntu的注意版本及配置檔案習慣即可
監控主機a位址:192.168.0.10
被監控主機b位址:192.168.0.20
首先下載下傳3個檔案:
nagios-3.3.1.tar.gz nagios主程式
nagios-plugins-1.4.15.tar.gz nagios插件
nrpe-2.12.tar.gz 監控linux主機所需插件
#yum install –y httpd php gcc* gd* glibc* 安裝nagios所需的庫,這裡為了友善後面操作apache 和php都是yum安裝的,如果編譯安裝的朋友注意下路徑即可。
#groupadd nagios 建立一個nagios組
#useradd nagios –g nagios 建立一個nagios使用者并将其加入到nagios組中
【安裝nagios】
# tar zxvf nagios-3.3.1.tar.gz
# cd nagios
# ./configure --prefix=/usr/local/nagios --with-nagios-user=nagios 最好還是制定目錄
# make all
# make install
# make install-commandmode
# make install-config
# make install-init
# make install-webconf
這裡nagios的編譯不同于其他的軟體,需要好幾步才能完成,我們來解釋一下make這幾步的意思
make install 安裝主要的程式、cgi、html檔案等等。
make install-commandmode 賦予外部指令通路nagios配置檔案的權限
make install-config 将nagios的配置檔案的例子複制到nagios的安裝目錄下
make install-init 将nagios做成一個運作腳本,放入init.d中,使nagios可以随系統的開機而啟動
make install-webconf配置apache的web接口,如果運作出錯,是因為你的apache是自己編譯安裝的
不是yum安裝的,webconf生成的檔案會放在/etc/httpd/conf.d/下,因為找不到這個目錄,是以出錯
編譯安裝完成後:
# ls /usr/local/nagios
bin etc include libexec share
檢視是否有上面的檔案,如果有到此nagios就算是安裝完了。
那麼我們來看看這上面幾個目錄下的檔案都有什麼意義。
bin nagios執行程式所在目錄,這個目錄隻有一個檔案nagios
etc nagios配置檔案位置,初始安裝完成後,隻有幾個*.cfg-sample檔案
sbin nagios cgi檔案所在目錄,也就是執行外部指令所需檔案所在的目錄
share nagios網頁檔案所在的目錄
var nagios日志檔案、spid等檔案所在的目錄
nagios的主程式安裝完畢後,為了以防萬一我們來檢查一下/usr/local/nagios的目錄權限
如果不是nagios的屬主那麼要将屬主進行修改,否則nagios沒有權限來運作。
我們在進行下一步插件的安裝
【安裝nagios插件】
插件對于nagios來說是非常重要的,插件的版本對于nagios主程式之間的關聯并不大
各個版本基本都可以使用。
# tar zxvf nagios-plugins-1.4.15.tar.gz
# cd nagios-plugins
# ./configure --prefix=/usr/local/nagios nagios-plugins是安裝到nagios的主目錄下的
# make
安裝完成後/usr/local/nagios生成目錄libexec,這就是nagios所需要的插件
檢查工作:
再次檢查nagios主目錄的屬主,一定要是nagios,不能是root
如果屬主不正确
#chown -r nagios.nagios /usr/local/nagios
nagios的使用者不需要登入shell 是以如果為了安全
vi /etc/passwd
nagios:x:500:500::/home/nagios:/bin/bash
修改為:
nagios:x:500:500::/home/nagios:/bin/nologin
那麼nagios使用者則不能夠登入shell
【配置apache】
yum 裝的apache本身不需要太多的配置,在nagios的編譯過程中的make install-webconf就是在/etc/httpd/conf.d/下生成nagios.conf的配置檔案。會自動幫你配置apache的nagios部分。
#vi /etc/httpd/conf/httpd.conf
修改apache的運作使用者為nagios
user nagios
group nagios
在末尾加上apache的nagios部分
scriptalias /nagios/cgi-bin "/usr/local/nagios/sbin"
<directory "/usr/local/nagios/sbin">
# sslrequiressl
options execcgi
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>
alias /nagios "/usr/local/nagios/share"
<directory "/usr/local/nagios/share">
options none
上面文本的作用是對nagios的目錄進行使用者驗證,隻有合法的授權使用者才可以通路nagios的頁面檔案
生成使用者驗證檔案
# htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
指令互動執行需要輸入2次密碼,然後會再/usr/local/nagios/etc/htpasswd.users中寫入一行字段是
剛才生成的使用者名和密碼
如需添加更多使用者執行指令中去掉-c即可,否則會覆寫所有已經生成的行
配置完成後執行/usr/sbin/httpd -t 來驗證apache 的配置檔案壓法
這裡的httpd路徑根據自己具體的路徑來執行
#service httpd restart
在浏覽器中輸入nagios的通路位址: http://local/nagios
在登入框中輸入你剛才設定的nagios使用者和密碼
到此我們的nagios伺服器就已經搭建好了,但是現在還沒有檢測任何的主機也沒有任何的資訊,我們現在要做的就是來看一看nagios伺服器到底需要怎麼用。
【配置nagios】
好了 這裡是我們的最重的重點了,我們來詳細的分析一下nagios的配置檔案。
首先來看一下nagios的etc目錄下的配置檔案有哪些
-rw-rw-r-- 1 nagios nagios 11408 12-07 12:57 cgi.cfg
-rw-r--r-- 1 nagios nagios 26 11-01 17:36 htpasswd.users
-rw-rw-r-- 1 nagios nagios 43775 12-07 12:19 nagios.cfg
drwxrwxr-x 2 nagios nagios 4096 12-07 14:44 objects
-rw-rw---- 1 nagios nagios 1340 11-01 17:35 resource.cfg
ps: 如果是nagios2.6版本以前,etc下的檔案名都是cgi.cfg-sample類型, 改名為cgi.cfg即可,2.6以後版本都不需要修改配置檔案名
由于我的nagios是最新的版本這裡會有一個objects的目錄,那麼來看一下目錄下有哪些檔案
commands.cfg 定義了各項功能指令及說明
localhost.cfg 監控的主機配置檔案
printer.cfg 監控列印配置檔案
templates.cfg 這裡會給你提供一些配置檔案的模闆供參考
windows.cfg 監控windows主機的配置檔案
contacts.cfg 定義聯系人的檔案
switch.cfg 這個基本不用,是一個假定您使用的示例配置檔案得到安裝nagios的快速入門指南。
timeperiods.cfg 監視時段配置檔案
這裡的object不同于老版本将一些對具體監控的配置放置在了統一的object目錄下,以友善管理。
# /usr/local/nagios/bin/nagios -v /usr/local/nagos/etc/nagios.cfg 來驗證程式能否正常運作
# vi /usr/local/nagios/etc/localhost.cfg
把下面的幾行注釋去掉
cfg_file=/usr/local/nagios/etc/objects/contactgroups.cfg //聯系組配置檔案路徑
cfg_file=/usr/local/nagios/etc/objects/contacts.cfg //聯系人配置檔案路徑
cfg_file=/usr/local/nagios/etc/objects/hostgroups.cfg //主機組配置檔案路徑
cfg_file=/usr/local/nagios/etc/objects/hosts.cfg //主機配置檔案路徑
cfg_file=/usr/local/nagios/etc/objects/services.cfg //服務配置檔案路徑
cfg_file=/usr/local/nagios/etc/objects/timeperiods.cfg //監視時段配置檔案路徑
将check_external_command=0修改為1 作用是允許執行web界面下重新開機nagios,停止主機/服務檢查鞥操作
cgi.cfg檔案 控制相關的cgi腳本
#vi /usr/local/nagios/etc/cgi.cfg
確定use_authentication=1
其中的各項authorized_for_都是定義登入的使用者權限
全部設定為nagiosadmin即可,也可設定你自己htpasswd生成設定的使用者名
【安裝nrpe】
# tar zxvf nrpe-2.12.tar.gz
# cd nrpe
# .configure
# make install-plugin
commands.cfg定義外部建構nrpe
# vi /usr/local/nagios/etc/objects/commands.cfg
#check nrpe
define command{
command_name check_nrpe
command_line $user1$/check_nrpe -h $hostaddress$ -c $arg1$
}
設定要監控的linux主機
vi /usr/local/nagios/etc/nagios.cfg
cfg_file=/usr/local/nagios/etc/objects/localhost.cfg
設定localhost.cfg内容
vi /usr/loca/nagios/etc/objects/locaohost.cfg
address 修改為被監控的ip
其他設定:
chkconfig --add nagios 配置開機啟動
chkconfig nagios on
/usr/loacal/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg 檢查nagios配置檔案
vi /etc/selinux/config 關閉selinux
selinux=disabled
service iotables stop
serivce nagios start
【配置被監控端】
一、安裝nagios-plugin
# useradd nagios
# ./configure --with-nagios-user=nagios --with-nagios-group=nagios --enable-redhat-pthread-workaround
chown -r nagios.nagios /usr/local/nagios
二、安裝被監控端nrpe
# make install-daemon
# make install-daemon-config
配置nrpe
vi /usr/local/nagios/etc/nrpe.cfg
allowed_hosts=192.168.0.1,127.0.0.1
啟動nrpe
/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d
也可講其寫入到/etc/rc.d/rc.local中開機運作
驗證nrpe
# netstat -anpl |grep 5666
tcp 0 0 0.0.0.0:5666 0.0.0.0:* listen 11750/nrpe
# /usr/local/nagios/libexec/check_nrpe -h 127.0.0.1
nrpe v2.12
然後服務端測試
/usr/local/nagios/libexec/check_nrpe -h 被監控機ip
配置監控對象(重要)
# vi /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
command[check_swap]=/usr/local/nagios/libexec/check_swap -w 20% -c 10%
這一步是關鍵,如果nagios伺服器想要監控客戶機swap分區,但客戶機nrpe.cfg檔案
沒有swap監控對像,這時監控伺服器就是報錯(nrpe command ‘check_swap’no defined).
平時自己寫腳本,也是主要配這個地方
至此就可以監控linux客戶機的disk,swap,users,memory了
那麼到了這裡還不夠,如果我們需要郵件報警或者短信報警的功能那麼就要進行更加負責的操作
【郵件報警】
我們首先看一下郵件報警的功能事怎麼定義的:
vi /usr/local/nagios/etc/objects/commands.cfg
#'notify-host-by-email' command definition
command_name notify-host-by-email
command_line /usr/bin/printf "%b" "***** nagios *****\n\nnotific
ation type: $notificationtype$\nhost: $hostname$\nstate: $hoststate$\naddre
ss: $hostaddress$\ninfo: $hostoutput$\n\ndate/time: $longdatetime$\n" | /bi
n/mail -s "** $notificationtype$ host alert: $hostname$ is $hoststate$ **"
$contactemail$
# 'notify-service-by-email' command definition
command_name notify-service-by-email
ation type: $notificationtype$\n\nservice: $servicedesc$\nhost: $hostalias$
\naddress: $hostaddress$\nstate: $servicestate$\n\ndate/time: $longdatetime
$\n\nadditional info:\n\n$serviceoutput$\n" | /bin/mail -s "** $notificatio
ntype$ service alert: $hostalias$/$servicedesc$ is $servicestate$ **" $cont
actemail$
這裡定義了host和server兩個子產品的email發送方式,
可以看到nagios預設的是使用linux系統自帶的/bin/mail 來發送郵件的,
這裡nagios已經幫我們配置好了,不出意外的話不需要進行太多修改。但是如果你需要用sendmail的話,可以自己修改指令。
下面來看看聯系人的配置檔案
vim /usr/local/nagios/etc/objects/contacts.cfg
定義一個發送郵件的位址和選項
define contact{
contact_name nagiosadmin //定義聯系人的名字
use generic-contact //這個名字是預設的,沒有進行修改 做修改
alias nagios admin //别名
service_notification_period 24x7 //服務出現狀況通知的時間段,這個時間段是objects中的timeperiod.cfg中定義的
host_notification_period 24x7 //主機出現狀況通知的時間段,這個時間段同樣是timeperiod.cfg中定義的
service_notification_options w,u,c,r //當伺服器出現w(warning),u(unkown),c(critical),或者r(恢複)這幾種情況下通知聯系人
host_notification_options d,u,r //與service差不多,d的意思是down
service_notification_commands notify-service-by-email // 定義服務出現問題,使用指令notify-service-by-email通知
host_notification_commands notify-host-by-email //主機出現問題使用notify-host-by-email 通知
email [email protected] //通知人的郵件位址
}
這裡順便也講contact組也定義了 如下:
define contactgroup{
contactgroup_name admins
alias nagios administrators
members nagiosadmin
下面來看監控主機的配置檔案,我這裡的配置檔案為localhost.cfg
你可以選擇起任何的名字,隻需要在nagios.cfg中重新定義即可。
vi /usr/local/nagios/etc/objects/localhost.cfg
定義主機如下:
define host{
host_name linux-20 //為被監控的主機起個名字
alias linux20 //起個别名
address 192.168.0.20 //ip位址
contact_groups admins //聯系人的組,在contacts.cfg中定義
check_command check-host-alive //檢查主機狀态的指令,commands.cfg中定義
check_period 24x7 //檢查的時間段24*7,來自timeperiod.cfg中定義的
max_check_attempts 3 //檢查失敗後的重試次數
notification_interval 10 //提醒的間隔,機關是分鐘
notification_period 24x7 //提醒周期,來自timeperiod.cfg中定義
notification_options d,u,r //報警的選項
主機檢查指令行一般選擇檢查主機存活check-host-alive
最大嘗試次數最好不要設定為“1”,一般來說3-4次比較合理,否則你的郵箱估計會爆掉
順便将host組也定義下
define hostgroup{
hostgroup_name linux-servers
alias linux servers
members linux-20 //可以在此添加linux主機,以逗号分離
下面來編輯service 的配置還是在localhost.cfg下,以ping和apache服務為例子
define service {
host_name linux-20 #被監控的主機,hosts.cfg中定義的
service_description ping #定義的是監控這個主機是不是存活,描述是ping
check_period 24x7 #監控的時間段,是timeperiods.cfg中定義的
notification_interval 10 #重複發送提醒資訊的最短間隔時間。預設間隔時間是
"60"分鐘。如果這個值設定為 "0" ,将不會發送重複提醒
normal_check_interval 3 #檢查間隔3分鐘
max_check_attempts 3 #最大重試次數,重新檢查3次 3次都失敗就報警
retry_check_interval 2 #重試檢查間隔時間2分鐘
check_command check_ping!100.0,20%!500.0,60% #使用ping來做健康檢查
contact_groups admins #聯系人組,是contactgroups.cfg中定義的
}
host_name linux-20
max_check_attempts 5
check_period 24x7
notification_interval 10
normal_check_interval 1
retry_check_interval 1
service_description http
check_command check_http
notification_period 24x7
notification_options w,u,c,r
contact_groups admins
}
主機名 host_name,必須是主機配置檔案hosts.cfg中定義的主機。
檢查用的指令check_command,在指令配置檔案中定義或在nrpe配置檔案中有定義。
最大重試次數max_check_attempts 一般設定為3-4次比較好,這樣不會因為網絡閃斷片刻而發生誤報。
檢查間隔和重試檢查間隔的機關是分鐘。
通知間隔指探測到故障以後,每隔多少時間發送一次報警資訊。 它的機關是分鐘。
通知選項跟服務定義配置檔案相同。
聯系組contact_groups由配置檔案contactgroup.cfg定義。
最後我們檢查下配置檔案是否正确
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
service nagios restart
通過破壞測試,看看你能不能收到郵件吧。
ps:關于收不到郵件有很多可能
1.本地mail指令沒有權限給nagios用或者mail本身就無法使用
2.本地防火牆阻止
3.commands.cfg中的mail功能定義錯誤
4.你定義的收件郵箱阻止了nagios的郵件
想檢視你的郵件到底有沒有發送出去,還是要看/var/log/maillog的日志吧
一般來說配置的過程中會出現很多問題 多用
驗證,多檢視各個日志是能找到關鍵性的錯誤點的,祝大家好運。