watch

AWS-CloudWatch-Synthetics-Canary-review

드디어!!드디어!!드디어!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

AWS에도 웹모니터링 기능이 생겼다.

진짜 너무 기다려왔던 기능이다.

사용법도 간단하고 지표도 바로나오고..이거 완전 물건이다.

바로 셋팅해봤다.

블루 프린트를 사용해서 테스트를 했다.

4가지의 블루프린트를 제공하고 스크립트를 수정할수도 있으나 귀찮다.

일정은 뭐....알아서 나는 5분으로 만들고 나중에 1분으로 수정했다. 일단 나머지 파라메터를 다 기본으로 설정하고 진행했다.

생성하면 진짜 간단하게 보여준다.

핵심은 이거다. 그냥 사이트 모니터링을 해주고

지연된 URL을 체크해준다.

나같은경우엔 사이트 모니터링을

1분마다 하고 5분 평균 임계값을 1로 설정하여 상당히 예민한 모니터링 설정을 하였다. 사이트 URL 체크가 1번만 실패해도 SNS로 경보가 동작한다.

t2.micro 의 경우에는 인스턴스의 CPU가 좀 오르는게 보였으나.. 뭐 이정도는 감당할 만하다. 모니터링으로 인해 부하가 발생하는것이 불편하다면 특정 모니터링 URL만 만들어서 부하를 줄여서 모니터링 하는것이 방법일것이다.

지금 까지는 target group에 의존한 모니터링을 사용하였는데 이젠 서비스에 대한 모니터링이 가능한 순간이 와서 너무 즐겁다.

일단 블로그에 충분한 테스트 이후에 api 와 프로덕션 환경에서 사용해 봐야겠다.

포스팅을 작성하고 나중에 비용계산을 진행해 보았다.

단순계산으로

1분마다 모니터링 하면 60*24*31=44604*0.0012 USD=53.568=USD

5분마다 면....11USD 정도 이다-_-;;;

음....모니터링 치고 비싼데...????????????????ㅠㅠ

적용하기 전에 비용꼭 계산해보고 사용하자..

읽어줏셔서 감사하다!

aws-ec2-user-data-cloud-watch-metric-memory-disk

오늘 포스팅은 사용자 데이터에 대한 포스팅을 할거다.

오늘 추가하는 내용은 cloudwatch 사용자 매트릭을 이용하는것이므로 비용이발생한다.

정말 미미한 비용이지만 비용발생의 거부감이 있다면 따라하지 말것.

이전에 Cloud Watch 를 이용하여 메모리를 모니터링 하는법과 경보를 만드는 방법을 포스팅 했었다.

이건 기본매트릭엔 memory/disk 모니터링이 안되므로 스크립트로 매트릭을 Watch로 전송하는 방식이다. agent 방식도 있으나 내가 선호하는 방식이 아니다.

먼저 사용할 inline 정책이다.

필요 권한

필요한 권한
cloudwatch:PutMetricData
cloudwatch:GetMetricStatistics
cloudwatch:ListMetrics
ec2:DescribeTags

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "cloudwatch:PutMetricData",
                "ec2:DescribeTags",
                "cloudwatch:GetMetricStatistics",
                "cloudwatch:ListMetrics"
            ],
            "Resource": "*"
        }
    ]
}

일단 정책 생성누르고 json 으로 넣는다.

그리고 정책의 이름을 정해서 넣는다

사용권한

나는 ec2-monitoring-policy 로 대충 입력했다. 상황과 사용자에 따라 다르다.

이제 역할을 생성한다.

신뢰 할수있는 유형의 서비스에서 EC2를 선택한다.

미리 생성한 정책을 선택한다.

태그는 사실 대충 입력했다. 하지만 각각 사용자마다의 태그 규칙을 정하고 사용하는것이 좋다.

정상적으로 만들면 신뢰 정책 태그가 생성한 순으로 잘보일것이다.

하나라도 빠져있다면 이상한거다.

오늘의 대상이 되는 인스턴스의 OS는 ubuntu 와 amazon linux2 / contos 이다.

user data 에 사용할 스크립트다

amazon linux2 / contos7

#!/bin/bash
sudo yum install -y perl-Switch perl-DateTime perl-Sys-Syslog perl-LWP-Protocol-https perl-Digest-SHA.x86_64 unzip
cd ~
curl https://aws-cloudwatch.s3.amazonaws.com/downloads/CloudWatchMonitoringScripts-1.2.2.zip -O
unzip CloudWatchMonitoringScripts-1.2.2.zip && \
rm CloudWatchMonitoringScripts-1.2.2.zip
echo "#disk metric" >> /etc/crontab
echo "#*/5 * * * * root /root/aws-scripts-mon/mon-put-instance-data.pl --mem-used-incl-cache-buff --mem-util --disk-space-util --disk-path=/ --from-cron" >> /etc/crontab
systemctl restart crond

