TroubleShooting

[ECS] ecs-agent 프로세스 모니터링

[앙금빵] 2024. 6. 16.

이슈

멀티컨테이너 식으로 운영되는 개발서버 경우 비용절감을 위해 특정시간 외 다른 시간대는 EC2 Stop/Start를 진행중에 있다. 그러나 간헐적으로 ecs-agent가 정상적으로 죽는 현상 발생이 발생하여 클러스터 내 모든 ECS Service들이 동작하지 않아 확인을 해야하는 상황이 발생하였다.

 

이슈원인은 대체적으로 ecs-agent가 제대로 동작하지 않아 발생한 이슈이고 자체적으로 재시작기능을 내재하고 있음에도 불구하고 간헐적으로 제대로 동작하고 있지 않았다.

 

ecs.log에 마땅한 로그가 남지 않아 Case Open을 진행하여도 근본적인 원인을 찾기는 어려웠다.

그렇기에 ecs-agent 프로세스 모니터링을 직접 만들어 해결을 진행하였다.

 

해결

(1) 매 분 "systemctl is-active ecs" 명령어를 통해 1분 주기로 active 상태 확인 (Crontab 등록)

(2) 만약, active 상태가 아닐 경우 ecs agent 시작 후 슬랙으로 관련 알람 발송

 

Bash 스크립트

#!/bin/bash

LOG_FILE="/<your-script-path>/ecs_agent_monitor.log"
SLACK_WEBHOOK_URL="<your-slack-url>"
IMAGE_URL="https://www.tothenew.com/blog/wp-ttn-blog/uploads/2016/04/integrations_awsecs@4x-500x500.png"

# 슬렉 메세지 전송
send_slack_message() {
    local MESSAGE=$1
    local MESSAGE_TIME=$2
    local TAG_NAME=$3
    local PRIVATE_IP=$4
    local PAYLOAD=$(cat <<EOF2
{
    "username": "ecs-process 알람",
    "icon_url": "$IMAGE_URL",
    "attachments": [
        {
            "fallback": "$MESSAGE",
            "color": "#FF0000",
            "text": "$MESSAGE",
            "fields": [
                {"title": "발생시각", "value": "$MESSAGE_TIME", "short": true},
                {"title": "인스턴스 명", "value": "$TAG_NAME", "short": true},
                {"title": "Private IP", "value": "$PRIVATE_IP", "short": true}
            ]
        }
    ]
}
EOF2
    )
    curl -X POST -H 'Content-type: application/json' --data "$PAYLOAD" $SLACK_WEBHOOK_URL
}

# 인스턴스 정보
INSTANCE_ID=$(curl -s http://169.254.169.254/latest/meta-data/instance-id)
PRIVATE_IP=$(curl -s http://169.254.169.254/latest/meta-data/local-ipv4)
TAG_NAME=$(aws ec2 describe-instances --instance-ids $INSTANCE_ID --query 'Reservations[0].Instances[0].Tags[?Key==`Name`].Value' --output text)

# ECS Agent 상태체크
ECS_STATUS=$(systemctl is-active ecs)

if [ "$ECS_STATUS" != "active" ]; then
    systemctl start ecs
    MESSAGE_TIME=$(date '+%Y-%m-%d %H:%M:%S KST')
    MESSAGE="ECS agent inactive 상태 확인 프로세스 재시작 완료."
    echo $MESSAGE >> $LOG_FILE
    send_slack_message "$MESSAGE" "$MESSAGE_TIME" "$TAG_NAME" "$PRIVATE_IP"
fi

 

슬랙 알람 사진

댓글