我在多台服务器的环境中运行 Nagios,每台服务器都运行着多项服务。有一些自定义检查,但如果可能的话,最好使用现有的检查。我使用 NRPE 插件检查检查磁盘检查每个已安装的文件系统的利用率:
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 低于阈值。操作员必须仔细检查每个值才能找到超出设定水平的值。此外,如果其中一个为严重,而其他为警告,最好以不同的方式显示它们,方法是标记它们,或将它们放在不同的行上。
有没有一种简单的方法可以做到这一点,而无需为每个挂载点创建新命令?还是我错过了 Nagios magic 的其他一些基本方法来使它变得友好?
答案1
尝试--errors-only 标志这应该会大大减少该插件输出的文本量。
-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:以难以理解的方式抱怨磁盘空间不足。
答案2
标准方法是将所有内容放在一行上。你只有两个选择:
为每个磁盘定义一个检查(我知道这不是你想要的,但我仍然认为这是最好的解决方案)
编写您自己的插件或围绕 check_disks 的包装器来解析输出:然后您可以将低于阈值的磁盘放在状态行中,或者缩短输出以仅包含相关磁盘。
你可以用任何语言编写包装器,但考虑到任务,我建议使用脚本语言(例如,Perl)。以下是有关如何开发插件的指南:http://nagiosplug.sourceforge.net/developer-guidelines.html
答案3
正如@Matteo 提到的,我也认为你应该为每个分区定义一个检查。但这里有一个包装器示例,用于按降序对磁盘使用情况进行排序:
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
分隔的列表,正如您所展示的。;
: