運(yùn)維監(jiān)控Nagios連載3:部署、配置Nagios服務(wù)
俗話說:工欲善其事,必先利其器.要做好系統(tǒng)管理,使自己的工作更輕松更有效的話,一個好的監(jiān)控工具是必不可少的了.在這里我向大家推薦一款我使用了4年多的、功能強(qiáng)大、可靈活定制的開源監(jiān)控利器---nagios。
運(yùn)維監(jiān)控Nagios連載1:Nagios服務(wù)器的自我監(jiān)控實現(xiàn)
http://net.it168.com/a2009/0309/267/000000267878.shtml
運(yùn)維監(jiān)控Nagios連載2:部署apache服務(wù)器
http://net.it168.com/a2009/0310/268/000000268103.shtml
運(yùn)維監(jiān)控Nagios連載3:部署、配置Nagios服務(wù)
運(yùn)維監(jiān)控Nagios連載4:Nagios監(jiān)控mysql服務(wù)器
運(yùn)維監(jiān)控Nagios連載5:關(guān)鍵應(yīng)用監(jiān)控的重要策略
(一) 添加帳戶,以用來運(yùn)行Nagios。
當(dāng)然也可以用root運(yùn)行,但出于安全考慮而使用普通帳號來運(yùn)行,并且不給這個賬號分配shell登錄權(quán)限.
1、 linux增加帳號的操作為 useradd nagios -s /sbin/nologin 添加帳號就自動生成同名組 nagios。
2、 freebsd增加帳號的操作為 pw groupadd nagios ; pw useradd nagios -g nagios -s /sbin/nologin.
注意:不要給nagios用戶設(shè)置密碼。
(二) 安裝nagios軟件
tar zxvf nagios-2.9.tar.gz
cd nagios-2.9
./configure -prefix=/usr/local/nagios ----with-nagios-user=nagios --with-nagios-group=nagios
make all
make install 執(zhí)行完這個步驟后,程序會提示依次運(yùn)行 make install-init , make install-commandmode ,make install-config 這幾個命令。我們選取其中的兩個來執(zhí)行:
make install-commandmode
make install-config
跟一般的gnu源碼軟件安裝相比,nagios的安裝多了幾個步驟(一般的軟件運(yùn)行到make install就算安裝完了)。當(dāng)然也可以連這兩步都不執(zhí)行,用手工賦予目錄或文件權(quán)限,再手動創(chuàng)建配置文件,其效果完全相同。安裝完nagios后,我們可以在安裝目錄/usr/local/nagios下生成下面的目錄:
bin Nagios執(zhí)行程序所在目錄,這個目錄只有一個文件nagios
etc Nagios配置文件位置,初始安裝完后,只有幾個*.cfg-sample文件
sbin Nagios Cgi文件所在目錄,也就是執(zhí)行外部命令所需文件所在的目錄
share Nagios網(wǎng)頁文件所在的目錄
var Nagios日志文件、spid 等文件所在的目錄
(三) 安裝nagios插件
沒有插件,nagios將什么作用也沒有,插件也是nagios擴(kuò)展功能的強(qiáng)大武器,除了下載常用的插件外,我們還可以根據(jù)實際要求編寫自己的插件。Nagios的插件nagios-plugins-1.4.9在www.nagios.org上可以找到,接著我們用wget下載它。注意:插件與nagios之間的版本關(guān)聯(lián)不大,不一定非得用nagios-plugins-1.4.9這個版本。下載完成后,安裝它是很簡單的:先執(zhí)行配置 ./configure -prefix=/usr/local/nagios ,接著編譯安裝 make ; make install即可。這里需要說明一下的是在配置過程指定的安裝路徑是/usr/local/nagios,而不是/usr/local/nagios-plus,安裝完成后,將在目錄/usr/local/nagios生成目錄libexec(里面有很多文件),這正是nagios所需要的。
#p#
(四) 配置nagios
配置是nagios最復(fù)雜的部分,讓我們耐心一些,逐個處理,配置成功也不是什么難事。剛安裝完成的nagios,其配置文件的目錄是/usr/local/nagios/etc,下圖是其etc目錄的文件:
先把這些文件改名,如 cgi.cfg-sample改成cgi.cfg ,用命令cp cgi.cfg-sample cgi.cfg …依樣把余下的幾個*.cfg-sample都復(fù)制成*.cfg文件。從nagios2.6版開始,不用修改配置文件localhost.cfg就可以直接運(yùn)行../bin/nagios -v nagios.cfg驗證程序是否能正常運(yùn)行(nagios2.5及以前版本的最小運(yùn)行的配置文件是minimal.cfg,但需要修改這個文件多處才能驗證成功)。當(dāng)然,我們不能指望這個最小的配置文件能夠滿足實際的需求,因此,需要對現(xiàn)有的配置文件進(jìn)行修改,其次增加自定義的一些配置文件。通過復(fù)制這些自帶的模板文件,我們可以得出幾個主要的配置文件,我們可以把它歸類為:
類型名 |
包含文件 |
作用 |
備注 |
主配置文件 |
nagios.cfg |
定義和控制nagios行為 |
需要修改 |
Cgi配置文件 |
cgi.cfg |
瀏覽器執(zhí)行諸如重啟nagios服務(wù)等 |
修要修改 |
宏定義文件 |
Resource.cfg |
定義插件路徑 |
不需修改 |
命令定義文件 |
Commands.cfg |
定義怎么發(fā)送短信、郵件等 |
需要修改 |
其他文件 |
contactgroups.cfg,
contacts.cfg,hostgroups.cfg,hosts.cfg,services.cfg |
監(jiān)控對象配置文件,如主機(jī)配置文件、聯(lián)系人配置文件等 |
主配置文件包含,手動創(chuàng)建 |
依照這個表格,我們逐一配置之。
1、修改主配置文件nagios.cfg.基于方便維護(hù)的原則,把各個配置目標(biāo)單獨(dú)放在文件中,如聯(lián)系人信息在contacts.cfg中定義。Nagios.cfg文件比較長,我只把修改過的內(nèi)容貼出來:
#注釋或刪掉這行
#cfg_file=/usr/local/nagios/etc/localhost.cfg
#主機(jī)配置文件路徑
cfg_file=/usr/local/nagios/etc/hosts.cfg
#//主機(jī)組配置文件路徑
cfg_file=/usr/local/nagios/etc/hostgroups.cfg
#聯(lián)系人配置文件路徑
cfg_file=/usr/local/nagios/etc/contacts.cfg
#聯(lián)系組配置文件路徑
cfg_file=/usr/local/nagios/etc/contactgroups.cfg
#服務(wù)配置文件路徑
cfg_file=/usr/local/nagios/etc/services.cfg
#監(jiān)視時段配置文件路徑
cfg_file=/usr/local/nagios/etc/timeperiods.cfg
#在web界面下重啟nagios、停止主機(jī)/服務(wù)檢查等操作,.默認(rèn)值是0.
check_external_commands=1
#根據(jù)自己的情況定這個命令檢查時間間隔.默認(rèn)值是1秒.
command_check_interval=10s
2、修改cgi配置文件cgi.cfg.跟修改nagios.cfg一樣,只貼出被修改之處:
#如有多個用戶,中間用逗號隔開
authorized_for_system_information=sery
authorized_for_configuration_information=sery
authorized_for_system_commands=sery
authorized_for_all_services=sery
authorized_for_all_hosts=nagiosadmin,sery
authorized_for_all_service_commands=sery
authorized_for_all_host_commands=sery
在這里指定的用戶"sery"可以通過瀏覽器操縱nagios服務(wù)的關(guān)閉、重啟等各種操作。
3、修改commands.cfg配置文件
這個文件已經(jīng)包含了發(fā)送郵件報警的部分,因此只需要再把短信報警的部分加上就可以了
###### host-notify-by-sms command definition
define command{
command_name host-notify-by-sms
command_line /usr/local/bin/sms.pl $CONTACTPAGER$ "$NOTIFICATIONTYPE$ alert - Host $HOSTNAME$ is $HOSTSTATE$"
}
###### service-notify-by-sms command definition
define command{
command_name service-notify-by-sms
command_line /usr/local/bin/sms.pl $CONTACTPAGER$ "$NOTIFICATIONTYPE$: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$"
}
第一個塊定義主機(jī)報警的內(nèi)容,即主機(jī)發(fā)生死機(jī)、恢復(fù)等情況發(fā)送手機(jī)短信報警,其接受者和發(fā)送內(nèi)容由"$..$"定義的宏來決定。第二個塊定義服務(wù)報警內(nèi)容,即監(jiān)控的服務(wù)或監(jiān)控的主機(jī)資源發(fā)生故障時發(fā)送手機(jī)報警短信。Nagios規(guī)定,如果探測到被監(jiān)控的主機(jī)停機(jī)或不可達(dá),它就不再探測這個停機(jī)主機(jī)上的服務(wù)。通俗地一點理解:主機(jī)都停了,當(dāng)然服務(wù)也跟著停了!另外一個需要注意的地方是命令行(command_line)路徑一定要用全路徑,這里調(diào)用的命令就是我們在全面編寫的那個腳本sms.pl。
3、 新增其他配置文件
在主配置文件nagios.cfg中,我們注釋了行 cfg_file=/usr/local/nagios/etc/localhost.cfg ,而使用若干單獨(dú)的配置文件來定義各種對象,這樣可以獲得維護(hù)方便、書寫規(guī)范等諸多方面的好處。這些單獨(dú)的配置文件不是自然存在的,我們需要手工創(chuàng)建并添加內(nèi)容。當(dāng)然,一開始我們并不是很清楚怎么往這些文件里添加內(nèi)容,只好回過頭去看官方文檔,天啦,太分散了,盡然不知道怎么著手了!怎么辦?打開文件localhost.cfg-sample,心里基本上就有數(shù)了:無非是把這個文件拆分開來,形成多個文件嘛!下面我按新添一個主機(jī)進(jìn)入監(jiān)控的較優(yōu)方式添加這些配置文件(當(dāng)然也可以有其它的順序,這并不影響監(jiān)控的效果)。好了,我們先把nagios服務(wù)器本身給監(jiān)控上,這些監(jiān)控包括:主機(jī)存活、web服務(wù)監(jiān)控、磁盤空間監(jiān)控、負(fù)載監(jiān)控、進(jìn)程數(shù)監(jiān)控、ip連接數(shù)監(jiān)控。
(1)、定義主機(jī)配置文件hosts.cfg
define host {
host_name nagios-server
alias nagios server
address 59.26.240.63
contact_groups sagroup
check_command check-host-alive
max_check_attempts 5
notification_interval 10
notification_period 24x7
notification_options d,u,r
}
說明:
● 聯(lián)系組contact_group沒有建立,需在后面的步驟完成。
● 主機(jī)檢查命令行一般選擇檢查主機(jī)存活check-host-alive。
● 最大嘗試次數(shù)最好不要設(shè)置為"1",一般3-4次比較合理。
● 通知時間間隔notification_interval 根據(jù)自己實際情況設(shè)定,它的單位是分鐘。
● 通知選項notification_options 幾個值的意思是 d-down,u-unreacheable,r-recovery.
(2)、定義主機(jī)組配置文件hostgroups.cfg
define hostgroup {
hostgroup_name sa-servers
alias sa servers
members nagios-server
}
說明:
● 這個配置文件不是必須的,為了在瀏覽器里方便歸類及察看狀態(tài),可以添加這個文件。
● 主機(jī)組的成員必須是在hosts.cfg里已經(jīng)定義了的,多個主機(jī)成員間用逗號分隔。
(3)、定義聯(lián)系人配置文件contacts.cfg
define contact {
contact_name sery
alias system administrator
service_notification_period 24x7
host_notification_period 24x7
service_notification_options w,u,c,r
host_notification_options d,u,r
service_notification_commands service-notify-by-email,service-notify-by-sms
host_notification_commands host-notify-by-email,host-notify-by-sms
email sery@163.com
pager 13301000018
}
說明:
● 服務(wù)通知選項 w-warning,u-unknown,c-critical,r-recovery.
● 主機(jī)通知選項 d-down,u-unreacheable,r-recovery。
● 服務(wù)通知命令行及服務(wù)通知命令行在配置文件commands.cfg中得到定義,如果有報警發(fā)生,則郵件和手機(jī)短信一起發(fā)送給相關(guān)人,即下兩行定義的email,pager.
● 收報警信息的郵件和手機(jī),一個人如有2個手機(jī),手機(jī)號之間有逗號分隔,郵件也如此。
● 如果這里定義的用戶需要通過瀏覽器察看他所負(fù)責(zé)的服務(wù)器監(jiān)控狀態(tài)的話,還需要 用apache的工具h(yuǎn)tpasswd增加同名帳號。
(4)、定義聯(lián)系組配置文件contactgroups.cfg
define contactgroup {
contactgroup_name sagroup
alias system administrator group
members sery
}
說明:
● 當(dāng)有多個人行使同樣的職責(zé)時,定義成組是非常有用的。
● 多個成員之間用逗號分隔。
● 成員必須在聯(lián)系人配置文件(contacts.cfg)已經(jīng)定義。
(5)、定義服務(wù)配置文件 services.cfg
define service {
host_name nagios-server
service_description check-host-alive
check_period 24x7
max_check_attempts 4
normal_check_interval 3
retry_check_interval 2
contact_groups sagroup
notification_interval 10
notification_period 24x7
notification_options w,u,c,r
check_command check-host-alive
}
define service {
host_name nagios-server
service_description check_tcp 80
check_period 24x7
max_check_attempts 4
normal_check_interval 3
retry_check_interval 2
contact_groups sagroup
notification_interval 10
notification_period 24x7
notification_options w,u,c,r
check_command check_tcp!80
}
define service{
host_name nagios-server
service_description check-disk
check_command check_nrpe!check_df
max_check_attempts 4
normal_check_interval 3
retry_check_interval 2
check_period 24x7
notification_interval 10
notification_period 24x7
notification_options w,u,c,r
contact_groups sagroup
}
define service{
host_name nagios-server
service_description check-load
check_command check_nrpe!check_load
max_check_attempts 4
normal_check_interval 3
retry_check_interval 2
check_period 24x7
notification_interval 10
notification_period 24x7
notification_options w,u,c,r
contact_groups sagroup
}
define service{
host_name nagios-server
service_description total_procs
check_command check_nrpe!check_total_procs
max_check_attempts 4
normal_check_interval 3
retry_check_interval 2
check_period 24x7
notification_interval 10
notification_period 24x7
notification_options w,u,c,r
contact_groups sagroup
}
說明:
● 主機(jī)名 host_name,必須是主機(jī)配置文件hosts.cfg中定義的主機(jī)。
● 檢查用的命令 check_command,在命令配置文件中定義或在nrpe配置文件中有定義。
● 最大重試次數(shù) max_check_attempts 一般設(shè)置為3-4次比較好,這樣不會因為網(wǎng)絡(luò)閃斷片刻而發(fā)生誤報。
● 檢查間隔和重試檢查間隔的單位是分鐘。
● 通知間隔指探測到故障以后,每隔多少時間發(fā)送一次報警信息。 它的單位是分鐘。
● 通知選項跟服務(wù)定義配置文件相同。
● 聯(lián)系組contact_groups由配置文件contactgroup.cfg定義。
● 檢查主機(jī)資源需要安裝和配置nrpe,這個過程在后面完成。
#p#
五、部署nrpe
(一)安裝nrpe
tar zxvf nrpe-2.8.1.tar.gz
cd nrpe-2.8.1
./configure -prefix=/usr/local/nrpe
make
make install
注:如果在其他被監(jiān)控機(jī)安裝nrpe,需要添加系統(tǒng)用戶nagios.
(二)復(fù)制文件
安裝完nrpe后,在安裝目錄/usr/local/nrpe/libexec只有一個文件check_nrpe,而在nagios插件目錄,卻缺少這個文件,因此需要把這個文件復(fù)制到nagios插件目錄;同樣,因為nrpe需要調(diào)用的諸如check_disk等插件在自己的目錄沒有,可是這些文件確是nagios插件所存在的,所以也需要從nagios目錄復(fù)制一份過來。我們把復(fù)制過程列舉出來:
cp /usr/local/nrpe/libexec/check_nrpe /usr/local/nagios/libexec
cp /usr/local/nagios/libexec/check_disk /usr/local/nrpe/libexec
cp /usr/local/nagios/libexec/check_load /usr/local/nrpe/libexec
cp /usr/local/nagios/libexec/check_ping /usr/local/nrpe/libexec
cp /usr/local/nagios/libexec/check_procs /usr/local/nrpe/libexec
(三)配置nrpe
安裝完nrpe以后,在安裝目錄并沒有可用的配置文件,但我們只需把解壓目錄的樣例文件復(fù)制到安裝目錄,然后修改這個文件.
1、 mkdir /usr/local/nrpe/etc
2、 cp sample-config/nrpe.cfg /usr/local/nrpe/etc
3、 修改配置文件/usr/local/nrpe/etc/nrpe.cfg.該過的地方用粗體顯示:
pid_file=/var/run/nrpe.pid
server_port=5666
#以單獨(dú)的守護(hù)進(jìn)程運(yùn)行
server_address=59.26.240.63
nrpe_user=nagios
nrpe_group=nagios
allowed_hosts=127.0.0.1,59.26.240.63
dont_blame_nrpe=0
debug=0
command_timeout=60
connection_timeout=300
# The following examples use hardcoded command arguments...
command[check_users]=/usr/local/nrpe/libexec/check_users -w 5 -c 10
command[check_load]=/usr/local/nrpe/libexec/check_load -w 15,10,5 -c 30,25,20
#command[check_hda1]=/usr/local/nrpe/libexec/check_disk -w 20 -c 10 -p /dev/hda1
command[check_df]=/usr/local/nrpe/libexec/check_disk -w 20 -c 10
command[check_zombie_procs]=/usr/local/nrpe/libexec/check_procs -w 5 -c 10 -s Z
command[check_total_procs]=/usr/local/nrpe/libexec/check_procs -w 150 -c 200
command[check_ips]=/usr/local/nrpe/libexec/ip_conn.sh 8000 10000
說明:
● allowed_hosts=127.0.0.1,59.26.240.63 必須允許nagios監(jiān)控服務(wù)器可以訪問。
● command[check_df]=/usr/local/nrpe/libexec/check_disk -w 20 -c 10 檢查整個服務(wù)器的磁盤利用率;如果是freebsd系統(tǒng),因為其/dev分區(qū)為100%,需要排除這個分區(qū),因此其命令行應(yīng)該為 "command[check_df]=/usr/local/nrpe/libexec/check_disk -x /dev -w 20 -c 10"。
● command[check_ips]=/usr/local/nrpe/libexec/ip_conn.sh 8000 10000 ip連接數(shù),ip_conn.sh腳本需要自己寫,下面給出腳本的內(nèi)容:
#!/bin/sh
#if [ $# -ne 2 ]
#then
# echo "Usage:$0 -w num1 -c num2"
#exit 3
#fi
ip_conns=`netstat -an | grep tcp | grep EST | wc -l`
if [ $ip_conns -lt $1 ]
then
echo "OK -connect counts is $ip_conns"
exit 0
fi
if [ $ip_conns -gt $1 -a $ip_conns -lt $2 ]
then
echo "Warning -connect counts is $ip_conns"
exit 1
fi
if [ $ip_conns -gt $2 ]
then
echo "Critical -connect counts is $ip_conns"
exit 2
fi
我在nrpe配置文件nrpe.cfg把腳本所需的兩個參數(shù)寫上了,因此這個腳本就不需判 斷兩個參數(shù)輸入值的情況。只要當(dāng)前ip連接數(shù)大于8000,系統(tǒng)就發(fā)warning報警,超過10000,則發(fā)"critical"報警信息。把這個腳本放在目錄/usr/local/nrpe/libexec下,并給于執(zhí)行權(quán)限。
(四)、啟動nrpe服務(wù)并檢驗其配置
1、以獨(dú)立守護(hù)進(jìn)程啟動nrpe服務(wù) /usr/local/nrpe/bin/nrpe -c /usr/local/nrpe/etc/nrpe.cfg -d
2、通過察看系統(tǒng)日志,正常啟動可以看到如下輸出:
Mar 2 21:07:18 MONITOR nrpe[23823]: Starting up daemon
Mar 2 21:07:18 MONITOR nrpe[23823]: Listening for connections on port 5666
Mar 2 21:07:18 MONITOR nrpe[23823]: Allowing connections from: 127.0.0.1,59.26.240.63
察看端口,也能看見5666端口處于監(jiān)聽狀態(tài):
[root@MONITOR nrpe]# netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 59.26.240.63:5666 0.0.0.0:* LISTEN
察看進(jìn)程:
[root@MONITOR nrpe]#ps aux | grep nrpe | grep -v grep
nagios 23823 0.0 0.0 4864 924 ? Ss 21:07 0:00 bin/nrpe -c etc/nrpe.cfg -d
3、檢查插件功能
(1)檢查nrpe服務(wù)
[root@MONITOR nrpe]# libexec/check_nrpe -H 59.26.240.63
NRPE v2.8.1
(2)通過nrpe檢查主機(jī)資源
[root@MONITOR nrpe]# libexec/check_nrpe -H 59.26.240.63 -c check_df
DISK OK - free space: / 8241 MB (77% inode=98%); /var 5239 MB (95% inode=99%); /usr 11971 MB (86% inode=97%); /dev/shm 1013 MB (100% inode=99%);| /=2417MB;11218;11228;0;11238 /var=273MB;5792;5802;0;5812 /usr=1807MB;14508;14518;0;14528 /dev/shm=0MB;993;1003;0;1013
[root@MONITOR nrpe]#libexec/check_nrpe -H 59.26.240.63 -c check_ips
OK -connect counts is 13956
#p#
六、啟動nagios:驗證nagios工作狀態(tài)
1、檢查配置: nagios的驗證非常準(zhǔn)確,凡是不能正確啟動nagios,皆可以從錯誤輸出找到答案.
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
Reading configuration data...
Running pre-flight check on configuration data...
……………
Total Warnings: 0
Total Errors: 0
Things look okay - No serious problems were detected during the pre-flight check
2、啟動nagios
/usr/local/nagios/bin/nagios -d /usr/local/nagios/etc/nagios.cfg
3、檢驗監(jiān)控效果?,F(xiàn)在我們監(jiān)控了本機(jī)的web服務(wù),但由于apache服務(wù)還沒有被啟動起來,所以等待片刻后,正常情況下會收到郵件和手機(jī)短信報警信息;等后面我們把a(bǔ)pache服務(wù)起來后,應(yīng)該能夠收到服務(wù)已經(jīng)恢復(fù)的報警短信和郵件。
4、創(chuàng)建web驗證用戶。我們根據(jù)前面apache配置文件的驗證方法來創(chuàng)建用戶:
/usr/local/apache/bin/htpasswd -c /usr/local/nagios/etc/htpasswd sery
5、啟動apache服務(wù),然后在別的機(jī)器的瀏覽器地址欄輸入 http://59.26.240.63/nagios ,再輸入第"4"產(chǎn)生的用戶名及設(shè)定的密碼,即可通過web方式察看監(jiān)控系統(tǒng)當(dāng)前的狀態(tài)(瀏覽器自動刷新屏幕),如下圖所示:
【編輯推薦】