본문 바로가기

Management/CloudWatch

AWS CloudWatch 알람 생성 스크립트

전체 구성된 EC2 Instance에 CPU 70% 이상 알람 생성(사전 CloudWatch Role 필요)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#!/bin/bash
#CREATE SNS TOPIC
##name에 사용할 SNS 이름 등록
$(aws sns create-topic --name xxxx-topic)
 
#CREATE SUBSCRIBE
##topic-arn에 생성한 accountID:topic이름설정 / e-mail 등록 다수 등록 시 아래  명령어 추가
$(aws sns subscribe --topic-arn arn:aws:sns:ap-northeast-2:5576xxxx:xxxx-topic --protocol email --notification-endpoint mom@my.com)
 
#GET EC2 LIST
##tag:Name, Valuese 태그 이름 등록
ec2List=$(aws ec2 describe-instances --filters "Name=tag:Name,Values=wisen-autoscaling"\
         |jq '.Reservations[].Instances[0] | select(.State.Name == "running")' \
         |jq '.InstanceId')
 
#CREATE ALARM
##alarm-describption 알람명 등록
##period 기간
##threshold 임계치
##comparison-operator 임계치 조건
##alarm-actions SNS TOPIC ARN 등록
##아래 예시의 경우 CPU 0 이상 일 경우 알람 발생
for ec2Id in ${ec2List[*]}
do
aws cloudwatch put-metric-alarm\
 --alarm-name "wisen-autoscaling_${ec2Id:1:19}"\
 --alarm-description "Alarm when CPU exceeds 70 percent"\
 --metric-name CPUUtilization\
 --namespace AWS/EC2\
 --statistic Average\
 --period 300\
 --threshold 70\
 --comparison-operator GreaterThanThreshold\
 --dimensions "Name=InstanceId,Value=${ec2Id:1:19}"\
 --evaluation-periods 1\
 --alarm-actions arn:aws:sns:ap-northeast-2:557652101750:hxxxn-topic\
 --unit Percent
echo ${ec2Id:1:19}
done
cs


개별 EC2 Instance 런칭 시 User-Data(사전 Role 및 리전 등록 필요)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#!/bin/bash
#CREATE SNS TOPIC
##name에 사용할 SNS 이름 등록
#$(aws sns create-topic --name xxxx-topic)
 
#CREATE SUBSCRIBE
##topic-arn에 생성한 accountID:topic이름설정 / e-mail 등록 다수 등록 시 아래  명령어 추가
#$(aws sns subscribe --topic-arn arn:aws:sns:ap-northeast-2:557652101750:xxxx-topic --protocol email --notification-endpoint lluckyy@gscdn.com)
 
#GET EC2 LIST
ec2Id=$(curl http://169.254.169.254/latest/meta-data/instance-id)
 
#CREATE ALARM
##alarm-describption 알람명 등록
##period 기간
##threshold 임계치
##comparison-operator 임계치 조건
##alarm-actions SNS TOPIC ARN 등록
##아래 예시의 경우 CPU 0 이상 일 경우 알람 발생
aws cloudwatch put-metric-alarm\
 --alarm-name "wisen-autoscaling_${ec2Id}"\
 --alarm-description "Alarm when CPU exceeds 70 percent"\
 --metric-name CPUUtilization\
 --namespace AWS/EC2\
 --statistic Average\
 --period 300\
 --threshold 70\
 --comparison-operator GreaterThanThreshold\
 --dimensions "Name=InstanceId,Value=$ec2Id"\
 --evaluation-periods 1\
 --alarm-actions arn:aws:sns:ap-northeast-2:557652101750:xxxx-topic\
 --unit Percent
echo ${ec2Id:1:19}
cs




CloudWatch 알람은 SNS와 연동이 되며, SNS은 Lambda와 연동이 되고, Lambda는 Slack과 Integration 된 템플릿 샘플 코드를 제공(https://aws.amazon.com/ko/blogs/korea/slack-devops-with-aws-lambda-and-eb/)


현재 업데이트 된 것은 KMS를 이용하여 디코딩 된 URL을 소스코드에 입력하는 것이 아니라, 환경 변수를 웹에서 입력하여 사용 가능. 샘플 코드 수정이 전혀 없이 CloudWatch 알람을 Slack과 연동할 수 있음.



약 20분 정도 투자하면 현재 구성된 EC2 Instance 모두에 대한 알람을 Slack을 통해 확인할 수 있음. 


생성된 EC2 내의 User Data 수정을 위해서는 EC2 Hook 을 사용해야 한다.


#!/bin/bash


#cloud-boothook

#!/bin/bash



'Management > CloudWatch' 카테고리의 다른 글

AWS CloudWatch Custom Metric 생성  (0) 2016.10.27
AWS CloudWatch Data Point API(PHP, Javascript)  (0) 2016.07.28
AWS CloudWatch  (0) 2016.01.08