Nagios的结构
Nagios的结构其实很简单,一个监视系统,一个web展现系统,一个remote服务器,没了。
监视系统是根本,在debian中,需要安装的包是Nagios3。在安装这个包之后,会启动一个监视进程,负责检查所有的服务是否OK。不OK就触发事件。
检查的时候,Nagios会去调一些“插件”。这些插件其实都在/etc/Nagios-plugins/config下面注册过的。每个插件配置都是name!v1!v2…的格式。在注册里面,可以看到这个command_name,对应一个command_line。你很容易看到这就将一个定义转换为了一个命令行。
直接执行这个命令行,你可以看到一个标准输出。Nagios就是解析这个标准输出,得到值是否在一个合法的范围内的。所以从原理上说,你可以自己写插件,对任何事情做Nagios的监控。
对于某些远程可以获得的信息,目标设备上可以什么都不动,例如ping连通性,或者是端口连通性等。而对于其他信息,例如磁盘空间剩余值,靠远程可能没法获得,就需要在目标设备上装nrpe,Nagios Remote Plugin Executor Server。在debian中,就是Nagios-nrpe-server这个包。如果获得本地信息,不需要这个包。
最后,cgi会将本地的信息暴露给web查询,这就构成了完整的Nagios体系。在debian中,这是Nagios3-cgi这个包。
Nagios页面在nginx上的配置
这个过程比较繁琐,因为apache会自动配置,而nginx没有宿主进程,也没有cgi。因此实际上需要运行两个宿主进程。
首先,你需要安装php-fpm宿主进程,这个是nginx搭配php执行的最佳宿主。在Nagios中有用到php,所以你需要php执行能力。
其次,安装fcgiwrap这个包。这是cgi执行宿主,以fastcgi协议暴露。这里需要注意。如果你的nginx和Nagios的宿主不在同一个设备上(例如像贝壳这样执行了虚拟化的),那么实际上只要在Nagios的宿主上执行fcgiwrap即可。php-fpm和nginx可以执行在其他不同设备上,没有关系。只是前者必须有Nagios的cgi代码,后两者必须有Nagios的网页和php代码。而这三者又都在Nagios3-cgi包里面。因此几台机器都需要安装Nagios3-cgi包。
最后,配置nginx。
- location /Nagios3 {
- index index.html index.htm index.php;
- }
- location /Nagios3/stylesheets {
- root /etc;
- }
第一个映射是Nagios的基础目录,在根目录中,我其实配置了Nagios3 -> /usr/share/Nagios3/htdocs/(debian中的链接位置)。第二个映射是样式表配置,我用系统缺省的。
- location ~ ^/Nagios3/.*.php$ {
- include fastcgi_params;
- fastcgi_pass unix:/var/run/php5-fpm.sock;
- }
这个是Nagios的php解析代码。我的php-fpm执行在同一台机器上,因此直接如此配置即可。
- location /cgi-bin/Nagios3 {
- root /usr/lib;
- include fastcgi_params;
- fastcgi_param REMOTE_USER $remote_user;
- fastcgi_pass dev:port;
- }
最后是cgi暴露的配置。由于我的Nagios宿主并不在web服务器上,因此fastcgi是个远程地址。而且注意REMOTE_USER,传递这个才能让远程认到你的用户basic auth。由于Nagios的cgi通过这个工作,因此没有这个会直接导致对方始终认为你是无权限用户。
Nagios的简单配置
我们首先认清一点,Nagios并不负责管理机器的维护。他的设计目标是“可用性”。因此目标是否可达,服务是否可用,是Nagios的关心重点。至于磁盘,负载,只是顺便监控而已。所以你可以看到,Nagios并没有直接的插件来监控CPU或者内存。他只有snmp插件可以查询到这些数据。
所以,我们开心一点。最低限度,我们将所有需要监控的设备和服务端口加入列表。当这些设备不可达时,Nagios会发出告警(有邮件)。而如果运气好,我们是可以监控到这台机器是否有apt包需要升级,磁盘空间是否够的。作为建议,其实你只需要监控load和磁盘空间利用率就够了。其余的东西一般不大需要。当内存或者CPU发生问题的时候,你的query其实也拿不到返回。相对的,目标端口很快失去响应进而引发告警才是我们的预期。
OK,在这个基础之上,让我们看看有什么可以配置的。
服务器添加
首先,你可以定义一些机器。localhost_Nagios2.cfg里面有例子,大致是这个样子。
- define host{
- use generic-host ; Name of host template to use
- host_name host
- alias host
- address IP
- }
我建议你专门弄个文件来管理这些自己的设备,例如我这里叫hosts.cfg。
基本服务
hostgroups_Nagios2.cfg中有很多服务器组,其中有一个ssh组和http组是内置的。如果你的设备有这两个最常见服务,你直接添加到这两个组里面,设备的对应服务就会被监控。
其中有个debian组需要多说一下,这个组并没有服务,但是这个组定义了设备的类型为debian。你在web中可以看到logo。
在services_Nagios2.cfg里面,你还可以定义其他自己的常见服务,并且将服务器加入到hostgroups中。
对于少数特殊的服务,就要在services里面开了。在hosts里面直接定义一些服务比较简单直接。
服务器定义
默认的generic-host是带有keep-alive的,服务器会通过ping来确认设备活着。如果你的目标上面为了安全加防火墙关了icmp,你又很难让目标机器对你的IP互信的话。那么开着ping会很烦。每天看着有个服务器挂了,其实没事。
你可以在generic-host_Nagios2.cfg里面,将标准配置复制一份,去掉下面一行。这个服务器就不会检查是否活着了。
- check_command check-host-alive
nrpe
nrpe的配置比较繁琐,你首先要在nrpe服务的配置文件中,将需要执行的指令定义好。然后在Nagios的服务这里用check_nrpe检查返回。