Nagios安装、配置记录 本文描述了我在安装Nagios的过程中遇到的一些问题以、解决办法以及注意事项。 Nagios是一套强大的监控报警系统,但是你不花一些时间,是绝对不可能很好地配置它的。除非你只需要监控主机的alive等简单的情况(例如ping),否则请放弃幻想,以极大的耐心去研究它吧。 (1)默认安装情况下,Nagios的主配置文件为:/usr/local/nagios/etc/nagios.cfg 打开这个文件,可以清楚地看到它指定了其他的配置文件:
所以你要注意了,不要以为“objects”目录下的只是示例文件而已,它们默认被当作了 实际上使用的配置文件,你不需要麻烦地拷贝一份出来到 /usr/local/nagios/etc/ 目录下再修改,直接修改这些配置文件就好了。 (2)“Map”、“Trends”功能无法使用,错误提示为:
是因为编译Nagios的时候没有编译出相应的CGI文件(默认安装时,在 /usr/local/nagios/sbin/ 目录下)。编译依赖项:
查询安装情况:
其中gd的两个包名分别类似于:
安装相应的RPM包后,重新编译安装Nagios:
(3)重新编译安装Nagios(configure、make all、make install)不用担心配置文件会丢失,因为make install只会把Nagios主程序、CGI、HTML给安装上。 (4)如果你在define service的时候,使用了一个模板,例如:
那么你可以在这个service中覆盖模板里的配置。例如,模板里设置了:
你却可以在这个service中设置:
这样,对这个service来说,触发条件时也不会报警的。 (5)报警邮件通过sendmail发不出去?请查看邮件日志文件(/var/log/maillog)的内容查找原因。当然,最好用mail试一下:
然后依次输入邮件的标题、正文以及抄送地址,回车发送!然后再去邮件日志文件里看日志,是成功了还是失败了,分析原因。 (6)如果配置了短信发送报警信息,但是却收不到短信,我要提醒你的是: ①在define command的地方,command_line里写的发送报警短信的命令行中,用于发送报警短信的程序要写全路径,例如/usr/local/bin/sendsms,不要以为写一个“sendsms”就可以了,尽管你在Linux命令行下可以找到这个命令(因为它在/usr/local/bin/目录下),但是对Nagios来说,它却找不到,所以要写全路径。这个规律我是试验发现的,至于是不是普遍现象,或者是不是所有版本的Nagios都是这样,我不知道,我只是通过试验知道这样能解决问题。 ②短信接口的70个字符限制,有时候超过了是发不出短信的!请确认你的短信接口允许的单条短信字符数限制。 (7)在montoring server上执行命令:
提示错误:NRPE: Command 'check_disk' not defined 这是因为没有配置好两端的NRPE和Nagios,使得monitoring server不能远程执行check_disk命令。 在被监控服务器端,需要修改nrpe.cfg文件:
这将允许命令带参数执行。 另外,在nrpe.cfg文件的最后,原来有几行注释掉的内容:
把它们取消注释。处于注释状态的话,NRPE当然找不到这些命令了。 修改完之后,需要重启服务:
(8)错误“CHECK_NRPE: Received 0 bytes from daemon. Check the remote server logs for error messages.”如何解决?这篇文章详细地讲解了解决办法:Nagios: How to Enable check_nrpe Command Line Arguments 看完之后你可能很后悔你没有早看到这篇文章吧?没错,和我一样,要重新编译安装NRPE,不过配置Nagios、NRPE的过程就是这样,折腾来折腾去,不费点劲是解决不了问题的。 (9)在Nagios中,你会看到类似于“RTA = 455.04 ms”的数据,RTA是什么呢?引用网上的话作答:Round Trip Average. The average time it took to receive a response to your ping packets. (10)在Nagios中,检测时间周期默认是以分钟为单位的,例如“normal_check_interval”的值为5时,代表正常检测周期为5分钟。假设你想以5秒钟检测一次,怎么办?这时候你需要修改配置文件nagios.cfg中的“interval_length”参数的值,默认值为60,代表基数是60秒,你改成1,代表基数是1秒,这时,“normal_check_interval”的值为5就表示正常检测周期为5秒了。请注意,把“interval_length”的值修改以后,所有其他和周期有关的地方你都要检查一遍,保证都被更改为了正确的数值,否则到时就全乱套了。 (11)在Nagios中使用自定义变量很简单:无论是在host,service还是contact定义中,要添加一个自定义的变量,只需要以下划线开头就可以了,例如:_my_custom_var为一个在host定义中的自定义变量,则在其他地方,要使用这个变量的话,其宏名为_HOSTMY_CUSTOM_VAR,也就是说,Nagios在不仅将你的变量名转换成了大写,而且在前面加了一个“_HOST”。如果是service或contact中的自定义变量的话,则Nagios会分别添加“_SERVICE”或“_CONTACT”到宏名前。 (12)如果你在用 /usr/local/nagios/bin/nagios -v nagios.cfg 命令检测你所编写的Nagios配置文件的正确性的时候,得到了以下警告提示:
那么很明显,就是你设置的某项service中的 notification_interval 值比 normal_check_interval 值大导致的了。normal_check_interval 是正常的检测周期,例如10分钟检测一次,20分钟检测一次这样的周期,而 notification_interval 看网上的很多文章,说它是发生故障之后的报警周期,例如该值设置成30分钟就表示发生故障之后每30分钟会报一次警。但是 notification_interval 为什么不能比 normal_check_interval 值要小呢?我完全可以让某个service一小时才检测一次,但是发生故障之后每1分钟报一次警啊!反正我是没想明白,或者是我对它们的含义理解有误,还需要进一步斟酌。 (13)在被监控的服务器上安装NRPE后,在配置文件 /etc/xinetd.d/nrpe 中,可以设置允许哪些IP地址访问NRPE daemon,例如:
表示只有本机可以访问。为了能让多台远程Nagios可以监控此台服务器的状况,可以在此处添加多个IP地址,中间以空格隔开,例如
表示允许192.168.1.188和58.30.200.199这两个IP访问本机上的NRPE daemon。 另外再说一句,在NRPE的配置文件 /usr/local/nagios/etc/nrpe.cfg 中,有一个“allowed_hosts=”的选项,可以设置允许哪些IP地址访问,但是要注意了,文件里面的注释写得清清楚楚:
也就是说,如果NRPE是运行在在 inetd 或 xinetd 下运行的话,这个选项就被忽略了!所以,我个人觉得最好是在 /etc/xinetd.d/nrpe 中设置允许访问的IP。 (14)如果你通过NRPE检测一个远程服务,可以先在Nagios主机上通过以下命令执行一下: /usr/local/nagios/libexec/check_nrpe -H 远程主机IP -c 远程检测命令 -a 命令行参数 如果返回的结果是这样的:
那么你就要按这个提示,到被监控的主机上查看日志,看看是出了什么错:
然后根据错误记录来解决问题。 (15)“performance data”有两个,一个是$HOSTPERFDATA$,另一个是$SERVICEPERFDATA$,当你在报警邮件中要带上performance data信息时,千万不要漏了,要不然可能看不到你想要的信息。 (16)如果你在Nagios监控系统的web界面中点进去一个service,然后点击“Disable notifications for this service”,这就可以直接禁用该对服务的报警,不过,在web界面中禁用某服务的报警,并不会对配置文件造成影响,也就是说,你在配置文件中设置了某服务的“notifications_enabled”值为1,那么就算你在web界面中禁用了其报警,配置文件中仍然会是1。不仅如此,就算你重启了Nagios服务(service nagios restart),在web界面中禁用的报警仍然会是禁用状态,也就是说Nagios把你在web界面上的操作记录在某个地方了(不是配置文件中)。这一点要特别注意,有时候收不到报警信息,而配置文件中的报警全都打开了,这时你就要去web界面里查看各项设置了。 (16)在commnads.cfg中定义的一个远程执行的命令(通过NRPE来执行),如果用 -t 参数指定了命令执行的超时时间(例如-t 500指定了超时时间为500秒),但是还是经常会收到错误报警:NRPE: Command timed out after 60 seconds。 这是怎么回事呢?在NRPE的文档中写得很清楚:
可见,要修改这个超时时间,在Nagios命令定义文件commands.cfg中通过 -t 参数指定是无效的,因为 -t 参数指定的是连接的超时时间,而不是NRPE的命令执行超时时间。必须要修改NRPE的配置文件nrpe.cfg中的“command_timeout”参数值(默认值为60秒)才有用,如果你要修改为5分钟,应该这样改:
(17)如果要监控Widows的服务器,需要在Windows服务器上安装NSClient++这个软件,详细的设置可看【这个】链接。在这里我简要地描述一下:安装NSClient++的过程中,需要设置允许访问的IP地址,这个地址就是Nagios监控服务器的地址;然后还需要设置一个密码,这个密码就是Nagios监控服务器访问这台Windows上的NSClient时要提供的密码(如果没有密码就能取数据,那太不安全了)。安装好之后,启动NSClient的服务,并且在服务属性设置中勾上“Allow service to interact with desktop”的选项,然后Windows上的设置就算完成了,然后就到设置Nagios服务器了: 在commands.cfg文件中,定义检测Windows服务器的命令:
注意,-s 参数表示指定访问NSClient的密码,就是上面所说的、在NSClient安装过程中设置的那个密码。 然后在定义service的时候,像这样写:
其中,“myPasswd”是上面所说的那个密码,你需要写你设置的密码;USEDDISKSPACE表示检测的是磁盘空间;另外,看到上面的check_command中提供的最后一个参数了吗:-l c -w 80 -c 90 其中第一个c表示检测的是C盘,-w表示的是warning值,-c表示的是critical值。 (责任编辑:IT) |