"How To" 用于向 Nagios 添加插件

"How To" for adding a plugin to Nagios

是否有 "how to" 用于向 Nagios 添加和配置插件? (具体针对 Ubuntu 14.04,但任何 Linux OS 都会有所帮助。)

到目前为止我已经拼凑了这么多:

  1. 将脚本放在 /usr/local/nagios/libexec/ 中。 (在我的例子中,已经有一个我想使用的脚本:"check_file_age"。)
  2. 编辑 /usr/local/nagios/etc/objects/commands.cfg 添加插件。
define command{  
    command_name check_file_age  
    command_line $USER1$/check_file_age -w $ARG1$ -c $ARG2$ -W $ARG3$ -C $ARG4$ -f $ARG5$ 
}
  1. 在/usr/local/nagios/etc/objects/localhost.cfg.
  2. 中定义插件
define service{
    use             generic-service     ; Name of service template to use
    host_name           localhost
    service_description     File Age
    check_command           check_file_age
    notifications_enabled       1
}

现在我可以在 "Configuration -> Object Type: Command" 下看到插件,并且可以在 "Configuration -> Object Type: Services" 中看到它。

插件从命令行运行成功:

user@host:/usr/local/nagios/libexec$ perl ./check_file_age -w 3600 -c 5400 -W -1 -C -1 -f somefile.txt 
FILE_AGE OK: somefile.txt is 2932 seconds old and 59 bytes | age=2932s;3600;5400 size=59B;-1;-1;0

然后在这一点上我被难住了。我可以在服务中看到此错误:

File Age
CRITICAL    
09-09-2015 14:24:21 
0d 0h 32m 1s    
3/3 
(No output on stdout) stderr: Can't locate utils.pm in @INC (you may need to install the utils module) (@INC contains: . /etc/perl /usr/local/lib/perl/5.18.2 /usr/local/share/perl/5.18.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.18 /usr/share/perl/5.18 /usr/local/lib/site_perl) at /usr/local/nagios/libexec/check_file_age line 30. 
HTTP
Notifications for this service have been disabled
OK  09-09-2015 14:30:53 0d 4h 3m 30s    1/4 

如何指定要传递的参数?我该如何更正错误?下一步是什么? (是否有一个位置描述了如何添加逃脱我的 Google-fu 的插件?)

问题 1:

check_file_age 插件是一个 perl 脚本,需要另一个名为 utils.pm 的 perl 模块。它们都在同一个文件夹中吗?如果没有,找到utils.pm:

的位置
find / -name "utils.pm" -type f

您需要将包含 utils.pm 的文件夹的路径添加到您的 $PERL5LIB 环境变量中,以供您的 nagios 用户或 运行 nagios 守护程序服务的任何用户使用。

获取 utils.pm 文件夹的路径并将其添加到我们将放置在 /etc/profile.d/ 文件夹中的 shell 脚本中。例如,如果你的 find 命令的结果是 /usr/local/nagios/libexec/utils.pm 然后执行这样的事情:

echo "export PERL5LIB=$PERL5LIB:/usr/local/nagios/libexec" >> /etc/profile.d/nagiosplugins.sh
chmod a+x /etc/profile.d/nagiosplugins.sh
source /etc/profile

运气好的话,应该可以解决 Can't locate utils.pm in @INC 错误。

问题 2:

您需要修复服务定义以将预期参数传递给 check_file_age。传递到服务定义的 check_command 字段的参数跟在命令名称之后,并由 ! 感叹号分隔。将 /usr/local/nagios/etc/objects/localhost.cfg 中的 File age 服务定义修改为如下所示:

define service {
    use             generic-service     ; Name of service template to use
    host_name           localhost
    service_description     File Age
    check_command           check_file_age!3600!5400!200!100!somefile.txt
    notifications_enabled       1
}

好的,现在是时候验证您的配置文件没有任何错误了:

nagios -v /usr/local/nagios/etc/nagios.cfg

(...或您的 nagios.cfg 文件的正确路径)

如果没有错误,重启你的nagios服务:

service nagios restart

在 CentOS 6.9 上,我可以通过重新安装提供文件的 rpm 包来解决问题:

yum reinstall /usr/lib64/nagios/plugins/utils.pm

您可以在日志中找到答案的第一部分:

(No output on stdout) stderr: Can't locate utils.pm in @INC (you may need to install the utils module) (@INC contains: . /etc/perl /usr/local/lib/perl/5.18.2 /usr/local/share/perl/5.18.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.18 /usr/share/perl/5.18 /usr/local/lib/site_perl) at /usr/local/nagios/libexec/check_file_age line 30. 

您需要确保默认用户宏 $USER1 是正确的,它包含您的插件的路径。根据 Nagios 文档:

定义用户宏

用户宏可以在 resource.cfg 中定义,配置文件位于 /usr/local/nagios/etc/。默认情况下,您的 resource.cfg 应包含:

# Path to the plugins
$USER1$=/usr/local/nagios/libexec

在 CentOS 7 上,我不得不将路径更改为 /usr/libexec/nagios,同样的错误消失了。