Profile picture

[Docker / 모니터링] ELK로 실시간 에러 알림 받기 (Feat. Discord Webhook)

JaehyoJJAng2024년 03월 11일

개요

ELK 스택에서 발생하는 에러 로그를 디스코드로 알림을 받는 방법에 대해 기록해보려고 합니다.


목표

  • 1. 어떤 로그를 '치명적'이라고 판단할지 기준 정하기
  • 2. Discord 웹훅 준비하기
  • 3. Kibana Alerting 기능으로 알림 설정하기
  • 4. 테스트 로그를 보내 알림이 잘 오는지 확인하기

1. 무엇이 "치명적인 에러"인지 기준 세우기

가장 먼저 해야할 일은 어떤 로그를 "치명적"으로 분류하고 알림을 받을지 기준을 정하는 거겠죠.

이건 시스템마다, 애플리케이션마다 다르기 때문에 로그 데이터 형식을 꼭 확인해봐야 합니다.


일반적으로 사용하는 기준들은 다음과 같습니다.

  • 로그 레벨: 가장 흔한 방법이죠. 로그에 기록된 레벨(error, fatal, critical 등)을 기준으로 필터링하는거에요.
  • 특정 키워드 포함: 로그 메시지(message 필드 등) 안에 Exception, Fatal, Timeout과 같은 특정 단어가 포함될 경우를 기준으로 삼을 수 있겠죠.
  • 특정 패턴 일치: 정규 표현식을 사용해 복잡한 에러 메시지 패턴을 잡아낼 수도 있구요.
  • 발생 빈도: 특정 에러가 짧은 시간 안에 비정상적으로 많이 발생할 때 알림을 받도록 설정할 수도 있을거 같네요.

2. 디스코드 알림 채널 준비하기

ELK가 에러를 발견했을 때 메시지를 던져줄 Discord 채널과 웹훅 URL이 필요합니다.

  • 1. 알림을 받고 싶은 Discord 서버/채널 설정으로 이동하세요. (서버 설정 > 연동 또는 통합)
  • 2. 웹후크 메뉴에서 새 웹후크 만들기를 클릭합니다.
  • 3. 이름(예: ELK Critical Alerts)을 정하고 알림을 받을 채널을 선택한 뒤, 웹후크 URL 복사를 눌러 URL을 안전한 곳에 보관하세요. (🚨 이 URL은 비밀번호처럼 취급해야 합니다!)

3. Kibana 알림 설정하기 (Connector & Rule)

이제 Kibana에서 실제 알림 설정을 진행해볼게요.

3-1. 커넥터 만들기

1. Kibana Stack Management > Rules and Connectors (또는 Alerts and Actions) > Connectors 탭으로 이동합니다.


2. Create connector 클릭 후 Webhook 타입을 선택합니다.
image


3. Name: 알아보기 쉬운 이름 (예: Discord webhook - Critical Errors)


Loading script...