【问题标题】:Nagios/Centreon Error : Return code 127 is out of bounds : Plugin may be missingNagios/Centreon 错误:返回代码 127 超出范围:插件可能丢失
【发布时间】:2015-08-06 09:46:10
【问题描述】:

作为 IT 项目的一部分,我与 Nagios 一起工作。 为了获取温度传感器的值,我创建了一个 python 插件,它将读取数据库中的值,并在屏幕上打印。

问题是当我想监控基于这个插件的服务时,在Centreon网页界面显示为CRITICAL,错误为“(Return code 127 is out of bounds) plugin may be missing”。

这里是我的安装总结:

  • 在 Debian 7.5 上安装 Nagios + NDOutils(+Centreon Web 界面): http://fr.scribd.com/doc/239973292/1-Installation-Manuelle-de-Nagios-Centreon-Debian#scribd

  • 我创建了一个 python 插件“cigne_plugin.py”,它将读取数据库中的值,并在屏幕上打印。

  • /usr/local/nagios/libexec中添加了文件“cigne_python.py

  • 在文件/usr/local/nagios/etc/resource.cfg中,$USER1$宏定义在/usr/local/nagios/libexec

  • /usr/local/nagios/etc/checkcommands.cfg,我添加了这些行:

    define command{
        command_name        arduino_temp_sensor
        command_line        $USER1$/cigne_plugin.py
    }
    
  • /usr/local/nagios/etc/objects/commands.cfg 中,我添加了这些行:

    define command{
        command_name        arduino_temp_sensor
        command_line        $USER1$/cigne_plugin.py
    }
    
  • /usr/local/nagios/etc/objects/localhost.cfg

    define service{
        use             local-service
        host_name           localhost
        service_description     Arduino Temp
        check_command               arduino_temp_sensor
        notification_enabled        0
    }
    
  • 在 Centreon Web 界面中添加命令“arduino_temp_sensor”(配置 -> 命令)

  • 在 Centreon Web 界面中添加服务“Arduino Temp”(配置 -> 服务)

  • 检查文件权限

  • 检查脚本是否可以执行

  • 检查文件所有者

  • 检查用户和组

  • /usr/local/nagios/etc/services.cfg,我的服务是为“localhost”创建的

我尝试使用一个插件版本来注释所有代码,并且只返回一个“sys.exit(2)”,问题不在于代码。

【问题讨论】:

  • /usr/local/nagios/libexec/cigne_plugin.py 的权限是什么。您可以在其上运行 ls -l 并发布结果吗?您的脚本是否调用了其他进程?您如何访问数据库?
  • -rwxr-xr-x 1 nagios nagios 157 Aug 6 11:58 cigne_plugin.py 该脚本目前只执行sys.exit(0)
  • 而且只有 sys.exit(0) 它仍然给出返回码 127?您可以尝试像这样添加一个 shebang 作为 cigne_plugin.py 脚本的第一行:#!/usr/bin/python
  • 是的,它仍然给出返回码127。我已经添加了一个shebang,和你说的一样:#!/usr/bin/python,我也试过#!/usr/bin/env python,给我同样的结果。
  • 我将添加更多故障排除作为答案,只是因为我需要更多空间。这不是目前的最终答案。

标签: python linux debian monitoring nagios


【解决方案1】:

让我们尝试构建 test_wrapper.sh shell 脚本,看看是否存在一些更普遍的问题,或者它是否只是与 python 隔离。

[joe@joeyoung.io libexec]# pwd
/usr/local/nagios/libexec
[joe@joeyoung.io libexec]# cat <<EOF >> test_wrapper.sh
> #!/bin/sh
> echo "OK"
> exit 0
> EOF
[joe@joeyoung.io libexec]# cat test_wrapper.sh
#!/bin/sh
echo "OK"
exit 0
[joe@joeyoung.io libexec]# ls -al test_wrapper.sh
-rw-r--r-- 1 joe joe 27 Aug  6 15:48 test_wrapper.sh
[joe@joeyoung.io libexec]# chmod a+x test_wrapper.sh
[joe@joeyoung.io libexec]# ls -al test_wrapper.sh
-rwxr-xr-x 1 joe joe 27 Aug  6 15:48 test_wrapper.sh
[joe@joeyoung.io libexec]# ./test_wrapper.sh
OK

