2014-03-14 2 views
2

bash 스크립트를 사용하여 Nagios를 통해 EC2 loadblancer를 모니터링하려고합니다. 아래는 Nagios로 구현하려고하는 스크립트입니다.Nagios - 상태 알 수 없음 bash 스크립트

#!/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 인터페이스에서 나는 항상 "UNKNOWN"상태를 유지하고 있습니다.

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

내가 다른 호스트에서 NRPE로 사용하고 같은 스크립트와 내가 수 있어요 : 아래

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

호스트 파일에 대한 코드 command.cfg 코드입니다 결과를 얻을 수 있습니다 : nrpe.cfg에 대한

코드를

command[check_elb_sts]=/usr/local/nagios/libexec/check_elb_status.sh 
Nagios의 호스트에서 사용하는 동안 스크립트가 결과를 줄 수없는 이유를
define service{ 
    use generic-service 
    host_name xxx 
    service_description Prod ELB Status 
    check_command check_nrpe!check_elb_sts 
} 

이 몰라 호스트 파일 (3210)

코드입니다. 문제를 해결하는 데 도움을주십시오.

+1

'/ usr/bin/aws elb describe-instance-health --region $ {AWS_REGION} -로드 밸런서 이름 $ {LB_NAME} --profile $ {프로필} >>/tmp/check_elb_sts를 실행하여 디버그하십시오. .log 2> & 1' 스크립트를 실행하고 Nagios가 서비스 체크를 실행 한 후 로그를 확인하십시오. –

+1

디버깅 제안에 감사드립니다. 실제로 문제는 스크립트가 aws 설정 파일을 찾을 수없는 방법이었습니다. 이제 작동 중입니다. – linuxnewbee

+0

좋아요! 답변을 답변으로 게시하고 나만의 답변을 수락 할 수 있으므로 질문이 답변되지 않은 상태로 계속 떠 다니지 않습니다. –

답변

2

어떻게 든 bash 스크립트는 AWS cli의 구성 파일을 찾을 수 없었습니다. 이제 bash 스크립트에서 AWS_CONFIG_FILE 위치를 구성 했으므로 제대로 작동합니다.