gyeomii

[AWS] EC2 상태이상시 Slack 연동 알림 설정 본문

개발

[AWS] EC2 상태이상시 Slack 연동 알림 설정

gyeomii 2024. 1. 22. 09:51
반응형

개요

  • 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