IT/Elasticsearch

[Elasticsearch] 백엔드 장애 감지 알림 시스템 구축 (ELK 기반 준실시간 서버 로그 모니터링)

snapcoder 2024. 7. 6. 12:04
728x90
반응형
SMALL

[Elasticsearch] 백엔드 장애 감지 알림 시스템 구축 (ELK 기반 준실시간 서버 로그 모니터링)

 

 

Mission.

비즈니스 로직상 오류나 장애가 발생하면,

어떻게 신속 정확히 인지할 수 있을까?

 

정답 : Elasticsearch 로 기능 만들어서 알림 보내자 !

 

 

 

 

 

 

AS - IS

1. RDBS에서 SQL 기반으로 데이터 정합성 체크 알림

     ex) 결제정보 저장 테이블의 카드사 코드 컬럼 데이터 누락

SELECT      ORDER_NO
FROM        CARD_INFO
WHERE       GARD_GBCD IS NULL

           

 

2. 비즈니스 로직 자체에 분기된 예외처리 체크 후 알림

     ex) 임의의 오류코드에 대한 분기처리에 알림기능 직접 구현

            if ( "".equals(stateCode) || stateCode == null) {
                   // service.sendKakao(orderNo);
            }

 

3. 서버에 file 형태로 쌓이는 YYYYMMDD.log  로그파일 직접 확인

리눅스 명렁어 날리거나, FileZila로 다운받는건 매우 비효율

 

 

 

 

 

 

Q. 근데 왜 굳이 Elasticsearch로 알림 기능을 만들었나요?

 

A. 기존 방법의 단점 및 한계 존재

       (1) 최종 생성된 DB데이터로만 검증 가능

       (2) 비즈니스 로직 중단시 검증 불가능

       (3) 검증 자체의 어려움

             - 검증 위한 테이블 설계구축 필요 (ex. FAIL_YN)

             - 검증에 필요한 데이터 저장 로직 필요

             - 스키마 구조 변경시 모니터링 SQL쿼리도 변경 필요

       (4) RDB 기반 복잡한 검색시 속도지연 발생

       (5) 운영DB 부하 발생 위험 증가

 

=> 기존 방법들에 + "Elasticsearch"로  한계 보완 및 유지보수성 강화

 

 

 

 

 

 

 

 

 

특징을 표로 비교해보면 다음과 같다.

 

ASIS는 결국 특정 조건 전제가 필요함.

 

DB에 데이터가 저장되어 있어야 한다거나,

Java딴에 분기처리가 필요하다거나..

 

뭔가를 검증해야만 한다는....

 

 

 

 

 

 

 

 

비즈니스 로직이 중단되서

저장된 데이터가 없다면 ???

혹은 프로그램이 비정상 종료됐다면 ???

 

 

그래서 필요한게 본 기능이다.

 

그렇다고, 기존 방법들이

필요 없어진다는 것은 절대 아니다

유지보수성을 한단계 더 강화하자는 것이다

 

 

 

 

 

 

대망의 프로세스 아키텍쳐

"X".equals("비즈니스 로직 중단점") == true

X가 바로 비즈니스 로직 중단점이다.

 

  • 파란색 흐름대로라면, RDB의 SQL기반 데이터 정합성 검증시 알림발송
  • 빨간색 흐름대로라면, ELK기반 즉시 텍스트 탐지시 알림발송

다시봐도 예쁘게 잘 그린거같습니다

 

 

 

 

 

알림 받은 나의 휴대폰 화면

팀즈, SMS문자, 카카오알림톡 3가지

+ 사내시스템알림 +메일알림까지 연동은 덤

 

 

 

 

 

 

 

Kibana 탐지 현황 대시보드

Pod별 / 팀별 / 업무별 / 서비스별 등 카테고리로 분류하여

로그 발생 추이 살펴보자

매우 간단하게 만든 대시보드

 

 

 

 

 

 

마치며

더욱 고도화해야 할 부분 (ex. Error 로그 탐지시)

1. 반복 적재된 Error 로그에 대한 복수알림 미발송 처리

2. 동일한 Error 로그의 경우 대시보드에 중복되지 않게 표시

3. 이미 인지하고 있는 Error 에 대한 임시 알림 비활성화 기능 구현

 

+ 서버 로그가 잘 수집되어야 한다는 것

+ 프로젝트 구성원 모두가 로그를 잘 남겨주어야 한다는 것

 

 

 

728x90
반응형
LIST