Nagios 配置技巧集锦


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。

  1. location /Nagios3 { 
  2. index index.html index.htm index.php; 
  3. location /Nagios3/stylesheets { 
  4. root /etc; 
  5. }  

第一个映射是Nagios的基础目录,在根目录中,我其实配置了Nagios3 -> /usr/share/Nagios3/htdocs/debian中的链接位置)。第二个映射是样式表配置,我用系统缺省的。

  1. location ~ ^/Nagios3/.*.php$ { 
  2. include fastcgi_params; 
  3. fastcgi_pass unix:/var/run/php5-fpm.sock; 
  4. }  

这个是Nagios的php解析代码。我的php-fpm执行在同一台机器上,因此直接如此配置即可。

  1. location /cgi-bin/Nagios3 { 
  2. root /usr/lib; 
  3. include fastcgi_params; 
  4. fastcgi_param REMOTE_USER $remote_user; 
  5. fastcgi_pass dev:port; 
  6. }  

最后是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里面有例子,大致是这个样子。

  1. define host{ 
  2. use generic-host ; Name of host template to use 
  3. host_name host 
  4. alias host 
  5. address IP 
  6. }  

我建议你专门弄个文件来管理这些自己的设备,例如我这里叫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里面,将标准配置复制一份,去掉下面一行。这个服务器就不会检查是否活着了。

  1. check_command check-host-alive  

nrpe

nrpe的配置比较繁琐,你首先要在nrpe服务的配置文件中,将需要执行的指令定义好。然后在Nagios的服务这里用check_nrpe检查返回。

参考:http://www.linuxany.com/archives/2004.html

相关内容