“OK”表示输出没问题。

[joe@joeyoung.io libexec]# echo $?
0
0

返回码表示返回码没问题。

现在让我们构建一个简单的 test_wrapper.py 以消除 python 代码内容的任何问题。

[joe@joeyoung.io libexec]# cat <<EOF >> test_wrapper.py
> import sys
>
> def main():
>         print "OK"
>         sys.exit(0)
>
> if __name__ == '__main__':
>         main()
> EOF
[joe@joeyoung.io libexec]# cat test_wrapper.py
import sys

def main():
        print "OK"
        sys.exit(0)

if __name__ == '__main__':
        main()
[joe@joeyoung.io libexec]# ls -al test_wrapper.py
-rw-r--r-- 1 joe joe 124 Aug  6 15:58 test_wrapper.py
[joe@joeyoung.io libexec]# chmod a+x test_wrapper.py
[joe@joeyoung.io libexec]# ls -al test_wrapper.py
-rwxr-xr-x 1 joe joe 124 Aug  6 15:58 test_wrapper.py
[joe@joeyoung.io libexec]# python test_wrapper.py
OK

“OK”表示输出没问题。

[joe@joeyoung.io libexec]# echo $?
0
0

返回码表示返回码没问题。

最后让我们添加命令和服务定义,以便我们可以通过 Nagios Web 界面对其进行测试。

修改/usr/local/nagios/etc/objects/commands.cfg

注意:我们只修改一个commands.cfg 文件,这样我们就不会有重复的命令定义来混淆 Nagios。我们暂时忽略checkcommands.cfg

添加:

define command {
        command_name                    sh_test_wrapper
        command_line                    $USER1$/test_wrapper.sh
        register                        1
}
define command {
        command_name                    python_test_wrapper
        command_line                    /usr/bin/python $USER1$/test_wrapper.py
        register                        1
}

修改/usr/local/nagios/etc/objects/localhost.cfg

添加:

define service{
    use             local-service
    host_name           localhost
    service_description     sh test wrapper
    check_command               sh_test_wrapper
    notification_enabled        0
    register                        1
}
define service{
    use             local-service
    host_name           localhost
    service_description     python test wrapper
    check_command               python_test_wrapper
    notification_enabled        0
    register                        1
}

让我们验证配置文件

[joe@joeyoung.io libexec]# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

然后重新启动 Nagios。

[joe@joeyoung.io libexec]# service nagios restart

让我们看看这些非常基本的检查是否有效,看看我们是否不能进一步缩小问题范围。

【讨论】:

  • 好的,我要试试。无论如何,非常感谢您的帮助和回答
  • 这些检查不会出现在 Centreon 和 Nagios 界面中。我做的和你做的一模一样。
  • 奇数。执行 nagios -v /usr/local/nagios/etc/nagios.cfg 时验证步骤报错在哪里?您可以尝试将“注册 1”添加到您的服务定义中,然后重新启动 nagios 服务吗?我会更新答案的文本。
  • 执行nagios -v /usr/local/etc/nagios.cfg时没有错误。已经添加register 1。但是,对于任何用户,当我执行/usr/local/nagios/cigne_plugin.py 时,我会得到:bash: ./cigne_plugin.py: /usr/bin/python^M: bad interpreter: No such file or directory
  • 好的,您的系统上似乎不存在 /usr/bin/python。将 python 脚本的第一行更改为 #!/usr/bin/env python ,这应该可以解决“错误解释器”问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-05
  • 2018-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多