Notice
Recent Posts
Recent Comments
Link
gyeomii
[AWS] EC2 상태이상시 Slack 연동 알림 설정 본문
반응형
개요
- AWS 서버 안정화를 위해 몇몇 서비스를 물리서버로 이전하였으나 네트워크 출력량의 증가로 인해 DB Connection을 오래 잡고 있는 경우 AWS에 부담을 주어 상태이상이 발생하는 경우가 있었음.
- 상태이상을 나타내는 지표 몇가지를 트리거로 두어 서버가 완전히 다운되기 전 미리 알람을 받아 서버가 다운되는 것을 막기 위해 SLACK과 AWS 를 연동하고자 함.
방안
Cloud Watch의 경보를 통해 이상상태 판별
- 네트워크 출력량 100M이상
- CPU 사용량 40% 이상
- 상태검사 실패 0.7 이상
Amazon SNS(Simple Notification Service)를 사용하여 Cloud Watch 경보발생시 SNS 작동
SNS가 작동하면 Amazon Lamda함수 실행
- SNS를 트리거로 두어 request-slack-alarm이 실행된다.
- request-slack-alarm은 python을 기반으로 https request를 물리서버에 배포된 slack-alarm docker container로 보낸다.
- 요청을 받은 slack-alarm은 slack api를 통해 slack 앱에 알림을 보내며 실시간으로 사용자는 이를 확인할 수 있다.
구현
SNS(Simple Notification Service) 생성
SNS → 주제 → 주제생성
표준 선택 → 주제 생성
CloudWatch 경보 생성
경보생성 → 지표선택 → 원하는 지표 선택하여 설정 완료
경보상태 체크 → 기존 SNS 주제 선택 → SNS에 생성한 주제 선택
Lambda 생성
AWS Lambda → 함수 → 함수생성
새로작성 → 런타임 Python 3.12 → 함수생성
블루프린트를 사용하여 Node js로 Http Request 를 사용하는 예제를 사용할 수 있으나 Python이 익숙하고 코드가 간결하여 Python을 사용함.
생성한 람다함수 클릭 → 트리거 추가 클릭
트리거 구성 → SNS 선택 → topic 선택 → 추가
Python의 request 라이브러리를 사용하면 편리하게 Http Request 를 요청할 수 있으나 AWS에 내장된 라이브러리가 아닌 경우 Layers에서 해당 라이브러리를 추가해야 하기에 대안으로 urlib3를 사용하여 Http Request 요청을 하기로 함.
코드소스 항목에 해당 코드를 작성하고 Deploy
import urllib3
def lambda_handler(event, context):
http = urllib3.PoolManager()
url = "요청 URL"
res = http.request('GET', url)
확인
동작 방식
- CloudWatch에서 EC2를 모니터링하다가 설정한 임계값을 넘게되면 경보가 생성됌
- 경보가 생성되면 해당 SNS가 Lambda 함수의 트리거로 동작
- 트리거로 인해 Lambda 함수 내의 코드 실행
- Lambda함수로 Slack api를 연동한 프로젝트에 요청을 보내도록 작성해뒀기에 Slack에 알림이 왔는지 확인
- AWS 자동 재실행 스케쥴링시 Slack 알림을 보내도록 하였으며 재실행 시 알림과 CPU 사용량 경고 알림 수신을 확인함.
반응형
'개발' 카테고리의 다른 글
[AWS] EC2 Instance 자동 중지 및 실행 (0) | 2024.01.15 |
---|---|
AWS 이슈 (java scheduler 사용시) (0) | 2023.12.15 |
📌Web Application Layer (0) | 2023.09.20 |
JAVA에서 웹 크롤링하기(1) (0) | 2023.08.29 |
🕷Data Crawling 3 (0) | 2023.08.23 |