서비스모니터링
Auto Scaling + CloudWatch를 이용한 알림(webhook & terraform)
Zero_To_One
2022. 5. 9. 12:05

1. 디스코드 웹훅 url 준비

2. 람다 설정 (런타임 : 파이썬 3.7) 및 SNS를 람다의 트리거로 설정
import boto3
import json
import logging
import os
from base64 import b64decode
from urllib.request import Request, urlopen
from urllib.error import URLError, HTTPError
HOOK_URL = '웹훅 url 주소'
logger = logging.getLogger()
logger.setLevel(logging.INFO)
def lambda_handler(event, context):
logger.info("Event: " + str(event))
message = json.loads(event['Records'][0]['Sns']['Message'])
logger.info("Message: " + str(message))
discord_message = {
'username': '재혁 terraform',
'avatar_url': 'https://dimg.donga.com/wps/NEWS/IMAGE/2019/04/25/95215551.1.jpg',
'content': 'Test'
}
if 'AlarmName' in message:
discord_message = {
'username': '재혁 terraform',
'avatar_url': 'https://dimg.donga.com/wps/NEWS/IMAGE/2019/04/25/95215551.1.jpg',
'content': "AlarmName: %s \n OldStateValue: %s \n NewStateValue: %s " % (message['AlarmName'], message['OldStateValue'], message['NewStateValue'])
}
if 'Origin' in message:
discord_message = {
'username': '재혁 terraform',
'avatar_url': 'https://dimg.donga.com/wps/NEWS/IMAGE/2019/04/25/95215551.1.jpg',
'content': "Origin: %s \n Cause: %s \n Event: %s " % (message['Origin'], message['Cause'], message['Event'])
}
payload = json.dumps(discord_message).encode('utf-8')
headers = {
'Content-Type': 'application/json; charset=utf-8',
'Content-Length': len(payload),
'Host': 'discord.com',
'user-agent': 'Mozilla/5.0'
}
req = Request(HOOK_URL, payload, headers)
try:
response = urlopen(req)
response.read()
logger.info("Message posted to discord")
except HTTPError as e:
logger.error("Request failed: %d %s", e.code, e.reason)
logger.error(e.read())
except URLError as e:
logger.error("Server connection failed: %s", e.reason)
3. 시작 템플릿 구성
- 그룹 정보
- 원하는 용량: 1
- 최소 용량: 1
- 최대 용량: 3
- 시작 템플릿은 다음 구성을 따릅니다.
- Ubuntu Server (LTS)
- t2.nano
- 기존 혹은 신규 키 페어를 사용합니다
- 보안 그룹: 인바운드 HTTP 및 SSH 허용
- 사용자 데이터
#!/bin/bash echo "Hello, World" > index.html sudo apt update sudo apt install stress nohup busybox httpd -f -p 80 &
CloudWatch와 조정 정책
- CloudWatch를 통한 Auto Scaling 그룹 지표 수집 활성화 필요
- Scale-in 조건: CPU 40% 이하
- Scale-out 조건: CPU 50% 이상
4. git clone
https://github.com/vnfmsqkek3/autoscaling-cloudwatch
GitHub - vnfmsqkek3/autoscaling-cloudwatch
Contribute to vnfmsqkek3/autoscaling-cloudwatch development by creating an account on GitHub.
github.com
ALB를 사용하고, EC2의 cpu 사용량이 50%이상일 때 scal-out이 되면서 알람이 온다.
EC2의 cpu 사용량이 40% 이하일 때 scal-in이 되면서 알람이 온다.
약 300초의 대기시간을 가짐.
EC2에 접속해서
stress -c 1
를 입력하면 cpu에 과부화를 주면서 scal-out이 되고, 끄면 scal-in이 된다.