nagios 目录结构

假定 nagios 的 root 目录为:
ROOT = /opt/nagios

nagios 的整个目录结构如下:

1. resource.cfg 中定义了一些宏:
$ cat $ROOT/etc/resource.cfg
$USER1$=/usr/local/nagios/libexec

2. commands.cfg 中定义各种命令:
$ cat $ROOT/etc/objects/commands.cfg
define command{
        command_name    xxx
        command_line       xxx
        }

3. contacts.cfg 中定义了联系人:
cat $ROOT/etc/objects/contacts.cfg
define contact{
        name                                        critical-daytime
        host_notifications_enabled      1  
        …
        register                                     0   
       }  

define contact{
        contact_name                    jaseywang-critical-daytime
         …
        email                                  jaseywang # gmail.com
        }  

define contactgroup{
        contactgroup_name       jaseywang-daytime
        alias                               jaseywang-daytime
        members                       jaseywang-critical-daytime
        }

上面的 register 表示可以继承,并不是一个真正的可以使用的 contact。

4. 定义时间段:
$ cat $ROOT/etc/objects/timeperiods.cfg
define timeperiod{
        timeperiod_name 24×7
        alias              24 Hours A Day, 7 Days A Week
        sunday          00:00-24:00
        monday         00:00-24:00
        tuesday         00:00-24:00
        wednesday   00:00-24:00
        thursday        00:00-24:00
        friday             00:00-24:00
        saturday        00:00-24:00
        }  

contactgroup(analytics-daytime) <- contact(wangyuxi-critical-daytime) <- contact(critical-daytime) <- timeperiod(daytime:10:00 – 23:00)
contactgroup 由众多的 contact 构成,cotact 定义了联系邮件等方式,而其继承过来的 contact 定义了一些诸如 host/service 通知的之间段,通知使用的命令等通用选项。时间算的选项则通过 timeperiod 来定义。
Continue reading

Nagios 监控 MongoDB

插件 github 上有现成的:
$ wget -c  https://github.com/mzupan/nagios-plugin-mongodb/zipball/master
$ unzip master -d nagios_plugin_mongodb
$ rm master
$ sudo apt-get install python-dev python-setuptools -y
$ sudo easy_install pymongo
$ cd nagios_plugin_mongodb/mzupan-nagios-plugin-mongodb-59a9247
$ cp check_mongodb.py $NAGIOSROOTPATH/libexec
$ $NAGIOSROOTPATH/libexec/check_mongodb.py -H 192.168.10.42 -P 27017 -A connect -W 1 -C 3

ref:
http://zcentric.com/2010/06/18/mongodb-nagios-plugin-created/

监控网络设备流量

监控网路设备的流量貌似目前只能通过 SNMP 协议实现,在 Nagios 的 exchange 里面找了几个脚本,比如 check_cisco.pl 这个,使用的是 MIB 是 ifInOctets/ifOutOctets,这会导致 32 位溢出的问题,并且该脚本最终的结果是 traffic 的总和,而非当前的速度:
$ ./check_cisco.pl -h 192.168.1.10 -c jaseywang-community -i Gi0/1

另外还有个比较火的脚本叫 chekc_snmp.pl 是通过 snmpget 实现,但是选项的表示方式太二了,其他的做的还不错,不过依然不可以统计速度,只能统计总的流量:-(
$ ./check_snmp.pl -w 9 -c 19 -- -c jaseywang-community 192.168.1.10 -v 2c IF-MIB::ifInOctets.10103

然后就没找到“更好”的了,索性还是自己写吧,先了解了下 SNMP 的一些基础,首先安装客户端:
# apt-get autoremove
# apt-get install snmp

可以使用的版本,1、2c、3,目前主流的应该都支持 2c 这个版本,其 community 就相当于 passwd,最新的网络设备上应该都支持 v3 版本:
$ snmpstatus -v 2c -c jaseywang-community 192.168.1.10
$ snmpstatus -v 1 -c jaseywang-community  192.168.1.10
$ snmpstatus -v 3 -c jaseywang-community  192.168.1.10

Continue reading

Nagios 监控不同的网卡

以一个简单的情况来说明问题,默认情况下,Nagios 只会监控(ping, ssh etc)服务器的某一个 IP,这个特定的 IP 宏 $HOSTADDRESS 解释,而该值来自于 host 定义中的 address 指令。
系统默认定义的 ping command 如下:
define command{
        command_name    check_ping
        command_line    $USER1$/check_ping -H $HOSTADDRESS$ -w $ARG1$ -c $ARG2$ -p 100
        }  

显然,该指令只能监控某一个网卡,或者更具体的说是某一个 IP 的健康状况,如果服务器上有多个 IP,就需要重新定义该命令:
define command{
        command_name    check_ping_new
        command_line    $USER1$/check_ping -H $ARG1$ -w $ARG2$ -c $ARG3$ -p 100
        }  

Continue reading

NRPE 在 xinetd 下的问题

放在 xinet 下的服务,需要在 /etc/services 下写好对应的服务端口传输协议,尤其是修改了默认端口的情况下,以 nrpe 为例:
# tail /etc/services
nrpe                    11111/tcp                               # NRPE

否则启动服务的时候会出现如下类似的错误:
Jul  2 14:31:45 jaseywang xinetd[30992]: Service nrpe expects port 5666, not 11111
Jul  2 14:31:45 jaseywang xinetd[30992]: xinetd Version 2.3.14 started with libwrap loadavg labeled-networking options compiled in.
Jul  2 14:31:45 jaseywang xinetd[30992]: Started working: 0 available services
Jul  2 14:35:09 jaseywang ntpdate[31027]: no server suitable for synchronization found
Jul  2 14:40:10 jaseywang ntpdate[31579]: no server suitable for synchronization found
Jul  2 14:43:59 jaseywang xinetd[30992]: Exiting…

Continue reading

nagios 故障一则

在 nrpe 里面定义了几个新 command,然后在 master 里面添加相应的 service,重启 nagios,会发现大量的 Warning:
$ tail -f nagios.log | grep Warning
[1342846503] Warning: Check result queue contained results for service 'xxx' on host 'yyy', but the service could not be found!  Perhaps you forgot to define the service in your config files?
[1342846503] Warning: Check result queue contained results for service 'xxx' on host 'yyy', but the service could not be found!  Perhaps you forgot to define the service in your config files?

通过 web 查看新增的 service,会发现该 service 在交替着出现消失。根据这篇博客的记录,跟作者的情况一模一样,起了两个 nagios instance,全部杀掉,启动一个即可。