Nagios安装笔记

nagios是什么,适用于哪些监控场景?

我理解为这是一个监控框架,类似程序框架一样(可以想象为ZF框架),提供一个监控的规范,以及一些现成的监控插件,用户也可以自行编写符合nagios规范的插件,做一些自定义监控。

如何理解nagios的工作机制?

监控的本质,就是搜集数据-分析数据-展示数据-预警,nagios也不例外。试想一下,如果由我们自己来做监控工具,我们会怎么做?

以监控cpu的状态为例(假如我们有10台服务器):
(1)数据搜集系统已经自带了,可以通过/proc/stat中的数据计算得出cpu使用率(详见:http://www.cnblogs.com/no7dw/archive/2011/07/04/2097300.html)
假设系统没有这个功能的话,我们应该是通过写一个脚本放到这10台服务器上,每隔一定频率获取当前cpu的使用率,写入文件中
(2)在监控服务器上编写定时任务,定时去获取这10台服务器上的日志文件
(3)对获取的数据进行分析,判断CPU状态是否正常
(4)将分析结果展示为便于运维人员理解的形式(图形、表格等)
(5)如果判断状态异常,发送邮件/短信通知相关人员进行处理

Nagios的工作机制和上述情况是非常相似的,还是这个场景,我们看看Nagios是如何处理的:
(1)首先我们需要在这10台服务器上安装NRPE(Nagios Remote Plugin Executor Nagios远程插件执行器),这个插件的作用就是搜集数据,在我们这个场景中,它会搜集cpu的数据
(2)在监控服务器上开启nagios服务,通过配置,将这10台服务器加入监控列表,Nagios会自动定时去获取这10台服务器上,由NRPE搜集到的数据
(3)对获取的数据进行分析,判断CPU状态是否正常
(4)将分析结果通过Nagios的前端页面展示出来
(5)如果判断状态异常,发送邮件/短信/其他手段通知相关人员进行处理

nagios安装过程

网上有众多教程,我自己的安装过程中,遇到的比较麻烦的问题是让nginx支持perl-fastcgi,详细的过程后面说明。

遇到的问题

配置好需要监控的服务后,重启nagios报错:Error: Service check command ‘check_nrpe’ specified in service ‘CPU-FUZHAI’ for host ‘192.168.205.233’ not defined anywhere!

原因:没有定义nagios的命令模板
解决方案:
编辑commands.cfg 添加即可,commands.cfg在/usr/local/nagios/etc/objects目录下
例:

1
2
3
4
define command {
command_name check_nrpe
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}

服务重启成功后,查看监控页面,发现针对该服务器的监控报错了:CHECK_NRPE: Error - Could not complete SSL handshake.
原因1:被监控端没有进行配置,不允许监控服务器获取数据
解决方案:
查看被监控端的nrpe.cfg配置文件中,allowed_hosts一项是否添加了监控服务端的ip:
allowed_hosts=127.0.0.1,192.168.205.235
(注意,多个IP之间用英文逗号分割,而不是空格,网上有的教程写的空格,是错误的!)
添加后记得重启被监控端的nrpe和监控端的nagios(不重启似乎仍然会一致报错,按理说不应该)

原因2:nrpe端口没有加入防火墙
解决方案:查看nrpe端口是否加入防火墙

小技巧:可以直接在监控机上通过命令行进行测试:
/usr/local/nagios/libexec/check_nrpe -H 192.168.205.233