기술 단어장/CICD
[자동화] Docker 및 Spring Boot 헬스 체크 및 MS teams 알림 설정
MFDO
2025. 3. 7. 18:00
Docker 컨테이너가 죽거나
Spring Boot 서버가 죽으면
teams에 알림이 왔으면 좋겠다는 요청을 받았다.
워크플로 생성
희망 채널을 선택하고 워크플로를 생성하자
아래 이미지에 표시된 설정 클릭
생성 완료!
아주 간단하다. 주소를 복사해두자
요청 테스트
간단히 요청을 보내보려 했는데,
요청 양식이 있다는 것을 알았다.
요청 시 아래 양식을 지키지 않는다면 오류가 난다.
{
"text": "경고 메시지 타이틀",
"attachments": [
{
"contentType": "application/vnd.microsoft.card.adaptive",
"content": {
"$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
"type": "AdaptiveCard",
"version": "1.2",
"body": [
{
"type": "TextBlock",
"size": "Medium",
"weight": "Bolder",
"text": "여기에 도커 컨테이너 이름(컨테이너 번호)혹은 스프링서버 오류라는 문구"
},
{
"type": "TextBlock",
"text": "컨테이너 로그 마지막 10줄 출력하기",
"wrap": true
}
]
}
}
]
}
여기로 나도 알았다
Power Platform Community Forum Thread Details
community.powerplatform.com
스크립트 작성
#!/bin/bash
# MS Teams Webhook URL
TEAMS_WEBHOOK_URL="웹훅 주소"
# Spring Boot 헬스체크 URL
SPRING_BOOT_URL="헬스체크 주소"
while true; do
# 초기 변수 설정
ALERT_TITLE="경고 메시지"
ALERT_DETAILS=""
# 중지된 컨테이너 확인
STOPPED_CONTAINERS=$(docker ps -a --filter "status=exited" --format "{{.Names}}")
if [ -n "$STOPPED_CONTAINERS" ]; then
for CONTAINER in $STOPPED_CONTAINERS; do
LAST_LOGS=$(docker logs --tail 10 "$CONTAINER" 2>&1 | sed 's/"/\\"/g')
ALERT_TITLE="${CONTAINER} 컨테이너 중지"
ALERT_DETAILS="${LAST_LOGS}"
break # 첫 번째 중지된 컨테이너만 처리
done
fi
# Spring Boot 상태 체크
SPRING_BOOT_RESPONSE=$(curl -s -X GET $SPRING_BOOT_URL)
SPRING_BOOT_STATUS=$(echo "$SPRING_BOOT_RESPONSE" | grep -o '"state":true')
if [ "$SPRING_BOOT_STATUS" != '"state":true' ]; then
ALERT_TITLE="Spring Boot 서버 오류"
ALERT_DETAILS="서버 오류가 발생해 해당 서버를 재가동 하였으며, 1분 내로 정상 작동이 될 예정입니다."
# Spring Boot 서버 재시작
docker restart tih-spring
fi
# 메시지 전송 여부 확인
if [ -n "$ALERT_DETAILS" ]; then
# Adaptive Card JSON 생성
PAYLOAD=$(cat <<EOF
{
"text": "$ALERT_TITLE",
"attachments": [
{
"contentType": "application/vnd.microsoft.card.adaptive",
"content": {
"\$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
"type": "AdaptiveCard",
"version": "1.2",
"body": [
{
"type": "TextBlock",
"size": "Medium",
"weight": "Bolder",
"text": "$ALERT_TITLE"
},
{
"type": "TextBlock",
"text": "$ALERT_DETAILS",
"wrap": true
}
]
}
}
]
}
EOF
)
# MS Teams Webhook 전송
curl -H "Content-Type: application/json" -d "$PAYLOAD" "$TEAMS_WEBHOOK_URL"
fi
# 1분 대기 후 다시 실행
sleep 60
done
검증
의도적으로 종료해보았다
끝끝~
스크립트 백그라운드 동작
백그라운드 구동
nohup ./healthCheck.sh &
상태확인
ps aux | grep healthCheck.sh
crontab 설정
스크립트 재부팅 시에도 동작을 위함
구성 설정
crontab -e
설정 내용
* * * * * /usr/bin/flock -n /tmp/healthCheck.lock /파일경로/healthCheck.sh
아유 알차~