Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Nagios-bash脚本的状态未知_Linux_Bash_Amazon Ec2_Nagios_Ec2 Api Tools - Fatal编程技术网

Linux Nagios-bash脚本的状态未知

Linux Nagios-bash脚本的状态未知,linux,bash,amazon-ec2,nagios,ec2-api-tools,Linux,Bash,Amazon Ec2,Nagios,Ec2 Api Tools,我正在尝试使用bash脚本通过Nagios监视我的EC2 LoadBlancher。下面是我试图用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-

我正在尝试使用bash脚本通过Nagios监视我的EC2 LoadBlancher。下面是我试图用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主机上使用时脚本无法给出结果。请帮助解决这个问题

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

通过在脚本中运行
/usr/bin/aws elb description instance health--region${aws_region}--负载平衡器名称${LB_name}--profile${profile}>/tmp/check_elb_sts.log 2>&1进行调试,并在Nagios运行服务检查后检查日志。感谢您的调试建议。实际上,问题在于脚本如何无法找到aws配置文件。现在它工作了:)太好了!您可以将其作为答案发布,并接受您自己的答案,这样问题就不会一直悬而未决:-)