모니터링 서비스
CloudWatch

- AWS의 각종 리소스 및 해당 리소스 내에서 실행되는 애플리케이션에 대한 실시간 모니터링이 가능
- AWS EC2와 연계하기 쉽고 대시보드, 알림, 통합 로그 등 다양한 기능을 지원함
ELK 스택(Elasticsearch, Logstash, Kibana)
+ Kafka(실제로 구현한 서비스)

ELK Stack: Elasticsearch, Kibana, Beats, Logstash
- 로그 모니터링에 특화된 Elasticsearch, Logstash, Kibana 세 개를 함께 사용하는 ELK 스택
- Elasticsearch로 인해 유연한 로그 분석이 가능하다. 검색 및 필터링 기능이 강력함
- 메트릭 데이터보다는 로그 처리에 특화되어 있음
Prometheus + Grafana


- 서버 메트릭 수집 및 시각화를 위해 함께 사용
- Prometheus는 서버 메트릭을 처리하며 Grafana를 함께 사용하면 이 메트릭 데이터를 더 효과적으로 시각화할 수 있음

- Promtail, Loki를 각각 Application Server, Monitoring Server에 설치하면 SpringBoot App에서 발생시킨 로그 데이터를 Monitoring Server에서 Grafana가 처리 가능한 형태로 가공하고 저장할 수 있음 (Loki Stack)
SpringBoot Actuator + Prometheus
Web Server Side
- build.gradle에 애플리케이션 모니터링을 위해 actuator를 추가하고 prometheus를 위한 micrometer를 추가하면 별도의 세부 설정 없이도 관심을 가질 만한 대부분의 서버 메트릭을 수집해줌
javascriptdependencies { implementation 'org.springframework.boot:spring-boot-starter-actuator' implementation 'io.micrometer:micrometer-registry-prometheus' }
- application.yml
yamlmanagement: endpoints: web: exposure: include: prometheus endpoint: prometheus: enabled: true
- 메트릭으로 포함할 수 있는 사항들
- CPU 사용량
- GC
- HTTP 요청, 응답 시간
- DataSource
- 가동 시간
- Logback 관련
- Logback으로 남긴 로그 자체를 볼 수는 없음
- 에 접속하면 상상할 수 있는 대부분의 서버 메트릭을 이미 수집하는 것을 볼 수 있음javascript
/actuator/prometheus

actuator를 사용하는 방식을 선택한다면 외부인이 접속 가능한 endpoint를 하나 여는 것과 같으므로 보안에도 신경을 써야 함
Nginx와 같은 Reverse Proxy로 접근을 제한하거나 Spring Security, 혹은 IP Whitelisting과 같은 절차를 추가해 주는 것이 좋음
Prometheus
-
WAS가 만든 데이터를 Monitoring Server의 Prometheus에서 수집해 Grafana가 시각화할 수 있는 형태로 가공하도록 함
-
javascript
prometheus.yml
- 15초마다 설정된 job들에 대한 데이터를 수집
- 설정한 job이 수집하는 데이터
- Monitoring Server의 Prometheus 프로세스에 대한 Metric
- 메모리 사용, 처리량, 쿼리 성능 등을 포함
- 추가적으로 설치한 Node Exporter가 수집하는 Monitoring Server의 CPU, RAM, Disk 등의 리소스
- 목표한 Spring Boot App의 actuator로 열어둔 endpoint를 통한 데이터
- Monitoring Server의 Prometheus 프로세스에 대한 Metric
-
각 job에 대한 scrape 주기 등을 더 세밀하게 조정할 수 있음
Grafana
Spring Boot 3.x Statistics | Grafana Labs
- Prometheus 자체적으로도 기본적인 시각화가 가능함
- 보다 사용자에게 편한 형태는 Grafana에서 제공함
- 다양한 대시보드 템플릿을 손쉽게 선택해서 사용할 수 있음


-
Prometheus 자체에 대한 데이터도 별도의 대시보드로 시각화할 수 있음
-
javascript
/lib/systemd/system/prometheus.service
-
prometheus에 대한 추가적인 설정은 프로세스를 실행시킬 때 옵션을 주면 됨
-
스토리지 관련 옵션
- 기본 설정에서는 데이터를 15일간 유지함
javascriptprometheus --config.file=prometheus.yml --storage.tsdb.retention.time=30d