Nagios 自定义插件调用 python Openstack Swift 客户端
Nagios custom plugin calling python Openstack Swift client
我想用 NAGIOS 检查我的服务器是否可以连接到 Openstack Swift 容器。我写了一个简单的脚本,我使用 Swift Python 客户端获取容器 stat
脚本看起来像那样
#!/bin/bash
set -e
STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2
STATE_UNKNOWN=3
STATE_DEPENDENT=4
if ! which /usr/bin/swift >/dev/null 2>&1
then
echo "Swift command not found"
exit $STATE_UNKNOWN
fi
my_swift="/usr/bin/swift -V 2.0 -A http://my-swift-domain.com:5000/v2.0/ --insecure --os-username my-user-name --os-password my-password --os-tenant-name tenant-name stat container"
output=`$my_swift | grep Objects | sed 's/Objects:\s*\([0-9]*\).*//'`
if [ "$output" -eq "$output" ] 2>/dev/null
then
echo "successfully connected to swift. Number of objects in container $output";
exit $STATE_OK
else
echo "Number of container objects is not correct";
exit $STATE_CRITICAL
fi
脚本具有正确的权限,NAGIOS 能够正确地运行它。从 bash 调用的脚本本身有效并且 returns 类似于:
successfully connected to swift. Number of objects in container 4973123
但是当我通过 nrpe 运行 它时却没有。我通过 运行ning /usr/lib64/nagios/plugins/check_nrpe -H 127.0.0.1 -c check_swift
检查过
我刚得到 Number of container objects is not correct
调试后我很确定命令
output=`$my_swift | grep Objects | sed 's/Objects:\s*\([0-9]*\).*//'`
甚至没有被调用。
我试着把 swift --version
放在那里只是为了看看它是否会给我一些输出,它确实如此。所以,它让我认为参数有问题,但我真的不知道是什么,因为在 shell 中调用的命令本身工作得很好。
感谢任何帮助:)
尝试为此更改第一行:
#!/usr/bin/env bash
原来是SELinux(在CentOS上)因为文件上下文错误而阻止了命令的执行。我将文件从主目录复制到 Nagios 的插件目录。
restorecon check_swift_container -v
帮助了
我想用 NAGIOS 检查我的服务器是否可以连接到 Openstack Swift 容器。我写了一个简单的脚本,我使用 Swift Python 客户端获取容器 stat
脚本看起来像那样
#!/bin/bash
set -e
STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2
STATE_UNKNOWN=3
STATE_DEPENDENT=4
if ! which /usr/bin/swift >/dev/null 2>&1
then
echo "Swift command not found"
exit $STATE_UNKNOWN
fi
my_swift="/usr/bin/swift -V 2.0 -A http://my-swift-domain.com:5000/v2.0/ --insecure --os-username my-user-name --os-password my-password --os-tenant-name tenant-name stat container"
output=`$my_swift | grep Objects | sed 's/Objects:\s*\([0-9]*\).*//'`
if [ "$output" -eq "$output" ] 2>/dev/null
then
echo "successfully connected to swift. Number of objects in container $output";
exit $STATE_OK
else
echo "Number of container objects is not correct";
exit $STATE_CRITICAL
fi
脚本具有正确的权限,NAGIOS 能够正确地运行它。从 bash 调用的脚本本身有效并且 returns 类似于:
successfully connected to swift. Number of objects in container 4973123
但是当我通过 nrpe 运行 它时却没有。我通过 运行ning /usr/lib64/nagios/plugins/check_nrpe -H 127.0.0.1 -c check_swift
检查过
我刚得到 Number of container objects is not correct
调试后我很确定命令
output=`$my_swift | grep Objects | sed 's/Objects:\s*\([0-9]*\).*//'`
甚至没有被调用。
我试着把 swift --version
放在那里只是为了看看它是否会给我一些输出,它确实如此。所以,它让我认为参数有问题,但我真的不知道是什么,因为在 shell 中调用的命令本身工作得很好。
感谢任何帮助:)
尝试为此更改第一行:
#!/usr/bin/env bash
原来是SELinux(在CentOS上)因为文件上下文错误而阻止了命令的执行。我将文件从主目录复制到 Nagios 的插件目录。
restorecon check_swift_container -v
帮助了