본문으로 바로가기

모니터링 시스템 구축

category n년차 개발자 2025. 4. 7. 14:43
반응형

 

 


7년간 운영 환경에서 다양한 서비스를 운영하면서 하나 확실하게 느낀 것이 있습니다. 장애는 언제나 예고 없이 다양한 방법으로 찾아온다는 것입니다. 트래픽이 갑자기 몰리거나, 갑작스럽게 OOM이 발생한다거나, 배포된 버전 간 충돌이 발생하거나, 특정 구간의 성능 병목이 생기는 등 운영 환경에서는 예기치 못한 문제들이 끊임없이 발생합니다.  이런 상황에서 중요한 건 얼마나 빨리 문제를 인지하고 대응하느냐 인거 같습니다. 이를 가능하게 해주는 것이 바로 모니터링 시스템입니다.

모니터링 시스템은 단순히 리소스(CPU, 메모리 등)를 감시하는 것을 넘어, 서비스의 상태와 흐름, 성능 병목 구간, 장애의 원인까지 정확히 파악할 수 있게 해줍니다. 문제가 발생했는지를 실시간으로 인지할 수 있는 체계가 필요합니다.

이 글에서는 운영 환경에서 모니터링이 왜 필요한지와 모니터링 서비스를 구축하는 방법까지 작성해보려고 합니다.


모니터링 시스템을 구축하면 단순한 문제 감지를 넘어, 운영 효율성과 서비스 품질 전반에 긍정적인 효과를 가져올 수 있습니다.
모니터링의 효과를 정리해보면 다음과 같습니다
- 선제적 장애 대응: 문제가 심각해지기 전에 조기에 감지하고 대응할 수 있습니다.
- 서비스 품질 유지: 성능 저하나 병목을 지속적으로 모니터링하여 사용자 경험을 개선할 수 있습니다.
- 리소스 최적화: 시스템 자원 사용량을 분석해 불필요한 낭비를 줄이고, 비용 효율적인 운영이 가능합니다.
- 인사이트 확보: 장기적인 데이터 분석을 통해 서비스 개선이 필요한 포인트를 명확히 도출할 수 있습니다.


 

제가 생각하는 모니터링의 대상은 크게 다음 세 가지로 나눌 수 있습니다

 

모니터링 대상 분류

1. 애플리케이션 로그 수집
예외 로그, 사용자 행위 로그, 주요 비즈니스 흐름
→ Logback, Log4j 등

2. 서버 자원 및 애플리케이션 메트릭 수집
서버: CPU, 메모리, 디스크 I/O, 네트워크
애플리케이션: TPS, 호출량, 에러율, 응답 시간, GC 타임 등
→ Node Exporter, Spring Boot Actuator, Micrometer, Custom Metrics

3. 트레이싱 수집 (분산 추적)
서비스 간 호출 흐름, latency, 병목 지점
→ OpenTelemetry SDK, Spring Cloud Sleuth, Zipkin, Jaeger

 

 

모니터링 구성 단계

제가 생각하는 모니터링 시스템은 5가지(수집, 처리(필터), 저장, 시각화, 알림) 단계로 구성된다고 생각합니다.

 

1. 데이터 수집 (Collection)

수집 대상별로 아래 도구들을 사용해 데이터를 수집합니다.

 

서버 리소스: CPU 사용률, 메모리 사용량, 디스크 I/O, 네트워크 트래픽 등
→ Node Exporter + Prometheus 메트릭 수집 (Pull 기반)
애플리케이션 상태: TPS, 에러율, 응답 시간, 호출량, GC 타임 등
→ Spring Boot Actuator, Micrometer, Custom Metrics  + Prometheus 메트릭 수집 (Pull 기반)
로그: 예외, 경고, 주요 비즈니스 흐름 로그 등
→ Logback, Log4j + Filebeat / Fluentd / Logstash: 로그 수집 (Push 기반)
트레이스: 서비스 간 호출 흐름 및 Latency 정보
→ OpenTelemetry SDK, Spring Cloud Sleuth SDK, Zipkin, Jaeger + OpenTelemetry Collector: 메트릭 + 로그 + 트레이스 통합 수집

2. 데이터 처리 (Processing)
저장 전후로 데이터를 정제하거나 필요한 형태로 가공합니다.

 

로그 파싱 및 필터링
Logstash / Fluentd

데이터 변환 및 전처리
Vector / Telegraf
실시간 스트림 처리

Kafka Streams / Flink

3. 데이터 저장 (Storage)
데이터의 유형에 따라 저장소를 구분해 저장합니다.


시계열 메트릭 저장소
Prometheus, InfluxDB
로그 저장소
Elasticsearch, Loki, Splunk
트레이스 저장소
Jaeger, Zipkin, Tempo

4. 시각화 (Visualization)
운영자가 시스템 상태를 빠르게 파악할 수 있도록 대시보드 형태로 시각화합니다.


다양한 데이터 소스 통합 시각화 도구

Grafana
기반 로그 시각화 도구

Kibana
트레이스 호출 흐름 시각화

Jaeger UI / Zipkin UI

5. 알림 (Alarm)
이상 징후나 임계치를 실시간으로 감지하여 알림을 전송합니다.


알림 연동 도구 

→ Prometheus  Alertmanager
대시보드 기반 알림 설정

→ Grafana Alerting
기반 로그 이상 탐지 알림

  ElastAlert Elasticsearch

 


 

모니터링 시스템이 운영환경에서 중요하다고 생각하기 때문에 수집부터 시각화까지 간단하게 구성해보려고 합니다.

제가 생각하는 모니터링 3가지를 아래와 같은 서비스와 플랫폼을 사용해서 모니터링 기능을 구축해보려고 합니다.

 

1. 애플리케이션 로그 수집 및 시각화
Lg4j2(데이터 제공)   Logstash(수집)   Elasticsearch(저장)   Kibana, Grafana(시각화)

2. 서버 자원 및 애플리케이션 메트릭 수집 및 시각화
서버: CPU, 메모리, 디스크 I/O, 네트워크

Node Exporter(데이터 제공) → Prometheus(수집,저장) → Grafana(시각화)


애플리케이션: TPS, 호출량, 에러율, 응답 시간, GC 타임 등

Spring Boot Actuator (데이터 제공) → Prometheus(수집,저장) → Grafana(시각화)

3. 트레이싱 수집  및 시각화 (분산 추적)
서비스 간 호출 흐름, latency, 병목 지점
OpenTelemetry Agent (데이터 제공) → OpenTelemetry Collector(수집) → Grafana Tempo(저장) → Grafana (시각화)

 

 

 

반응형