Nagios/Centreon Error : Return code 127 is out of bounds : Plugin may be missing
Nagios/Centreon Error : Return code 127 is out of bounds : Plugin may be missing
作为 IT 项目的一部分,我使用了 Nagios。
为了获得温度传感器的值,我创建了一个 python 插件,它将读取数据库中的值,并打印在屏幕上。
问题是当我想监控基于这个插件的服务时,在Centreon web界面显示为CRITICAL,错误为“(Return code 127 is out of bounds) plugin may be missing
” .
以下是我的安装摘要:
Nagios + NDOutils (+Centreon Web Interface) 在 Debian 7.5 上安装:
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"
创建的
我尝试使用插件版本注释所有代码,但只有 returns 一个“sys.exit(2)
”,问题不是来自代码。
让我们尝试构建 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
Return 0 的代码 表明 return 代码没问题。
现在让我们构建一个基本框架 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
Return 0 的代码 表明 return 代码没问题。
最后让我们添加命令和服务定义,以便我们可以通过 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
让我们看看这些非常基本的检查是否有效,看看我们是否可以进一步缩小问题范围。
作为 IT 项目的一部分,我使用了 Nagios。 为了获得温度传感器的值,我创建了一个 python 插件,它将读取数据库中的值,并打印在屏幕上。
问题是当我想监控基于这个插件的服务时,在Centreon web界面显示为CRITICAL,错误为“(Return code 127 is out of bounds) plugin may be missing
” .
以下是我的安装摘要:
Nagios + NDOutils (+Centreon Web Interface) 在 Debian 7.5 上安装: http://fr.scribd.com/doc/239973292/1-Installation-Manuelle-de-Nagios-Centreon-Debian#scribd
我创建了一个 python 插件“
cigne_plugin.py
”,它将读取数据库中的值,并打印在屏幕上。在
/usr/local/nagios/libexec
中添加了文件“在文件
/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" 创建的
cigne_python.py
”
我尝试使用插件版本注释所有代码,但只有 returns 一个“sys.exit(2)
”,问题不是来自代码。
让我们尝试构建 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
Return 0 的代码 表明 return 代码没问题。
现在让我们构建一个基本框架 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
Return 0 的代码 表明 return 代码没问题。
最后让我们添加命令和服务定义,以便我们可以通过 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
让我们看看这些非常基本的检查是否有效,看看我们是否可以进一步缩小问题范围。