Nagios监控系统的安装与配置
2011.03.12 TsengYia@126.com http://selinux.cublog.cn
#########################################################################
系统环境:
RHEL5[2.6.18-194.el5]
软件环境:
[RHEL5自带的包]
httpd-2.2.3-43.el5
php-5.1.6-27.el5
sendmail-8.13.8-8.el5
mailx-8.1.1-44.2.2
gd-2.0.33-9.4.el5_4.2
gd-devel-2.0.33-9.4.el5_4.2
[需另外下载安装的包]
nagios-3.2.3-tar.gz #//提供整合各种监控插件的服务平台
nagios-plugins-1.4.1.tar.gz #//实际执行各种监控任务的程序或脚本
nrpe-2.12.tar.gz #//扩展程序,用于监控远程Linux主机的本地资源
sendEmail-v156.zip #//邮件客户程序,便于使用外部邮箱帐号发送告警邮件
—— 参考下载地址:
#########################################################################
一、Nagios服务器的快速安装
1. 创建nagios运行帐号
[root@localhost ~]# useradd nagios #//运行nagios服务的用户帐号
[root@localhost ~]# passwd nagios
[root@localhost ~]# groupadd ngcmd #//创建一个组帐号,用于通过Web界面运行外部命令
[root@localhost ~]# gpasswd -M nagios,apache ngcmd #//组成员包括nagios服务的程序用户、apache服务的程序用户
2. 安装主程序:nagios
[root@localhost ~]# tar zxf nagios-3.2.3.tar.gz
[root@localhost ~]# cd nagios-3.2.3
[root@localhost nagios-3.2.3]# ./configure --prefix=/usr/local/nagios --with-nagios-user=nagios --with-nagios-group=nagios --with-command-group=ngcmd
[root@localhost nagios-3.2.3]# make all
[root@localhost nagios-3.2.3]# make install-init #//安装nagios服务控制脚本
[root@localhost nagios-3.2.3]# make install-config #//安装样本配置文件
[root@localhost nagios-3.2.3]# make install-commandmode #//设置外部命令文件夹的权限
3. 安装插件程序:nagios-plugins
[root@clone ~]# tar zxf nagios-plugins-1.4.15.tar.gz
[root@clone ~]# cd nagios-plugins-1.4.15
[root@clone nagios-plugins-1.4.15]# ./configure --prefix=/usr/local/nagios --with-nagios-user=nagios --with-nagios-group=nagios
[root@localhost nrpe-2.12]# make all
[root@localhost nrpe-2.12]# make install
[root@localhost nrpe-2.12]# ls /usr/local/nagios/libexec/ #//查看安装的各种监控插件程序
check-ftp check_mailq check_ping check_time
check_http check_pop check_smtp check_udp
check_disk check_load check_swap check_oracle
…… //省略更多内容
4. 启动nagios服务程序
[root@localhost ~]# chkconfig --add nagios #//添加nagios服务(使用/etc/init.d/nagios脚本)
[root@localhost ~]# chkconfig --level 35 nagios on
[root@localhost ~]# cd /usr/local/nagios/
[root@localhost nagios]# bin/nagios -v etc/nagios.cfg #//检查主配置文件是否有问题
[root@localhost nagios]# service nagios start #//启动nagios服务
Starting nagios: done.
[root@localhost nagios]# service nagios status #//查看nagios服务状态
nagios (pid 26832) is running...
5. 访问Nagios系统的Web界面
1)调整httpd服务器配置
[root@localhost ~]# vi /etc/httpd/conf/httpd.conf #//或者在nagios编译目录下执行make install-webconf
…… //省略其他配置内容
ScriptAlias /nagios/cgi-bin "/usr/local/nagios/sbin"
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
Alias /nagios "/usr/local/nagios/share"
Options None
AllowOverride None
Order allow,deny
Allow from all
AuthName "Nagios Access"
AuthType Basic
AuthUserFile /usr/local/nagios/etc/htpasswd.users
Require valid-user
2)创建访问Web界面的帐号文件,添加授权用户nagiosadmin
[root@localhost ~]# htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
3)启动httpd服务
[root@localhost ~]# chkconfig --level httpd on
[root@localhost ~]# service httpd restart
4)在浏览器中访问,使用授权的用户nagiosadmin进行验证
6. 查阅告警邮件(默认需通过本机的smtp服务发送邮件)
1)启用本机的sendmail邮件服务程序
[root@localhost ~]# chkconfig --level 35 sendmail on
[root@localhost ~]# service sendmail start
2)查收告警邮件(需出现被监控机当机等告警事件后,过一段时间才会收到邮件)
[root@localhost ~]# su - nagios #//切换到默认的邮件接收用户
[nagios@localhost ~]$ mail #//通过mail程序查阅本地邮件
Mail version 8.1 6/6/93. Type ? for help.
"/var/spool/mail/nagios": 2 message 2 new
>N 1 nagios@localhost.loc Mon Feb 28 12:45 29/905 "** PROBLEM Service Al"
N 2 nagios@localhost.loc Mon Feb 28 14:05 29/928 "** PROBLEM Service Al"
& type 1 #//显示第一封邮件内容
…… //省略邮件内容
二、Nagios监控系统的配置文件
1. 主配置文件 nagios.cfg
用于设置日志位置、读取其他配置文件内容、设置检测超时等运行参数。需要新增加一台被监控主机、服务时,可以在objects目录下创建独立的配置文件,然后在nagios.cfg主配置文件中通过“cfg_file=...”指定路径即可。
[root@localhost ~]# vi /usr/local/nagios/etc/nagios.cfg
log_file=/usr/local/nagios/var/nagios.log
cfg_file=/usr/local/nagios/etc/objects/commands.cfg #//读取监控命令配置文件
cfg_file=/usr/local/nagios/etc/objects/contacts.cfg #//读取联系人配置文件
cfg_file=/usr/local/nagios/etc/objects/timeperiods.cfg #//读取时间段配置文件
cfg_file=/usr/local/nagios/etc/objects/templates.cfg #//读取监控模板配置文件
cfg_file=/usr/local/nagios/etc/objects/localhost.cfg #//读取资源控制(宏变量)配置文件
…… //省略更多配置内容
2. CGI权限控制文件 cgi.cfg
用于设置Web界面的程序目录、认证用户等相关信息。默认具有CGI权限访问Web界面的帐号名称为nagiosadmin。
[root@localhost ~]# vi /usr/local/nagios/etc/cgi.cfg
physical_html_path=/usr/local/nagios/share
url_html_path=/nagios
use_authentication=1
authorized_for_system_information=nagiosadmin
authorized_for_configuration_information=nagiosadmin
…… //省略更多配置内容
3. 资源控制(宏变量)文件 resource.cfg
用于设置全局使用的宏变量,存放插件程序的默认路径、用户名和密码等信息,便于安全控制(该文件的权限为660)。
[root@localhost ~]# vi /usr/local/nagios/etc/resource.cfg
$USER1$=/usr/local/nagios/libexec
#$USER3$=someuser
#$USER4$=somepassword
…… //省略其他配置内容
4. 监控模板控制文件 template.cfg
用于定义各种监控设置的模板,包括联系人、Linux主机、Windows主机、主机组、常规服务、本地服务……等等。例如,在主机模板linux-server中定义了检查的时间段、检查间隔、最多重试次数、监控使用的命令等等。
当用户创建新的监控主机、服务配置文件时,通过“use 模板名称”来引用此文件中定义的各种模板,然后再根据实际情况调整个别设置。
[root@localhost ~]# vi /usr/local/nagios/etc/objects/templates.cfg
define host{
name linux-server
use generic-host
check_period 24x7
check_interval 5
retry_interval 1
max_check_attempts 10
check_command check-host-alive
notification_period workhours
notification_interval 120
notification_options d,u,r
contact_groups admins
register 0
}
…… //省略更多配置内容
5. 监控命令定义配置文件 commands.cfg
用于定义在设置监控目标时通过check_command调用的各种监控命令。在libexec目录下包含的是各种监控插件的程序文件,而在commands.cfg文件中定义了使用这些插件程序的具体用法,因此在定义主机监控、服务监控时,可以直接引用commands.cfg文件中定义的命令,很多命令还可以通过!符号传递附加的执行参数。
[root@localhost ~]# vi /usr/local/nagios/etc/objects/commands.cfg
…… //省略其他配置内容
# 'check_ftp' command definition
define command{
command_name check_ftp
command_line $USER1$/check_ftp -H $HOSTADDRESS$ $ARG1$
}
# 'check_smtp' command definition
define command{
command_name check_smtp
command_line $USER1$/check_smtp -H $HOSTADDRESS$ $ARG1$
}
6. 联系人控制文件 contacts.cfg
[root@mail ~]# vi /usr/local/nagios/etc/objects/contacts.cfg
define contact{
contact_name nagiosadmin
use generic-contact
alias Nagios Admin
email nagios@localhost ;//接收告警的默认邮箱,可根据实际情况修改
}
define contactgroup{
contactgroup_name admins
alias Nagios Administrators
members nagiosadmin
}
三、监控指定的主机及网络服务
关于监控目标(主机或服务)的设置,默认保存再/usr/local/nagios/etc/objects/目录下。可以为每一台被监控主机创建一份配置文件,也可以将多台主机的配置放在一个文件中,前者适合于监控一台主机的大量服务时,后者更适合于监控大量主机的单个或少量服务时。如果被监控的主机数量众多,还可以对主机进行分组。添加被监控的主机需要定义host配置段,添加被监控的服务需要定义service配置段,设置主机分组需要定义hostgroup配置段。
定义监控服务时,其中check_command使用的具体监控命令再commands.cfg配置文件中定义,对应到libexec目录下的各种插件程序,具体用法和命令参数请参考--help。监控内容的详细设置可以参考templates.cfg模板中的配置内容。
示例:创建一个测试主机组testgroup,其中包括websvr、mailsvr两台主机,添加对websvr主机的http、ftp服务的监控,添加对mailsvr主机的smtp服务的监控。
1. 创建监控目标配置文件
[root@localhost ~]# vi /usr/local/nagios/etc/objects/testgroup.cfg
define hostgroup{
hostgroup_name testgroup
alias 对外培训事业部
members websvr
}
define host{
use linux-server
host_name websvr
alias 网站服务器
address 192.168.4.12
}
define host{
use linux-server
host_name mailsvr
alias 网站服务器
address 10.0.10.25
}
define service{
use generic-service
host_name websvr
service_description HTTP
check_command check_http ;//监控命令()
}
define service{
use generic-service
host_name websvr
service_description FTP
check_command check_ftp!"-p 2121" ;//通过!符合传递命令参数(检测端口为2121)
}
define service{
use generic-service
host_name mailsvr
service_description SMTP
check_command check_smtp!$MAILSVR_CHKAUTH$ ;//SMTP认证字串由自定义的宏变量提供
}
2. 添加宏变量设置(若未使用额外的宏,则无需设置)
[root@localhost ~]# vi /usr/local/nagios/etc/resource.cfg
…… //省略其他配置内容
$MAILSVR_CHKAUTH$="-A LOGIN -U tsengyia -P 123456"
3. 修改主配置文件nagios.cfg,添加读取testgroup.cfg文件的调用设置
[root@localhost ~]# vi /usr/local/nagios/etc/nagios.cfg
…… //省略其他配置内容
cfg_file=/usr/local/nagios/etc/objects/testgroup.cfg
[root@localhost ~]# cd /usr/local/nagios/
[root@localhost nagios]# bin/nagios -v etc/nagios.cfg #//检查配置文件是否存在问题
4. 重启nagios服务程序,并访问监控平台进行确认
1)重启服务
[root@localhost ~]# service nagios restart
2)确认监控目标主机、服务
访问,检查监控内容 ————
单击导航条“Host Groups”,应能看到新增的“对外培训事业部”的主机组;
单击导航条“Hosts”,应能看到新增的websvr、mailsvr主机监控信息;
单击导航条“Services”,应能看到按主机列出的各监控服务细节,其中包括websvr的http服务、ftp服务,以及mailsvr的smtp服务。
四、监控其他Linux主机的本地资源 (nrpe)
1. 被监控机上:
1)安装nrpe的服务程序(daemon),以便响应监控机的远程调用
[root@localhost ~]# useradd nagios
[root@localhost ~]# passwd nagios
[root@localhost ~]# tar zxf nrpe-2.12.tar.gz
[root@localhost ~]# cd nrpe-2.12
[root@localhost nrpe-2.12]# ./configure --prefix=/usr/local/nagios --with-nagios-user=nagios --with-nagios-group=nagios
[root@localhost nrpe-2.12]# make all
[root@localhost nrpe-2.12]# make install-daemon #//安装nrpe服务程序
[root@localhost nrpe-2.12]# make install-daemon-config #//安装nrpe服务配置文件
[root@clone nrpe-2.12]# cp init-script /etc/init.d/nrpe
[root@clone nrpe-2.12]# chmod 755 /etc/init.d/nrpe
[root@clone nrpe-2.12]# chkconfg --add nrpe
[root@clone nrpe-2.12]# chkconfg --level 35 nrpe on
2)安装nagios-plugins,主要是使用其中的监控CPU负载、磁盘使用率、登录用户数等插件程序
[root@clone ~]# tar zxf nagios-plugins-1.4.15.tar.gz
[root@clone ~]# cd nagios-plugins-1.4.15
[root@clone nagios-plugins-1.4.15]# ./configure --prefix=/usr/local/nagios --with-nagios-user=nagios --with-nagios-group=nagios
[root@localhost nrpe-2.12]# make all
[root@localhost nrpe-2.12]# make install
3)修改nrpe的daemon端配置,定义监控命令,作为监控机的调用参数
[root@clone nrpe-2.12]# vi /usr/local/nagios/etc/nrpe.cfg #//添加监控机(Nagios服务器)的IP地址,监控命令定义
…… //省略其他配置内容
allowed_hosts=127.0.0.1,192.168.72.11
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_root]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /dev/mapper/VolGroup00-LogVol00
command[check_swap]=/usr/local/nagios/libexec/check_swap -w 20% -c 10%
[root@clone nrpe-2.12]# service nrpe start
[root@clone nrpe-2.12]# netstat -anpt | grep nrpe
tcp 0 0 0.0.0.0:5666 0.0.0.0:* LISTEN 5044/nrpe
2. 监控机上:
1)安装check_nrpe插件程序
[root@localhost ~]# tar zxf nrpe-2.12.tar.gz
[root@localhost ~]# cd nrpe-2.12
[root@localhost nrpe-2.12]# ./configure --prefix=/usr/local/nagios --with-nagios-user=nagios --with-nagios-group=nagios
[root@localhost nrpe-2.12]# make all
[root@localhost nrpe-2.12]# make install-plugin #//安装check_nrpe插件程序
2)测试与被监控机的nrpe服务连接,远程调用监控命令(如check_users)
[root@localhost ~]# cd /usr/local/nagios/
[root@localhost nagios]# libexec/check_nrpe -H 192.168.4.12
NRPE v2.12
[root@localhost nagios]]# libexec/check_nrpe -H 192.168.4.12 -c check_users
USERS OK - 2 users currently logged in |users=2;5;10;0
[root@localhost nagios]# libexec/check_nrpe -H 192.168.4.12 -c check_root
DISK OK - free space: / 71091 MB (95% inode=99%);| /=3108MB;62590;70414;0;78238
[root@localhost nagios]# libexec/check_nrpe -H 192.168.4.12 -c check_total_procs
PROCS OK: 66 processes
3)添加远程监控设置的命令定义(通过check_nrpe命令的-c选项调用被监控机中定义的监控命令)
[root@localhost ~]# vi /usr/local/nagios/etc/objects/commands.cfg
…… //省略其他配置内容
# 'check_nrpe ' command definition
define command{
command_name check_nrpe
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}
4)添加远程监控项目(以监控websvr主机的本地资源为例)
[root@localhost ~]# vi /usr/local/nagios/etc/objects/testgroup.cfg
…… //省略其他配置内容
define service{
use generic-service
host_name websvr
service_description CPU负载
check_command check_nrpe!check_load
}
define service{
use generic-service
host_name websvr
service_description 已登录用户数
check_command check_nrpe!check_users
}
define service{
use generic-service
host_name websvr
service_description 根分区磁盘使用率
check_command check_nrpe!check_root
}
define service{
use generic-service
host_name websvr
service_description 剩余交换空间
check_command check_nrpe!check_swap
}
define service{
use generic-service
host_name websvr
service_description 总进程数
check_command check_nrpe!check_total_procs
}
[root@localhost ~]# service nagios restart
3. 访问监控服务器 ,确认新增的各监控项目
五、使用外部邮箱发送告警邮件 (sendEmail)
1. 安装sendEmail邮件客户程序
[root@localhost ~]# unzip sendEmail-v156.zip -d sendEmail
[root@localhost ~]# cp sendEmail/sendEmail.pl /bin/sendEmail
[root@localhost ~]# sendEmail --help | more #//查看命令用法
-f 发件人邮箱地址
-t 收件人邮箱地址
-u 邮件主题
-m 邮件内容
-s 邮件服务器地址:端口
-xu 认证用户名
-xp 认证密码
…… //省略更多内容
2. 连接外部邮件服务器(使用SMTP认证的),测试发信是否成功
[root@localhost mail]# sendEmail -f tsengyia@benet.com -t nagios@accp.com -u "TestMail 01" -m "第一封测试邮件。" -s 174.168.72.11 -xu tsengyia -xp 123456
Feb 28 15:40:43 mail sendEmail[28187]: Email was sent successfully!
[root@localhost mail]# echo "第二封测试邮件。" | sendEmail -f tsengyia@benet.com -t nagios@benet.com -u "TestMail 02" -s 192.168.72.11 -xu tsengyia -xp 123456Reading message body from STDIN because the '-m' option was not used.
If you are manually typing in a message:
- First line must be received within 60 seconds.
- End manual input with a CTRL-D on its own line.
Feb 28 15:45:49 mail sendEmail[28238]: Message input complete.
Feb 28 15:45:49 mail sendEmail[28238]: Email was sent successfully!
3. 修改nagios系统的邮件发送命令定义
将commands.cfg文件中的notify-host-by-email、notify-service-by-email命令定义,将/bin/mail改为新安装的/bin/sendEmail,并根据实际情况设置电子邮箱、邮件服务器地址、SMTP用户帐号/密码等相关信息(若希望更安全一些,可以将密码等信息定义到resource.cfg文件中,通过宏变量名来调用)。
[root@localhost ~]# vi /usr/local/nagios/etc/objects/commands.cfg
…… //省略其他配置内容
# 'notify-host-by-email' command definition
define command{
command_name notify-host-by-email
command_line /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /bin/sendEmail -f tsengyia@benet.com -t $CONTACTMAIL$ -s 192.168.72.11 -u "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" -xu tsengyia -xp 123456
}
# '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\nAdditional Info:\n\n$SERVICEOUTPUT$\n" | /bin/sendEmail -f tsengyia@benet.com -t $CONTACTMAIL$ -s 192.168.72.11 -u "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" -xu tsengyia -xp 123456
}
[root@localhost ~]# service nagios restart
#########################################################################