모니터링(Monitoring)은 시스템, 애플리케이션, 네트워크, 서버 등의 상태와 성능을 지속적으로 관찰하고 분석하는 과정을 말한다. 모니터링이 필요한 이유는 문제 예방, 빠른 대응, 성능 최적화, 사용자 경험 향상에 중요하기 때문이다. 모니터링의 종류로는 서버 모니터링, 애플리케이션 모니터링, 네트워크 모니터링, 로그 모니터링, 보안 모니터링 등이 있다.
모니터링의 주요 목적은 시스템이 정상적으로 작동하고 있는지 확인하고, 문제가 발생할 경우 이를 조기에 감지하여 신속하게 대응하는 것이다.
Spring Boot 애플리케이션의 상태와 성능을 모니터링하고 관리할 수 있도록 다양한 엔드포인트를 제공하는 기능을 한다. 헬스 체크, 메트릭스, 환경 정보, 로그 정보 등 여러 가지 중요한 정보를 쉽게 확인할 수 있도록 도와준다. Prometheus와 주로 사용된다.
설정 파일에서 엔드포인트를 활성화하거나 비활성화 하도록 설정할 수 있으며, 보안을 위해서 필요한 엔드포인트만 노출할 필요가 있다. 엔드포인트 보호는 다른 포트를 지정하거나 spring security를 통해서 접근 제어를 함으로써 가능하다.
오픈소스 모니터링 및 경고 도구로, 주로 애플리케이션 메트릭을 수집하고 쿼리하는 데 사용된다.시계열 데이터베이스를 사용하여 시간에 따라 변하는 메트릭 데이터를 수집하고, 쿼리 및 시각화를 통해 시스템 상태를 모니터링하고 경고를 설정할 수 있다.
Prometheus의 구성 요소로는 메트릭 데이터를 수집하고 저장하는 핵심 컴포넌트인 prometheus 서버, 특정 애플리케이션이나 시스템의 메트릭 데이터를 Prometheus가 이해할 수 있는 형식으로 변환해주는 도구인 Exporter, 푸시 방식으로 메트릭 데이터를 수집하기 위해 설계된 도구인 Pushgateway, Prometheus 서버에서 발생하는 경고(alert)를 처리하고, 이메일, PagerDuty, Slack 등 다양한 방법으로 알림을 보내는 Alertmanager, Prometheus 데이터를 시각화하기 위해 자주 사용되는 대시보드 도구인 Grafana 등으로 이루어져 있다.
#모든 엔드포인트 노출 설정
management.endpoints.web.exposure.include=*
#헬스 엔드포인트에서 헬스체크 정보 항상 상세히 보이도록 설정
management.endpoint.health.show-details=always
management.endpoint.prometheus.enabled=true
http://localhost:8080/actuator/prometheus 에 가면 프로메테우스 매트릭스를 확인할 수 있다.

global:
scrape_interval: 15s
scrape_configs:
- job_name: 'spring-boot'
metrics_path: '/actuator/prometheus'
static_configs:
- targets: ['host.docker.internal:8080']
docker run -d --name=prometheus -p 9090:9090 -v {설정파일의 경로}/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus

Grafana는 간단히 말하면 오픈소스 데이터 시각화 및 모니터링 도구로, 다양한 데이터 소스를 지원하여 데이터를 시각화하고 분석할 수 있도록 돕는다. 데이터를 시각화 할 수 있도록 대시보드를 생성하며, 다양한 데이터 소스를 지원하고, 다양한 채널을 통한 알림 기능이 있으며, 플러그인 기능을 통해 확장이 가능하며 사용자를 관리할 수도 있다.
docker run -d --name=grafana -p 3000:3000 grafana/grafana
localhost:3000에서 기본 계정 (geust/geust)로 로그인 후 대시보드 확인해보기
