1、 nagios的安装
2.1 准备工作
2.1.1 安装必须的系统软件包
装系统的时候尽量把一些开发库,系统库等安装上,免得后面出现装包老是有问题
同时如果iptables,selinux开了,测试环境的时候尽量把它关了,后续就需要把相应的端口加到防火墙中,参考《防火墙配置》
service iptables stop
setenforce 0
或者在/etc/selinux/config
SELINUX=disabled
软件包主要有:
rpm -q gcc glibc glibc‐common gd gd‐devel
2.1.2 下载nagios,httpd等包
http://www.nagios.org/download/
查看nagios系统的版本说明:
http://sourceforge.net/mailarchive/forum.php?thread_name=4CA9592B.7000705%40nagios.org&forum_name=nagios-announce
主要有httpd-2.2.6.tar.gz,nagios-3.1.0.tar.gz,nagios-plugins-1.4.13.tar.gz.gz,nrpe-2.12.tar.gz,php-5.3.5.tar,后期需要完善相关功能的时候再添加,如果要实现记录那些日志的信息,最好安装一个mysql库,将其相关内容写入到表中,以备查阅
2.1.3 安装nagios
监控服务器A:
添加用户nagios:
触压包并编译:
tar zxvf nagios-3.1.0.tar.gz
cd nagios-3.1.0
chown nagios.nagios -R /usr/local/nagios
./configure --prefix=/usr/local/nagios/ --enable-redhat-pthread-workaround
make all
make install && make install-init && make install-commandmode && make install-config
验证程序是否被正确安装。切换目录到安装路径(这里是/usr/local/nagios),看是否存在 etc、bin、 sbin、 share、 var这五个目录,如果存在则可以表明程序被正确的安装到系统了。后表是五个目录功能的简要说明:
bin | Nagios执行程序所在目录,nagios文件即为主程序 | |
etc | Nagios配置文件位置,初始安装完后,只有几个*.cfg-sample文件 3版本与2版本区别 对象配置文件都在etc/objects目录下 | |
sbin | Nagios Cgi文件所在目录,也就是执行外部命令所需文件所在的目录 | |
Share | Nagios网页文件所在的目录 | |
Var | Nagios日志文件、spid 等文件所在的目录 | |
var/archives | Empty directory for the archived logs | |
var/rw | Empty directory for the external command file | |
2.1.4 安装nagios-plugin
tar zxvf nagios-plugins-1.4.13.tar.gz.gz
cd nagios-plugins-1.4.13
./configure --prefix=/usr/local/nagios
make && make install
然后查看下ls /usr/local/nagios/libexec会显示安装的插件文件,即所有的插件都安装在libexec这个目录下
2.1.5 apache安装和配置
单独拿出来讲,总是有点特殊性,因为这东西让人走的弯路多,为了减轻别人的负担,俺还是在这边单独来讲下
监控服务器A:
2.1.5.1 安装httpd,php,mysql
为什么这边要加一个php呢?因为nagios的网页程序是用php的,不然到时候就会出现让你痛苦的事,就是打开验证,输入用户和密码以后,不断的提示你没有权限,俺是深受其害,谨记
tar zxvf httpd-2.2.6.tar.gz
cd httpd-2.2.6
./configure --prefix=/usr/local/apache --enable-so --enable-rewrite --enable-auth-digest=shared
make
make install
bunzip2 php-5.3.5.tar.bz2
cd php-5.3.5
./configure --prefix=/usr/local/php --with-apxs=/usr/local/apache/bin/apxs
会报错,为什么?根据提示就知道了,上面的是相对于apache 1.X版本的,因为apache是2.X以上的,所以参数要用如下的:
./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache/bin/apxs
make
make install
2.1.5.2 配置apache以支持php脚本
vi /usr/local/apache/conf/httpd.conf或者是rpm安装的在/etc/httpd目录下
LoadModule php5_module modules/libphp5.so
AddType application/x-httpd-php .php
AddType application/x-httpd-php .htm
DirectoryIndex index.html index.php
2.1.5.3 配置nagios的WEB接口
有二种方法:
方法一:直接在安装nagios时 make install-webconf 创建一个nagiosadmin的用户用于Nagios的WEB接口登录。记下你所设置的登录口令,一会儿你会用到它。 htpasswd ‐c /usr/local/nagios/etc/htpasswd test 重启Apache服务以使设置生效。但记得这边有个特殊的地方,默认那个配置文件是放在/etc/httpd/conf.d/nagios.conf,所以要想把它加到apache中,需要在httpd.conf文件加入如下的语句:
Include /etc/httpd/conf.d/nagios.conf
方法二:
在apache最后添加如下的语句:
ScriptAlias /nagios/cgi-bin /usr/local/nagios/sbin
<Directory "/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
Require valid-user
</Directory>
Alias /nagios /usr/local/nagios/share
<Directory "/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
Require valid-user
</Directory>
添加用来监控的用户
/usr/local/apache/bin/htpasswd -c /usr/local/nagios/etc/htpasswd test
输入密码
生成文件/usr/local/nagios/etc/htpasswd 内容如下:
test:RTfhyrirbvOnk 用户名:密码(加密后)
同时需要在/usr/local/nagios/etc/cgi.cfg修改如下的几个参数,把上面的用户加入到里面去,如果有多少用户,以逗号分开
authorized_for_system_information=nagiosadmin,test
authorized_for_configuration_information=nagiosadmin,test
authorized_for_system_commands=nagiosadmin,test
authorized_for_all_services=nagiosadmin,test
authorized_for_all_hosts=nagiosadmin,test
authorized_for_all_service_commands=nagiosadmin,test
authorized_for_all_host_commands=nagiosadmin,test
2.1.5.4 apache的其它配置
找到httpd.conf文件
grep ^User /usr/local/apache/conf/httpd.conf 结果我这边是如下:
User daemon
因此需要将daemon用户加入到组nagios
usermod -G nagios daemon
如果是其它也采取相应的办法
找到#ServerName www.example.com:80 将#去掉,并修改成你想要的域名或者IP
我的配置是:ServerName http://10.10.100.200
还有一处是:
<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Allow from all --这边之前是Deny from all,当然也可以根据需要进行配置
</Directory>
至此关于apache的配置完毕,祝大家旅途愉快
2、 nagios的配置
为了实现对远程主机的监控,必须借助于nrep功能的强大,用来监控其它服务器,下面就关于nrep的安装和配置进行简单的记录,如下是我的操作过程:
在配置这个之前一定要留意有关nagios的配置文件都是nagios.nagios用户组的,否则后面会出现问题
3.1 监控服务器A的配置
3.1.1 安装nrep
tar zxvf nrpe-2.12.tar.gz
cd nrpe-2.12
./configure --prefix=/usr/local/nagios
make all
make install-plugin
chown -R nagios.nagios /usr/local/nagios/
3.1.2 nagios的配置
A:nagios.cfg主配置文件的配置
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/hosts.cfg
cfg_file=/usr/local/nagios/etc/objects/services.cfg
cfg_file=/usr/local/nagios/etc/objects/contactgroup.cfg
cfg_file=/usr/local/nagios/etc/objects/localhost.cfg
#cfg_file=/usr/local/nagios/etc/objects/windows.cfg
B:command.cfg命令定义文件中添加NRPE命令。
[root@KCentOS5C ~]# vi /usr/local/nagios/etc/objects/commands.cfg
# NRPE Command
define command{
command_name nrpe
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}
C:在hosts.cfg添加远程主机
define host {
host_name smstest
alias smstest server
address 10.10.100.164
check_command nrpe!check_load
max_check_attempts 5
notification_interval 10
notification_period 24x7
notification_options d,u,r
contact_groups admins
}
D:在services.cfg添加服务配置,这边只添加了对负载进行了监控
define service {
host_name smstest
service_description Load Using Of Remote System
check_period 24x7
max_check_attempts 4
normal_check_interval 3
retry_check_interval 2
contact_groups admins
notification_interval 10
notification_period 24x7
notification_options w,u,c,r
check_command nrpe!check_load
}
E:contacts.cfg配置联系人信息
define contact{
contact_name nagiosadmin
use generic-contact
alias Nagios Admin
service_notification_commands notify-service-by-email
host_notification_commands notify-host-by-email
email zhiliang.jiang@sinofriends.com
}
define contact{
contact_name hexin
use generic-contact
alias Test Admin
service_notification_commands notify-service-by-sendmsg
host_notification_commands notify-host-by-sendmsg
email xin.he@sinofriends.com
}
F:配置联系人组信息contactgroup.cfg
define contactgroup{
contactgroup_name admins
alias Nagios Administrators
members nagiosadmin,hexin
}
G:时间段配置timeperiods.cfg,这边是7*24小时的监控,不管什么时候出问题了都报警
define timeperiod{
timeperiod_name 24x7
alias 24 Hours A Day, 7 Days A Week
sunday 00:00-24:00
monday 00:00-24:00
tuesday 00:00-24:00
wednesday 00:00-24:00
thursday 00:00-24:00
friday 00:00-24:00
saturday 00:00-24:00
}
当配置完以后,通过下面的命令进行上下文配置信息的检查
/usr/local/nagios/bin/nagios v /usr/local/nagios/etc/nagios.cfg
如果没有出现警告和错误,表示配置成功
Total Warnings: 0
Total Errors: 0
Things look okay - No serious problems were detected during the pre-flight check
3.1.3 启动nagios
chkconfig --add nagios
chkconfig nagios on
service nagios stop
service nagios start
或者使用命令直接启动
/usr/local/nagios/bin/nagios -d /usr/local/nagios/etc/nagios.cfg
3.2 被监控服务器B(LINUX)的配置
需要安装nrep和nagios-plugin
3.2.1 编译安装
tar zxvf nrpe-2.12.tar.gz
cd nrpe-2.12
./configure
make all
make install-plugin
make install-daemon
make install-daemon-config
ll /usr/local/nagios/
看下是不是有文件了&_&
3.2.2 配置nrep.cfg
vi /usr/local/nagios/etc/nrpe.cfg
#server_address=0.0.0.0
server_address=10.10.100.164 #这是被控端IP地址,在我的环境中就是10.10.100.164
设定系统监听NRPE的网络接口。一般设定具体的IP地址,如果要多个网卡的话就用逗号“,”来分隔多个IP地址。如果要监听系统全部的网络接口的话,可以使用“0.0.0.0”这个表示全部网络接口的特殊地址,但是不可以用通配符“*”。
allowed_hosts=10.10.100.200 #这是允许监控服务器IP地址
确认有下面的命令,也是要实现的功能,当不了解这些插件的命令参数的时候,可以使用例如
/usr/local/nagios/libexec/cmd –h 查看帮助
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
3.2.3 运行守护进程
/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d
3.2.4 查看运行是否成功
ps aux | grep nrpe
或者netstat -anp | grep nrpe
3.2.5 将NRPE加入系统启动脚本中
echo "/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d" >> /etc/rc.d/rc.local
3.3 被监控服务器C(windows)的配置
在用Nagios监控Windows机器的私有服务之前,需要先在机器上安装代理程序。推荐使用NSClient++外部构件,它可以在http://nsclient.org/nscp/downloads找到。如下指令可以安装一个基本的NSClient++外部构件,同时也配置好Nagios来监控这台Windows机器。
3.3.1 C服务器下载安装软件包
l 从http://nsclient.org/nscp/downloads站点下载最新稳定版的NSClient++软件包;
l 展开软件包到一个目录下,如C:/NSClient++;
l 打开一个命令行窗口并切换到C:/NSClient++目录下;
l 用下面命令将NSClient++系统服务注册到系统里:
nsclient++ /install
3.3.2 C服务器配置NSC.INI
编辑NSC.INI 文件(位于C:/NSClient++目录)并做如下修改:
l 去掉在[modules]段里的列出模块程序的注释,除了 CheckWMI.dll 和RemoteConfiguration.dll;
l 最好是修改一下在[Settings]段里的'password'选项,加强安全认证;
l 去掉在[Settings]段里的'allowed_hosts'选项注释,把Nagios 服务所在主机的IP 加到这一行里,或是置为空,让全部主机都可以联入;
l 确认一下在[NSClient]段里的'port'选项里已经去掉注释并设置成'12489'(默认端口);
参考附件:
3.3.3 C服务器启动NSClient++服务
nsclient++ /start
3.3.4 C服务器检查服务是否启动
通过使用netstat –an就可以看到12489和5666端口是否已经启动了,当有防火墙的时候,要记得过滤这二个端口
3.3.5 A服务器编辑Nagios 的主配置文件
vi /usr/local/nagios/etc/nagios.cfg
把下面这行最前面的#号去掉:
#cfg_file=/usr/local/nagios/etc/objects/windows.cfg
3.3.6 A服务器修改主机和服务的配置文件
vi /usr/local/nagios/etc/objects/windows.cfg
参考附件:
3.3.7 A服务器修改commands.cfg
如果想指定保存在Windows 机器上NSClient++配置文件里的口令,可以修改check_nt 命令定义,让它带着口令。编辑方式打开commands.cfg 文件。
vi /usr/local/nagios/etc/commands.cfg
修改check_nt 命令的定义,带上"-s <PASSWORD>"命令参数(这里的PASSWORD 要换成你Windows 机器的真正口令),象这样:
command_name check_nt
command_line $USER1$/check_nt -H $HOSTADDRESS$ -p 12489 -s PASSWORD -v $ARG1$
$ARG2$
}
3.3.8 A服务器重启nagios
Service nagios stop
Service nagios start
3、 邮件报警的实现
邮件报警的相对比较简单,这些都是在监控服务器A中的配置,涉及的文件有commands.cfg和contacts.cfg文件
本文中因为linux自带mail命令不能使用,特使用sendmail程序:
tar zxvf sendEmail-v1.56.tar.gz
cd sendEmail-v1.56
cp sendEmail /usr/local/bin/
ll /usr/local/bin/sendEmail #确定sendmail有可执行权限
-rwxr-xr-x 1 root root 80213 Jun 21 15:38 /usr/local/bin/sendEmail
测试:
-f 表示from,发件人地址
-t 表示to,收件人地址
-s mail服务器域名
-u 主题
-xu 用户名(@之前的)
-xp 用户密码
-m 纯文本信息
-o message-file=/root/.. 发送文件中的内容
-a 发送附件 (-m,-o,-a可以同时使用)
/usr/local/bin/sendEmail -f chi_xiaohui@163.com -t 13627498993@139.com -s smtp.163.com -u "from nagios" -xu chi_xiaohui -xp 891220 -m Thankyou!
4.1 commands.cfg配置
Vi /usr/local/nagios/etc/objects/commands.cfg
define command{
command_name notify-host-by-email
command_line /usr/bin/printf "%b" "***** Nagios *****/n/nNotification Type: $NOTIFICATIONTYPE$/nHost: $HOSTNAME$/nState: $HOSTSTATE$/nAddress: $HO
STADDRESS$/nInfo: $HOSTOUTPUT$/n/nDate/Time: $LONGDATETIME$/n" | /usr/local/bin/sendEmail -f chi_xiaohui@163.com -t 15024483016@139.com –s smtp.163.com -u "from nagios" -
xu tengjunhu -xp ****** -m "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$
}
4.2 contacts.cfg配置
Vi /usr/local/nagios/etc/objects/contacts.cfg
define contact{
contact_name nagiosadmin
use generic-contact
alias Nagios Admin
service_notification_commands notify-service-by-email
host_notification_commands notify-host-by-email
email zhiliang.jiang@sinofriends.com
}
说明:当有多种报警方式的时候,将其合在一起,以逗号隔开,如下例:
define contact{
contact_name nagiosadmin
use generic-contact
alias Nagios Admin
service_notification_commands notify-service-by-email
host_notification_commands notify-host-by-email
email zhiliang.jiang@sinofriends.com
}