개발기술/테스트, 인프라
모니터링 툴
bsh6226
2025. 1. 5. 07:45
모니터링 툴 구성요소
모니터링 | 대상구성 |
OS (시스템 자원) | Node Exporter + Prometheus |
JVM (Spring Boot 앱) | Micrometer + Prometheus |
외부 DB/Redis 등 | redis_exporter, mysqld_exporter |
시각화 | Grafana |
1. Prometheus란?
Prometheus는 **시계열 기반 모니터링 데이터 수집기(메트릭 저장소)**입니다. CPU, 메모리, 네트워크 트래픽 등 다양한 시스템 상태 정보를 주기적으로 pull 방식으로 수집하고 저장할 수 있습니다.
주요 특징
Prometheus의 주요 특징
- 시계열 데이터 수집:
- **메트릭(metric)**이라고 불리는 데이터를 시계열(Time Series) 형식으로 수집.
- 예: CPU 사용률, 메모리 사용량, 네트워크 트래픽.
- 알림(Alerting):
- 특정 조건이 충족되면 AlertManager를 통해 경고를 생성하고, 이메일, Slack 등으로 알림을 보냄.
- 독립 실행형:
- 분산 스토리지 없이도 단일 Prometheus 서버만으로 동작 가능.
주요 Exporter + 대표 메트릭 정리
Exporter는 Prometheus가 수집할 수 있도록 메트릭을 노출해주는 중간 역할의 에이전트입니다. Exporter는 시스템 내부 지표를 Prometheus가 이해할 수 있는 HTTP 형식으로 변환해주는 "번역기" 역할을 합니다.
Exporter | 모니터링 대상 | 주요 메트릭 예시 |
Node Exporter | 서버(OS 자원) | CPU 사용률, 메모리 사용량, 디스크 I/O, 네트워크 트래픽, 시스템 Load |
JMX Exporter | JVM (Spring, Java 앱) | Heap 사용량, GC 시간, Live Threads, Class 로딩, CPU 사용률 |
Micrometer + Prometheus | Spring Boot | HTTP 요청 수/지연 시간, ThreadPool 상태, DB 쿼리 시간, Cache hit ratio |
MySQL Exporter | MySQL | 커넥션 수, Slow Query, InnoDB 버퍼, 쿼리 QPS |
Redis Exporter | Redis | 메모리 사용량, Key 수, Connected Clients, 캐시 히트율 |
Kafka Exporter | Kafka | Consumer lag, Partition 상태, Broker 메시지 처리량 |
RabbitMQ Exporter | RabbitMQ | Queue depth, 메시지 rate, 연결 수, 채널 수 |
Exporter의 수집방법
1. Exporter가 열어주는 경우
- 예: node_exporter, redis_exporter, jmx_exporter
- Exporter는 외부에서 데이터를 긁어와서 → /metrics HTTP 포트를 열어둠
- Prometheus는 이 /metrics 엔드포인트에 주기적으로 접근해서 수집
- 이때 exporter가 자체적으로 포트를 열어야 수집 가능
2. 애플리케이션이 직접 열어주는 경우
- 예: Spring Boot + Micrometer (내장 Actuator)
- 애플리케이션이 직접 HTTP 서버를 통해 /actuator/prometheus를 열어줌
- Prometheus는 그 경로에 접근해서 메트릭을 수집
- 이때도 애플리케이션이 직접 HTTP 엔드포인트를 “열어줘야” 함
Prometeus는 가능하지만 top으로는 확인 못하는 것들
지금 당장 무슨 일이 벌어지고 있는지”를 빠르게 확인하고 싶다면, top, htop, vmstat 같은 명령어들만으로도 충분히 유용합니다.
항목 | top | Prometheus |
과거 CPU/메모리 사용 추세 | ❌ | ✅ |
GC Pause 시간 / 빈도 (JVM) | ❌ | ✅ jvm_gc_pause_seconds, jvm_memory_used_bytes |
Thread Pool 상태 | ❌ | ✅ executor_active_threads, executor_queued_tasks |
HTTP 요청 수, 오류율, 응답 시간 | ❌ | ✅ http_server_requests_seconds_count 등 |
DB 커넥션 수 / 커넥션풀 고갈 여부 | ❌ | ✅ HikariCP, DBCP 커넥션 사용량 메트릭 |
배치 성공 여부, 마지막 실행 시간 | ❌ | ✅ Custom metric으로 가능 |
디스크 쓰기/읽기 추세 | 부분만 (iowait) | ✅ node_disk_* 메트릭 |
네트워크 지연/트래픽량 | ❌ | ✅ node_network_* 메트릭 |
알람 / 경고 / 자동 감시 | ❌ | ✅ Grafana Alerts 가능 |