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 帮助了