Lambda와 Slack or Telegram을 통한 aws 모니터링

dawon·2022년 9월 2일
0

사전지식

실시간 모니터링이 필요한 주요 aws 리소스의 상태 변화를 slack이라는 협업 도구를 통해 효율적으로 모니터링하는 방법에 대해 안내합니다.
전체적인 흐름은 lambda에서 eventbridge를 통해 리소스 변화를 감지하는 트리거를 감지하고, 슬랙에 해당 이벤트에 대한 정보를 보내는 구성입니다.
Webhook URL을 지원하는 다른 플랫폼을 통해서도 모니터링이 가능합니다.

작업 방법

[1] Slack

  1. 링크에서 slack 수신을 위한 채널을 선택합니다.
  2. Webhook URL 복사하고, Customise name 정보를 입력한 다음에 설정을 저장합니다.

[2] Lambda

  1. 모니터링할 리전의 lambda 서비스로 이동하고, 런타임은 python 최신으로 선택한 다음에 함수 생성을 진행합니다.
  2. 아래의 샘플 코드에서 url 부분은 Webhook URL을 입력하고, 필요한 경우에 따라 코드를 변경해서 사용합니다.
import urllib3

def lambda_handler(event, context):
    url = "https://https://hooks.slack.com/services/T192GUYE7/B01L9RYEV0A/3PP2Kw" #본인 Slack훅 정보 
    
    username = '[SYSTEM-lambda]' 
    #pretext  = '[Event]' + event['detail-type']
    #account = event['account']
    time = event['time']
    region = event['region']
    detail = event['detail']
    
    senText  =  ' account : {} \n time : {}  \n region : {} \n detail : {}'.format(account,time,region,detail ) 
    msg = {
        "username": '[SYSTEM-lambda]' ,
        "pretext": pretext,
        "text": senText,
        "icon_emoji": ""
    }
    
    encoded_msg = json.dumps(msg).encode('utf-8')
    resp = http.request('POST',url, body=encoded_msg)

    print({
        "status_code": resp.status, 
        "response": resp.data
    })
    return {
        'statusCode': resp.status,
        'body': resp.data
    }

[3] EventBridge

  1. 아래와 같이 모니터링을 진행할 aws 서비스 및 이벤트 유형을 선택합니다.
    이번 가이드에서는 ec2의 상태 변화를 모니터링하는 방법을 예시로 작성했습니다.
  2. eventbridge 대상으로 위에서 구성한 lambda를 선택하고 구성을 완료합니다.

작업 결과

아래와 같이 모니터링 대상의 상태 변화가 발생했을 때, slack을 통해 해당 정보를 빠르게 확인할 수 있습니다.

0개의 댓글