我如何使Nagios服务的状态信息更易读?

我在有几台服务器的环境中运行Nagios,每台服务器上都有几个服务。 有一些自定义的检查,但如果可能的话,使用现有的检查是很好的。 我正在使用NRPE插件检查check_disk来检查每个安装的文件系统的利用率:

command[check_all_disks]=/usr/lib/nagios/plugins/check_disk -w 10% -c 5% -p / -p /var -C -u GB -w 200 -c 100 -r '^/mounts[^/]+$' 

将这些全部检查为单个服务(“磁盘”)很方便,但是当其中一个进入警告模式时,很难在状态信息行中读取输出:

 DISK WARNING - free space: / 6 GB (9% inode=92%): /var 125 GB (67% inode=99%): /mounts/vol0 1152 GB (16% inode=99%): /mounts/vol1 1096 GB (15% inode=99%): /mounts/vol2 126 GB (1% inode=99%): /mounts/vol3 228 GB (3% inode=99%): /mounts/vol4 3245 GB (44% inode=99%): /mounts/vol5 108 GB (1% inode=99%): 

在上面的情况中,检查是警告的,因为/,/ mounts / vol2和/ mounts / vol5低于阈值。 操作员必须通过每个值来查找超过设定值的值。 另外,如果一个人批评了他人,另一个人则警告他们,把他们标出来,或者把他们放在不同的线上,这样做会很好。

有没有一个简单的方法来做到这一点,而不是为每个挂载点创build一个新的命令? 还是我想念一些Nagios魔法的其他基本方法来使这种友好?

尝试使用–errors-only标志 ,这应该大大减less这个插件吐出的文本的数量。

  -e, --errors-only Display only devices/mountpoints with errors 

这似乎为我做了诡计。 注意输出的巨大差异:

 # /usr/lib64/nagios/plugins/check_disk -w 20% -c 10% DISK WARNING - free space: / 37167 MB (96% inode=98%); /dev/shm 244 MB (100% inode=99%); /boot 84 MB (18% inode=99%); /home 21253 MB (99% inode=99%); 

但是有了--errors-only标志,现在很清楚我的问题是在/boot

 # /usr/lib64/nagios/plugins/check_disk -w 20% -c 10% --errors-only DISK WARNING - free space: /boot 94 MB (20% inode=99%); 

如果系统没有问题,则输出很短:

 # /usr/lib64/nagios/plugins/check_disk -w 20% -c 10% --errors-only DISK OK 

(注意:为清楚起见,我已经删除了所有内容,Nagios Web界面在屏幕上显示之前也会对此输出进行修剪。)

另请参阅关于Debian bugtacker的讨论: nagios2:以难以理解的方式抱怨磁盘空间 。

标准的方法是把所有东西都放在一条线上。 你只有两个select:

  • 定义一个检查每个磁盘(我知道不是你想要的,但我仍然觉得这是最好的解决scheme)

  • 编写你自己的插件或者parsing输出的check_disks的包装器,例如你可以把磁盘放在状态行的阈值以下,或者缩短输出,只包含相关的磁盘。

你可以用任何语言编写包装器,但是我会build议一个脚本语言(比如Perl)。 有关于如何开发插件的指导: http : //nagiosplug.sourceforge.net/developer-guidelines.html

正如@Matteo提到的,我想也应该为每个分区定义一个检查。 但是下面是一个按照降序对磁盘使用进行sorting的包装示例:

 check_disk -w 20% -c 10% -p /dev/sda1 -p /dev/sdb2 -p /dev/sdb4 | awk -F"|" '{ print $1 }' | awk -F": " '{ print $2 }' | \ tr ";" "\n" | sed 's/^ //' | sort -k4,4n 

PS:我的check_disk插件返回一个由…隔开的列表; 而不是:如你所示。

你可能会考虑check_multi ,它结合了显示单个状态行的能力,以及通过每个磁盘独立检查来查看更多细节的能力。 你可以从截图中看到它是如何为你工作的。 在磁盘检查的例子中,你会有一个check_multi检查,显示“1警告,2确定”,当你点击该服务,你会看到3个单独的检查,显示哪个磁盘警告与该磁盘的详细信息特别是在还清楚地显示另外两个的情况下。