2

我正在尝试使用 bash 脚本通过 Nagios 监控我的 EC2 负载均衡器。下面是我试图用 Nagios 实现的脚本。

#!/bin/sh

ST_OK=0
ST_WR=1
ST_CR=2
ST_UK=3


LB_NAME="xxx"
AWS_REGION="us-west-2"
PROFILE="default"


CMD=$(/usr/bin/aws elb describe-instance-health --region ${AWS_REGION} --load-balancer-name ${LB_NAME} --profile ${PROFILE})

if [ $? -eq 0 ]; then

    IN_SERVICE_COUNT=$(echo ${CMD} | jq -c '.InstanceStates[].State' | grep InService |wc -l)
    TOTAL_COUNT=$(echo ${CMD} | jq -c '.InstanceStates[].State' | wc -l)

    if [ ${IN_SERVICE_COUNT} -eq 0 ]; then
                    NAGIOS_STATE=CRITICAL
                    EXIT_CODE=$ST_CR
    elif [ ${TOTAL_COUNT} -eq ${IN_SERVICE_COUNT} ]; then
                    NAGIOS_STATE=OK
                    EXIT_CODE=$ST_OK
    elif [ ${IN_SERVICE_COUNT} -lt ${TOTAL_COUNT} ]; then
                    NAGIOS_STATE=WARNING
                    EXIT_CODE=$ST_WR
    fi
    echo "${NAGIOS_STATE}: ELB:${LB_NAME} is running fine. Total #instances:${TOTAL_COUNT} Healthy instances:${IN_SERVICE_COUNT}"
    else
    echo "Failed to retrieve ELB Instances health from AWS"
    EXIT_CODE=$ST_UK
fi
exit ${EXIT_CODE}

上面的脚本在手动运行时对我来说工作正常。我也用 nagios 用户运行它,我能够得到如下结果:

OK: ELB:xxx is running fine Total:18 Healthy:18

所以,我认为没有任何权限问题。我已经为 nagios 用户配置了 AWS 凭证。但是在 nagios 界面中,我总是得到状态“未知”。

下面是 command.cfg 的代码

define command {
    command_name    check_elb_status
    command_line    /usr/local/nagios/libexec/check_elb_status.sh
}

下面是主机文件的代码:

define service{
    use generic-service
    host_name Prod-ELB
    service_description Prod ELB Status
    check_command check_elb_status
}

我与来自不同主机的 NRPE 一起使用的相同脚本,我能够得到结果:

nrpe.cfg 的代码

command[check_elb_sts]=/usr/local/nagios/libexec/check_elb_status.sh

主机文件代码

define service{
   use generic-service
   host_name xxx
   service_description Prod ELB Status
   check_command check_nrpe!check_elb_sts
}

不知道为什么脚本在 Nagios 主机上使用时无法给出结果。请帮助解决问题。

4

1 回答 1

2

不知何故,bash 脚本无法找到 AWS cli 的配置文件。现在我已经AWS_CONFIG_FILE在 bash 脚本中配置了位置,它工作正常。

于 2014-03-14T09:52:36.383 回答