EC2 디스크 모니터링
AWS ec2 디스크 모니터링 방법을 찾아보다
쉘스크립트로 비교적 간단해 보이는 방법에 대한 글을 찾았다.
zeddios.tistory.com/123lion-king.tistory.com/entry/AWS-EC2-instance-disk-usage-alert
따라하면서 로그를 남겨본다.
정말 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
완전 잘 동작한다! 굿굿!