我试图通过Nagios使用bash脚本来监控我的EC2 loadblancer。 下面是我试图用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用户configuration了AWS凭证。 但在nagios界面,我总是得到状态“UNKNOWN”。
以下是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_CONFIG_FILE
位置,并且工作正常。