← AlertHub

03 / 07

알림 채널 구현

AWS Connect 전화, SNS SMS, Slack API, SES Email 4채널 병렬 알림 구현 상세

AWS ConnectSNSSlackSES
개요 & 아키텍처모니터링 & 트리거알림 채널 구현YAML 기반 설정 관리설계 포인트문제 해결감사 로그 분석

Multi-Channel

4채널 병렬 알림 구현

장애 발생 시 단일 채널에 의존하지 않고, 4개 채널로 동시에 알림을 발송하는 Fail-safe 구조를 구현했다.

채널서비스용도특징
전화AWS Connect긴급 장애 즉시 인지자동 음성 콜, 순차 발신
SMSAWS SNS문자 기반 알림Seoul → Tokyo 크로스 리전
SlackSlack API팀 채널 실시간 알림Bot Token + Channel ID
EmailAWS SES상세 내용 기록프로덕션 액세스, DKIM 인증

Channel 01

AWS Connect (전화 알림)

장애 발생 시 담당자에게 자동으로 음성 전화를 발신한다. AWS Connect의 StartOutboundVoiceContact API를 사용하여 구현했다.

Connect 인스턴스 구성

리전ap-northeast-2 (Seoul)
인바운드 통화비활성
아웃바운드 통화활성
전화번호 유형TOLL_FREE (US)
발신 번호 제약한국에서 Connect 발신 번호 미발급 → 미국 Toll-Free 사용

Contact Flow (연락 흐름)

callBasedAlarmCloudWatch 알람 기반 아웃바운드 전화
cloudWatchcallBasedAlarmCloudWatch 알람 기반 전화 (변형)
callBasedAlarm02알람 기반 전화 (v2)

StartOutboundVoiceContact API 호출

StartOutboundVoiceContactRequest request =
    StartOutboundVoiceContactRequest.builder()
        .contactFlowId(contactFlowId)
        .instanceId(instanceId)
        .queueId(queueId)
        .destinationPhoneNumber(phoneNumber)
        .build();

connectClient.startOutboundVoiceContact(request);

비용 구조

아웃바운드 (한국)

$0.065/분

아웃바운드 (미국)

$0.0065/분

Toll-Free 번호

$0.12/번호/일

인스턴스/Flow 생성

무료

Connect Flow — 2가지 트리거 경로

경로 1

CloudWatch 알람 기반 자동 전화

EC2 StatusCheckFailed, CPU 과부하 등 CloudWatch 알람 발생 시 Lambda가 Connect API를 호출하여 자동 전화 발신

CloudWatch AlarmSNS TopicLambdaConnect APIContact Flow (TTS)담당자 순차 발신
경로 2

AlertHub 모니터링 앱 기반 전화

자체 개발한 모니터링 앱(AlertHub)이 운영 서버 포트 상태를 2분 간격으로 점검하고, Timeout/오류 감지 시 직접 Connect API를 호출하여 전화 발신

AlertHub (Port Monitor)HTTP Timeout 감지Connect API 직접 호출Contact Flow (TTS)담당자 순차 발신

Channel 02

AWS SNS (SMS 알림)

Seoul 리전은 SMS 발송을 지원하지 않으므로, Lambda를 통해 Tokyo 리전 SNS로 메시지를 포워딩하는 크로스 리전 구조를 설계했다.

크로스 리전 SMS 아키텍처

CloudWatch Alarm (Seoul)SNS Topic (Seoul)Lambda: sns-forward-to-tokyoSNS Topic (Tokyo)SMS 발송

Tokyo SNS SMS 설정

리전ap-northeast-1 (Tokyo)
샌드박스 상태Sandbox (등록된 번호만 발송 가능)
월간 지출 한도$50
SMS 단가 (한국)$0.047/건

SMS 알림 대상 CloudWatch 알람

Seoul의 cloudwatch-alarm-topic에 연결된 알람들이 Tokyo를 경유하여 SMS로 전달된다.

애플리케이션 서버 — CPU, 메모리, 디스크

DB 서버 — CPU, 메모리, 디스크, SWAP

FTP 서버 (Windows) — CPU, 메모리, 다중 드라이브

배치 서비스 — 메모리

Lambda: sns-forward-to-tokyo 핵심 로직

# Seoul SNS에서 메시지 수신 → Tokyo SNS로 포워딩
sns_tokyo = boto3.client('sns', region_name='ap-northeast-1')

def lambda_handler(event, context):
    message = event['Records'][0]['Sns']['Message']
    alarm_info = json.loads(message)
    
    # SMS에 적합한 길이로 가공 (160자 제한)
    sms_message = f"[알람] {alarm_info['AlarmName']}"
    
    sns_tokyo.publish(
        TopicArn=TOKYO_TOPIC_ARN,
        Message=sms_message
    )

Channel 03

Slack 알림

YAML 설정 기반으로 Slack Bot Token과 채널 ID를 지정하여 알림을 전송한다. 1분 단위 실시간 알림이 가능하며, ALARM/OK 양방향 알림으로 장애 발생과 해소를 모두 팀에 공유한다.

YAML 설정 예시

notification:
  by: slack
  token: xoxb-xxxx-xxxx-xxxx   # Bot Token
  channel: C06XXXXXXXX          # Channel ID

Slack 알림 활용 범위

AlertHub (SpringBoot)HTTP/파일 모니터링 이상 감지
Lambda: SendSlackNotificationECS Task RunningTaskCount 알림 (SNS → Lambda → Webhook)
Lambda: CheckWindowSvrAppStatusWindows 서버 FileReceiver 프로세스 다운 감지

Slack Attachment 메시지 형식

slack_message = {
    'text': f'{emoji} *ECS Task Alert*',
    'attachments': [{
        'color': '#ff0000' if state == 'ALARM' else '#36a64f',
        'fields': [
            {'title': 'Alarm', 'value': alarm_name},
            {'title': 'State', 'value': new_state},
            {'title': 'Reason', 'value': reason[:200]},
        ]
    }]
}

Channel 04

AWS SES (Email 알림)

기존 사내 SMTP 기반 이메일 전송에서 AWS SES로 전환했다. 프로덕션 액세스를 활성화하여 샌드박스를 해제하고, 도메인 DKIM 인증으로 발송 신뢰도를 확보했다.

SES 계정 상태

프로덕션 액세스활성화 (샌드박스 해제)
24시간 발송 한도50,000건
최대 발송 속도14건/초
리전ap-northeast-2 (Seoul)

기존 문제 (사내 SMTP)

  • - 사내 SMTP 서버 지연 발생
  • - AWS 환경에서 SMTP 차단 이슈
  • - 안정성 보장 어려움

개선 (AWS SES)

  • - AWS 환경에서 직접 전송
  • - 도메인 DKIM 인증으로 신뢰도 확보
  • - 발송 이력 추적 가능

SES를 사용하는 Lambda 함수

AWSConfigRulesMailProviderAWS Config 규칙 평가 HTML 보고서 (평일 매일 09:00 KST)
health-ecs-email-notifyECS Task Retirement 대응 안내 메일 (BCC 다수 발송)
CheckWindowSvrAppStatusWindows 서버 앱 상태 이상 시 알림

Channel Architecture

채널 아키텍처 종합

AlertHub Core

notificationMethod 기반 채널 라우팅

AWS Connect

전화 발신 (Seoul)

AWS SNS

SMS (Seoul→Tokyo)

Slack API

Bot 메시지

AWS SES

이메일 (Seoul)

담당자 전화

담당자 휴대폰

팀 Slack 채널

담당자 메일함

모니터링 & 트리거YAML 기반 설정 관리