클라우드

EC2 디스크 모니터링

스마트큐브 2021. 1. 8. 11:38

AWS ec2 디스크 모니터링 방법을 찾아보다 

쉘스크립트로 비교적 간단해 보이는 방법에 대한 글을 찾았다. 

zeddios.tistory.com/123lion-king.tistory.com/entry/AWS-EC2-instance-disk-usage-alert

 

(AWS/CloudWatch) EC2 인스턴스 디스크 사용량 알림/모니터링 구현

EC2 인스턴스 디스크 사용량 알림 모니터링 Node 서버에서 root 경로에 로그가 제한없이 계속 쌓여 용량을 다 사용해버려서 배포가 막히는 이슈가 발생하였습니다... 따로 마운트 해준 EBS 볼륨에 쌓

lion-king.tistory.com

따라하면서 로그를 남겨본다. 

정말 Add App 하나 찾는것 부터도 헤깔린다 -_-;;

시키는데로 imcoming webhooks 까지 왔다. 

Add 를 눌러보니 사용설명에 대한 것과 hook url 이름 & 아이콘 변경 화면이 나온다. 

1. 메시지 보내기 : 대략 json 형태로 post 로 실어서 호출하면 된다는 내용 

2. 링크 추가하기 : 링크는 어떻게 보내면 된다는 내용 

3. 아이콘 커스터마이징 : 메시지 아이콘 어떻게 보내는지에 대한 내용 

curl -X POST --data-urlencode "payload={\"channel\": \"#general\", \"username\": \"webhookbot\", \"text\": \"This is posted to #general and comes from a bot named webhookbot.\", \"icon_emoji\": \":ghost:\"}" https://hooks.slack.com/services/<url>


실제 curl 명령어를  bash 쉘에서 테스트 해보니 메시지가 잘 도착한다.

이제 쉘스크립트 작성! 
 :  monitor.sh 로 하나 만든다 

#!/bin/sh
IP=$(hostname -I);
LIMIT=90;
root_disk_used=$(df / | grep ^/ | awk '{print $5}');
root_disk_used=${root_disk_used::-1};
test $LIMIT -lt $root_disk_used && curl -X POST --data-urlencode "payload={\"channel\": \"#general\", \"username\": \"webhookbot\", \"text\": \"Usage of disk is in danger. IP: $IP ROOT_DISK_USAGE: $root_disk_used % <https://ap-southeast-2.console.aws.amazon.com/ec2/v2/home?region=ap-southeast-2#Instances:search=$IP |Click here to go AWS EC2 Instance > \"}" https://hooks.slack.com/services/{슬랙 웹 훅 url};

mount_disk_used=$(df /pds | grep ^/ | awk '{print $5}');
mount_disk_used=${mount_disk_used::-1};
test -z $mount_disk_used || test $LIMIT -lt $mount_disk_used && curl -X POST --data-urlencode "payload={\"channel\": \"#general\", \"username\": \"webhookbot\", \"text\": \"Usage of disk is in danger. IP: $IP MOUNT_DISK_USAGE: $mount_disk_used % <https://ap-southeast-2.console.aws.amazon.com/ec2/v2/home?region=ap-southeast-2#Instances:search=$IP |Click here to go AWS EC2 Instance > \"}" {슬랙 웹 훅 url};

쉘 스크립트 내용을 짧게 보자면

df 의 결과를 기반으로 /  파티션과  , /pds 파티션 용량이 90% 넘으면 슬랙으로 메시지를 보낸다는 내용이다.  
참고로 나는 ec2 가 시드니에 있어서 리젼이 southeast 이다. 

더보기

** 어라 centos 타입에서 쉘스크립트 서브스트링 부분이 0보다 작다고 작동을 안하는 상황이 생겼다. 

그래서 % 를 공백으로 replace 하는 구문으로 바꿔서 실행하였다. 

root_disk_used=${root_disk_used/\%/''};   이런식으로

이제 crontab -e  편집해서 30분 단위로 등록해둔다 

# 분(0-59)  시간(0-23) 일(1-31)  월(1-12)   요일(0-7)
*/30	*	*	*	*	 source /etc/profile;/home/ec2-user/monitor.sh


완전 잘 동작한다!  굿굿!