AWS와 Slack을 연동하여 AWS에서 Slack으로 알람을 보내보자 !
현재 배포된 서버에 대한 로그가 AWS의 cloudwatch에 쌓이고 있다.
이때 해당 서버에 에러가 발생한경우 Slack으로 알람을 보내어 팀원 전부에게 알려보고자 한다 !
간단 순서 요약
1.Cloudwatch 로그 그룹의 로그 스트림 중 특정 문자열 포함시 '지표 필터 생성'
2. Slack 채널 생성
3. 경보 알림 'SNS(Simple Notification Service)' 주제 생성
4.해당 지표 필터를 트리거로 '경보(알람)' 생성
5. 'AWS Chatbot'에서 'Slack'으로 클라이언트 생성
해당 과정을 간단히 말하자면 AWS의 Cloudwatch에 생성되는 로그 중 (설정자가 원하는)특정 문자열, 예를 들면 ''QueryFailedError' 혹은 'Moduel error'가 생성되면 Slack의 설정한 채널로 알람을 보낸다.
[1] CloudWatch에서 필터링 할 문자열 확인하기
1-1) 로그 그룹 선택
아래 사진의 빨간 로그 그룹들 중 원하는 로그 그룹을 선택한다.
1-2) 로그 스트림 선택
(최상단 스트림이 최신에 쌓인 로그 스트림이니 참조.)
1-3) 로그들을 확인하며 필터링 할 값 정하기
ERR이라는 단어를 필터링 할 예정 !
[2] CloudWatch 지표 필터 생성
2-1) 로그 그룹에서 로그 그룹 선택 후 지표 필터 생성 클릭
2-2)패턴 정의 및 패턴 테스트
LOG를 특정 문자열로 필터링하고 해당 필터링이 잘 되는지 확인
(EX. Apprunner 로그 중 'ERR' 문자열 필터링)
2-3) 지표 할당
필터의 이름과 지표 네임스페이스, 지표이름, 지표값을 입력
2-4) 검토 및 생성
2-2),2-3)에서 입력한 값이 맞는지 다시 한번 확인.
[3] Slack 채널 생성
알람을 받을 slack workspace 채널을 생성한다.
[4] 경보 알림 'SNS(Simple Notification Service)' 주제 생성
4-1) AWS 콘솔에 Simple Notification Service 검색해서 접속
4-2) 다음 단계 클릭
4-3) 주제 생성
AWS SNS 토픽을 생성해서 slack 워크스페이스 채널로 알림을 전달하게 한다.
4-4) 잘 생성 되었는지 확인
[5] CloudWatch 지표 경보(알람) 생성
3-1)경보(알람)을 생성할 지표 필터 선택 후 경보생성 클릭
이전에 생성한 지표 필터를 체크 한뒤 경보 생성을 클린한다.
3-2) 지표 및 조건 지정
기간과 임계값 유형,범위 조건을 세팅한다.
3-3) 경보 상태 트리거 선택 및 알림을 보낼 SNS 선택
초기 세팅시 로그의 데이터가 충분히 쌓이지 않아 바로 테스트가 되지 않으니 데이터 부족 상태로도 알림 추가
3-4) 경보(알람) 이름 및 추가 설명 추가
경보(알람)의 이름과 경보(알람)의 세부 설명을 추가한다.
[6] 'AWS Chatbot'에서 'Slack'으로 클라이언트 생성
6-1) AWS 콘솔에 Simple Notification Service 검색해서 접속
6-2) 새 클라이언트 구성 Slack 선택
6-3) Slack workspace 연동 허용
ㅠ
6-4) Slack 채널과 Chatbot 권한 세팅
Slack 구성 이름 및 채널 유형과 채널 이름 세팅
정책 템플릿 '알림 권한' 과 'Resource Explorer 권한' 체크
이후는 기본 세팅으로 진행 ~
[7] Slack 채널에 AWS 초대
Slack 처음 연동시 세팅한 채널에 아래 명령어를 채팅창에 입력해서 aws app을 초대.
/invite @aws
경보 발생 시 slack에 나오는 알람
이제 매번 운영중인 서버가 터지거나 죽었을 경우 매번 AWS의 MFA 코드를 발급 받아 Cloudwatch로 가서 현재 상황을 체크 하지 않아도 해당 채널에 참가한 모든 인원들이 실시간으로 메세지 알람을 받아 서버의 상태를 확인할 수 있다 !
ERR 혹은 error 등과 같은 에러가 나왔을 때 주로 포함되는 문자열을 필터링하고 경보(알람)의 트리거로 사용을 하여 매번 운영중인 서버에 에러가 나왔다는걸 인식할수 있다.
하지만 Slack상에서 무슨 에러가 났는지 로그를 직접 확인할수 있게 하면 직접 AWS에 접속하는 일이 더욱 줄어 들게 된다.
그래서 위와 같이 도메인 함수 관련에러인 'getaddrinfo' , DB 쿼리 관련 에러인 'QueryFailedError' 등등 실제 운영중인 서버에서 발생한 에러를 토대로 분기 처리 하여 필터링을 하였다.
이후에도 Q/A를 진행하며 실제로 운영중인 서버에서 발생한 로그를 토대로 저 세분화 해서 추가할 예정이다 ~
'외부활동 > immersion' 카테고리의 다른 글
주문 재고 요청시 동시성 제어테스트 [트랜잭션/격리수준/LOCK/REDIS] (0) | 2024.05.28 |
---|---|
JMeter 부하 테스트 (0) | 2024.05.28 |
포트원 결제 연동 플로우 정리 [노마드코더] (1) | 2024.04.27 |
Redis와 분산 락(Distributed Lock) (0) | 2024.03.18 |
캐시란 ? (0) | 2024.03.18 |