ubuntu 14 - 18

#!/bin/bash
sudo apt-get install unzip libwww-perl libdatetime-perl
cd ~
curl https://aws-cloudwatch.s3.amazonaws.com/downloads/CloudWatchMonitoringScripts-1.2.2.zip -O
unzip CloudWatchMonitoringScripts-1.2.2.zip && \
rm CloudWatchMonitoringScripts-1.2.2.zip
echo "#disk metric" >> /etc/crontab
echo "#*/5 * * * * root /root/aws-scripts-mon/mon-put-instance-data.pl --mem-used-incl-cache-buff --mem-util --disk-space-util --disk-path=/ --from-cron" >> /etc/crontab
systemctl restart crond

위의 스크립트는 UserData 에 넣어주면 된다.

현재 스크립트는 주석처리되어 삽입까지만 되고 crontab 에서는 주석처리되어 돌지 않는다. 동작시키려면

echo "#*/5 * * * * root /root/aws-scripts-mon/mon-put-instance-data.pl --mem-used-incl-cache-buff --mem-util --disk-space-util --disk-path=/ --from-cron" >> /etc/crontab
echo "*/5 * * * * root /root/aws-scripts-mon/mon-put-instance-data.pl --mem-used-incl-cache-buff --mem-util --disk-space-util --disk-path=/ --from-cron" >> /etc/crontab

변경하고 crontab 을 재시작하자.

crontab 에 삽입되며, 5분마다 memory와 disk 사용량에 대한 매트릭을 CloudWatch 로 전송한다.

인스턴스 세부정보 구성에서 아까 생성한 역할을 부여하고, 사용자 데이터에서 위에 올려둔 스크립트를 붙여넣기 한다.

[root@ip-172-31-47-207 ~]# yum history
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
ID | Command line | Date and time | Action(s) | Altered
2 | install -y perl-Switch p | 2020-04-25 00:27 | Install | 50
1 | -t -y --exclude=kernel - | 2020-04-25 00:27 | Update | 1
history list

yum history를 보면 정상적으로 패키지 설치가 된게 보이고,

[root@ip-172-31-47-207 ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
#disk metric
*/5 * * * * root /root/aws-scripts-mon/mon-put-instance-data.pl --mem-used-incl-cache-buff --mem-util --disk-space-util --disk-path=/ --from-cron

정상적으로 crontab에 스크립트도 들어간게 보인다.

그래서 CloudWatch 에서 모두 > linux 시스템 이라는 이름으로 사용자 매트릭이 생성된것이 보일것이다.

여기까지 되면 이제 인스턴스의 메모리와 디스크 모니터링이 가능해졌다.

aws 에서는 기본 매트릭으로 여러가지 모니터링 환경을 제공하는데 memory 와 disk 는 모니터링이 되지 않아 불편한 부분이 있었다.

-_-; 이 포스팅이 도움이 되길 바란다.!

aws cloud watch 여러대의 인스턴스에 대한 하나의 경보 생성.ver2

cloudwatch 경보생성 입니다.

여러대의 인스턴스를 하나로 묶어서 경보생성할때 사용하는 방법입니다.

경보 생성을 누릅니다.

지표 선택을 눌러서 지표를 확인합니다.이번에 경보를 생성할 지표는 "CPUUtilization"입니다.

검색하여 체크 후에 '그래프로 표시된 지표' 를 누릅니다.
표시된 지표는 9개 까지 체크하여 추가할수 있습니다.

제한사항으로

 수학표현식을 추가합니다.
수학 표현식은 상황에 따라 잘 사용하기로 바랍니다.https://docs.aws.amazon.com/ko_kr/AmazonCloudWatch/latest/monitoring/using-metric-math.html
이번에는 CPU사용량이 1대라도 70% 를 넘을 경우 경보를 생성할 것이므로 사용한 표현식은 MAX(METRICS()) 입니다.

전체를 체크할 경우 아래와 같이 지표선택 버튼이 활성화 되지 않습니다.

사용할 수학 표현식 하나만 체크해야 생성이 가능합니다.

위와같이 지표를 생성후에 경보생성은 SNS 를 사용해야 하므로 SNS 사용법은 각자 확인해보시기 바랍니다. 

즐거운 하루되세요~