Spring Boot와 FastAPI 서비스를 Kubernetes에서 운영하며 Prometheus, Grafana, Micrometer로 하나의 모니터링 체계를 만든 사례다. 도구 설치보다 어떤 지표를 왜 볼지에 초점을 맞춰 HTTP 요청, 커넥션 풀, JVM 스레드·메모리와 비즈니스 지표를 장애 대응 흐름에 연결한다.
핵심 포인트- Prometheus가 Spring Boot, FastAPI, Kubernetes 지표를 pull 방식으로 모으고 Grafana가 CloudWatch·Cloud Logging까지 통합해 시각화한다.
- Spring Boot Actuator와 Micrometer로 `/actuator/prometheus`를 노출하고, `MeterRegistry`로 서비스 고유 지표를 추가한다.
- 누적 counter와 PromQL `rate()`를 사용하면 스크래핑 주기가 바뀌어도 요청률을 안정적으로 계산할 수 있다.
- HTTP 서버·클라이언트, DB 커넥션 풀, JVM 스레드와 GC, 파드 메모리를 함께 봐야 실제 병목을 구분할 수 있다.
- 가능한 모든 지표보다 대화량처럼 사용자 영향과 직결되는 핵심 지표에서 시작하고 장애 회고를 통해 알람을 확장한다.
상세 정리- 전체 구성: Docker 이미지로 만든 Spring Boot와 FastAPI 모델 서버를 Kubernetes에 배포하고, Prometheus가 각 서비스와 클러스터 지표를 한곳에 수집한다.
- 수집 방식: Prometheus는 대상 서버를 주기적으로 호출한다. 최근 N초 값은 스크래핑 간격 사이 데이터를 잃을 수 있어 누적 counter를 제공하는 편이 안전하다.
- 장기 보관: 로컬 TSDB는 retention time·size로 오래된 지표를 삭제한다. 분석 가치가 있는 과거 데이터는 remote storage adapter로 BigQuery에 적재했다.
- 시각화·알림: Grafana에 Prometheus뿐 아니라 Amazon CloudWatch와 Google Cloud Logging을 붙이고, 정상 범위를 벗어나면 Slack으로 알린다.
- Actuator 설정: actuator와 micrometer-registry-prometheus 의존성을 추가하고 prometheus endpoint를 노출한다. 운영에서는 민감한 지표 API 접근을 제한해야 한다.
- 사용자 지표: `registry.counter("push").increment()`처럼 카운터를 추가하면 `push_total`이 생성된다. 루다가 먼저 보낸 메시지 수는 유입 트래픽과 연결되는 비즈니스 지표다.
- HTTP 서버: `http_server_requests_seconds_{count,sum,max}`로 URI별 요청량과 지연을 보고, Tomcat 전체 요청은 `tomcat_global_request_seconds_count`로 확인한다.
- 서비스 간 호출: Istio의 `istio_requests_total`은 송신·수신 서비스 양쪽 정보를 담아 마이크로서비스 요청 경로 추적에 유용하다.
- HTTP 클라이언트: Spring의 `WebClient.Builder`는 `http_client_requests` 계열 지표를 제공한다. 별도 클라이언트는 binder로 커넥션 풀 상태를 계측한다.
- DB 병목: JDBC는 `hikaricp_connections_active`, MongoDB는 pool checked-out과 command duration을 본다. 관리형 DB 내부 지표는 CloudWatch를 Grafana에 합쳤다.
- JVM 상태: `jvm_threads_states_threads`에서 waiting이 장시간 많으면 교착을 의심하되 위치 확인은 `jstack`이 필요하다. GC pause와 heap 사용량도 함께 본다.
- 파드 메모리: request·limit이 작으면 OOMKill, 크면 낭비가 생기고 미설정 시 BestEffort로 먼저 축출될 수 있다. 컨테이너 사용량과 JVM GC 지표를 함께 조정한다.
- 운영 원칙: 대화 요청·발송량 급감으로 장애를 탐지한 뒤 DB 처리량과 활성 스레드 알람을 보강했다. 지표는 대응 우선순위와 조치에 연결될 때 의미가 있다.
왜 읽나Spring Boot와 Kubernetes 환경에서 모니터링 도구를 나열하는 수준을 넘어 서비스 지표를 장애 탐지와 원인 분석에 연결하는 방법을 얻을 수 있다.