기존에는 Scouter APM을 통해 서버를 모니터링했지만, 24시간 상시 모니터링은 현실적으로 어려웠습니다. 실제로 OOM으로 서버가 종료되었을 때, 이를 몇 시간 후에나 인지하여 서비스 장애로 이어진 경험이 있습니다. 이러한 문제에 직면하며 단순한 서버 상태 알림을 넘어, 문제의 원인과 심각성을 즉시 파악하고 대응할 수 있는 지능형 모니터링 시스템의 필요성을 느꼈습니다. 이에 저는 GPT 기반의 서버 모니터링 AI를 개발하여 모니터링 부담을 줄이고, 신속하고 정확한 문제 해결을 돕고자 했습니다.



처음에는 서버 내부 API로 GPT를 호출하려 했으나 서버가 죽으면 응답을 할 수 없고 설령 서버가 죽지 않더라도 트래픽에 요청이 느려질 가능성이 있었습니다. 서버 진단 기능이 서버 내부에 있는 것은 잘못된 설계라고 판단하여 이 문제를 해결하기 위해 서버 외부에서 모니터링을 하기로 결정했습니다.
AWS 기반 자동화 파이프라인 : AWS Lambda를 중심으로 CloudWatch, EventBridge, Slack Webhook을 연동하여 모니터링 파이프라인을 구축했습니다.
- 데이터수집 : 백엔드 서버의 메트릭과 로그를 수집했습니다. 로그는 기존의 LogBack설정을 통해 CloudWatch에 보내는 로그를 활용하고 메트릭은 CloudWatch Agent를 백엔드 서버에 설치하여 핵심 지표를 수집했습니다.
- 로그 트리거 : AWS EventBridge를 사용하여 10분마다 Lambda를 실행하고, 10분간의 로그 중 ERROR이상의 로그가 있는지 분석합니다. ERROR 로그가 발견되면 CloudWatch에서 관련 메트릭 데이터를 함께 수집하여 GPT에 요청을 보냅니다. ERROR 로그가 없는 경우 GPT 호출을 생략하여 불필요한 비용 발생을 방지했습니다.
- 메트릭 트리거 : CloudWatch Alarm을 통해 CPU, 메모리, 디스크, 스왑을 분석하고 특정 임계치 초과 시 Lambda를 즉시 실행하여 로그 데이터와, 메트릭 데이터를 수집하고 GPT를 호출합니다. 긴급 상황에 대한 신속한 대응을 위해 ERROR 조건은 붙지 않으며 쿨다운도 적용하지 않았습니다.
- GPT 분석 및 메시지 발송 : GPT는 상황을 평범(🟢), 경고(🟡), 심각(🔴) 3단계로 분류하여 분석 결과를 Lambda에 반환하고 Lambda는 Slack Webhook으로 개발자 DM으로 전송합니다.
- 버튼 기능 : 메시지에는 확인완료, 재분석, 무시 버튼이 있습니다. 재분석을 선택하면 LambdaUrl이 호출되어 람다함수가 실행되고 조건없이 GPT를 호출합니다.
- 쿨다운 메커니즘 도입 : 초기에는 트리거로 인해 연속으로 GPT가 호출되어 API 비용이 많이 발생했습니다. 이를 해결하기 위해 쿨다운 기능을 도입하여 중복 호출을 방지했습니다. 다만, CloudWatch 경보 발생이나 개발자의 재분석 요청 시에는 쿨다운을 무시하고 즉시 GPT를 호출하도록 하여 긴급 상황 및 수동 분석의 유연성을 확보했습니다.
최종적으로 서버 모니터링AI를 통해 제가 스카우터 APM을 관찰하지 않아도 되게 되었고 단순한 임계치 알림을 넘어서 상황의 맥락과 해결 방안을 함께 제공함으로써 신속하고 정확한 대응이 가능해졌습니다.
설계 아키텍처

'개발' 카테고리의 다른 글
| 비밀로그 백엔드 (4) | 2025.08.22 |
|---|---|
| 비밀로그 프론트엔드 팀원 모셔요! (0) | 2025.08.14 |
| 헥사고날 아키텍처 리팩토링 (1) (0) | 2025.08.12 |
| 헥사고날 아키텍처로 가기위한 기존 코드에 solid 적용 완료 (0) | 2025.08.11 |
| 비밀로그 자체 스캐닝 및 공격 (2025년 8월 5일) (0) | 2025.08.05 |