第一十二章 监控系统Nagios

第九节 Nagios故障处理汇集

    本小节收集两个Nagios故障处理实例。

12.9.1 Nagios不能发送飞信报警

    受人之托,为其调试了一下Nagios不能发送飞信报警的问题。过程很简单,但其中的技巧却值得拿出来分享。

    1.问题描述

    (1)以Web方式查看Nagios监控状态,显示故障,却收不到报警短信。

    (2)系统日志出现:

     系统日志出现

    2.情况了解

    该系统管理员说,他用手工方式执行飞信发短信没问题,再切换成用户Nagios,也没问题。

    3.处理过程

    (1)登录该服务器,查看系统日志和Nagios日志,果然如此。

    (2)查看飞信所在的目录,发现已经被系统管理员设置成777了。

    (3)先修改一下他的/etc/sudoers文件,用visudo进去,新增一行并保存。

    nagios ALL=NOPASSWD:/usr/local/feiton/feiton

    (4)切换到Nagios用户:

    su - nagios

    (5)执行:

    sudo /usr/local/feiton/feiton

    报无lib*.so文件。

    (6)切换回root,查一下/usr/lib目录,果然没有这些lib*.so。

    (7)从这个目录,把这些lib*.so统统拷贝到/usr/lib目录。

    (8)再切换到Nagios用户执行sudo/usr/local/feiton/feiton,无报错了。

    (9)停止一个监控机上的服务,片刻,就发送短信了。

    对于监控短信报警,建议使用短信接口。如用飞信,则不能给其他运营商的手机发送报警短信。

12.9.2 FreeBSD下解决Nagios不发送报警邮件的问题

    最近在一个新安装的FreeBSD 7系统部署一套Nagios监控系统,主要用来监控主机的存活状态、网络服务的状态以及远程主机的资源利用情况。尽管FreeBSD安装源码有些麻烦,但最终还是把Nagios正确安装上了,并且能正常工作,通过Web方式也能看见监控对象的状况,如图12-5所示。

 图12-5 Web方式查看Nagios报警状态(1)

图12-5 Web方式查看Nagios报警状态(1)

    其中有一个服务器的443端口对应的服务发生故障了,可是等了半天就是收不到报警邮件。登录Nagios所在的系统,检查与邮件发送相关的情况,其操如下。

    (1)检查Sendmail是否启动:

    ps aux | grep sendmail

    结果正常。

    (2)用mail程序手动发送一封邮件给我的邮箱:

    mail –s “This is a mail test project” sery@163.com < ip_scan

    能发送和接收到这封邮件。问题在哪里呢?

    由上面的排查,基本可以判定Sendmail没什么问题,域名解析也是正常的(专门为这个监控服务器解析MX及A记录)。可能的原因只能在Nagios了。进入Nagios配置文件所在的目录,逐个查看配置文件。我的Nagios配置目录情况如下:

     Nagios配置目录

    没发现有什么异常的情况,修改其中的某些设置,如cgi.cfg文件,重启Nagios,还是不能发送报警邮件。可是,当我单击Web管理界面的时候,却有邮件报警行为,如图12-6所示。

 图12-6 Web方式查看Nagios报警状态(2)

图12-6 Web方式查看Nagios报警状态(2)

    既有主机故障通知,又有服务故障报警通知,而且都应该按我的定义发送邮件的呀!

    查来查去,找不到头绪。再查看Sendmail 的日志/var/log/maillog,只发现我手动发送邮件的记录,而没有其他发送记录(只有下面这么一条):

     Sendmail 的日志/var/log/maillog

    看来Nagios并没有调用Sendmail发送邮件。

    差点忘了,Nagios自己也有日志记录呢!赶快打开看一看,发现里面有许多Warning,抽一个出来,其内容如下:

     Warning

    其他的行也和这个类似;最有用的信息我用粗体带下划线标记,其大意是不能执行上面的二进制或可执行文件。在这个条目中,只有两个执行文件——printf及mail。我把它照原样单独拿出来执行,操作过程如下:

    (1)/usr/bin/printf  “"%b" "***** Nagios 2.9 *****\n” 

    输出:

     ***** Nagios 2.9 *****

    这是正常的结果。

    (2)/bin/mail -s "Host DOWN alert for mail-server!" sery@163.com

    输出:

    su: /bin/mail: No such file or directory

    没找到路径或目录。前面还手动发送了邮件的,是有mail这个客户端程序呀!可能这个路径不对,是Linux的mail路径。查一下FreeBSD的mail路径,执行find / -name 得到mail在FreeBSD的路径为/usr/bin/mail 。

    到这里,我们知道了为啥不能发送邮件的根本原因。接下来,我把Nagios的配置文件commands.cfg的host-notify-by-email、service-notify-by-email的“/bin/mail”替换为“/usr/bin/mail”。其完整形式为:

     Nagios的配置文件commands.cfg

    修改完配置文件commands.cfg后重启 Nagios,再查看Nagios日志,不再有“Make sure the script or binary you are trying to execute actually exists...”报错,并且有发送报警邮件的记录了:

     发送报警邮件的记录

    收邮件。我的163邮箱终于收到久违的报警信息了。再回去看看邮件日志/var/log/maillog,也记录了这个发送情况。