功能强大的Nagios网络监控平台让你可以为其功能增添一系列可用插件。如果你找不到可以满足自身要求的一款插件,也很容易自行编写,本文介绍了如何自行编写插件。

  Nagios插件可以用任何一门编程语言来编写,只要该编程语言在运行Nagios的平台上得到支持。Bash是用来编写Nagios插件的一门流行语言,因为它功能强大、使用简单。

  借助插件进行的每一次有效的Nagios检查(Nagios check)都会生成一个数字表示的退出状态。可能的状态有:

  ● 0--各方面都正常,检查成功完成。

  ● 1--资源处于警告状态。某个地方不太妙。

  ● 2--资源处于临界状态。原因可能是主机宕机或服务未运行。

  ● 3--未知状态,这未必表明有问题,而是表明检查没有给出一个清楚明确的状态。

  插件还能输出文本消息。默认情况下,该消息显示在Nagios web界面和Nagios邮件警报信息中。尽管消息并不是硬性要求,你通常还是可以在可用插件中找到它们,因为消息告诉用户出了什么岔子,而不会迫使用户查阅说明文档。

  用Bash编写的一个简单的Nagios插件类似这样。这个示例插件检查一个指定的文件:

#!/bin/bash

  #将第一个实参($1)指定为文件名

filename=$1

  #先检查该文件是否存在。这是你应该开始的第一个检查,也是基本的检查。

if [ ! -e $filename ]; then
echo "CRITICAL status - file $filename doesn't exist"

  exit 2 #返回临界状态,那是由于你的糟糕情况是该文件根本不存在。

  #如果前一个条件通过(文件存在),那么接下来检查该文件是否可读:

elif [ ! -r $filename ]; then
echo "WARNING status - file $filename is not readable."

  exit 1 #返回警告状态,那是由于该状态胜于根本不存在文件;

  #如果前一个条件通过,检查它是不是一个普通文件,而不是目录或设备文件。

elif [ ! -f $filename ]; then
echo "UNKNOWN status - file $filename is not a file."

  exit 3 #返回未知状态;

  #如果所有上述检查均通过,那么表明它正常:

else
echo "OK status - file is OK"
exit 0 #Return OK status
fi

  注释(Bash中以#开始)解释了代码;如果你需要更清晰的解释,或者想进一步了解Bash的文件测试操作符,请查阅说明文档(http://tldp.org/LDP/abs/html/fto.html)。

  尽管这个实例很简单,但它清楚地表明了如何实现Nagios插件逻辑。始终首先要寻找糟糕的情况。只有当所有检查均通过,脚本退出时才会显示状态正常。确保在退出之前指定明确消息。

  使用插件

  默认情况下,所有的Nagios插件均存放在用$USER1宏命令定义的目录中,具体在文件/etc/nagios/private/resource.cfg中定义。在来自EPEL存储库(http://fedoraproject.org/wiki/EPEL)的典型Nagios安装环境下,$USER1被定义为/usr/lib/nagios/plugins。你对插件应该做的头一件事是,把它拷贝到用$USER1宏命令定义的目录中。插件通常归root所有,其权限设置为755。Nagios在属于nagios群组的用户nagios下工作,所以脚本需要读取和执行其他群组的权限。

  一旦你把脚本放在/usr/lib/nagios/plugins目录中,要在文件/etc/nagios/objects/commands.cfg里面把它定义成Nagios命令。假设你将脚本命名为check_file.sh,添加下列命令定义:

  #我们的自定义文件检查命令:

define command{
command_name    check_file
command_line    $USER1$/check_file.sh $ARG1$
}