pile·
인프라 / DevOps·스캐터랩스캐터랩 (이루다)·

이루다 서버의 모니터링 스택을 소개합니다

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 환경에서 모니터링 도구를 나열하는 수준을 넘어 서비스 지표를 장애 탐지와 원인 분석에 연결하는 방법을 얻을 수 있다.
스캐터랩
스캐터랩 (이루다) 블로그
원문은 여기서 이어서 읽을 수 있어요
원문 읽기
읽음 (0)

이 글과 비슷한

  1. 인프라 / DevOps·cloudflare-blogCloudflare Blog·

    대규모 도그푸딩: cdnjs를 Cloudflare 개발자 플랫폼으로 이전하다

    cdnjs는 하루 90억 요청을 처리하는 오픈소스 JS/CSS CDN으로, 전 세계 웹사이트의 12%가 의존한다. 2026년 6월, Cloudflare는 6년간 GCP에서 운영하던 발행 파이프라인을 Workers, Workflows, R2, KV, Queues, Containers, Durable Objects로 완전 전환했다. 성능 문제가 아닌 관측성·유지보수성 한계가 동인이었으며, 마이그레이션 과정에서 플랫폼 한도를 직접 끌어올렸다.

    #durable-objects#workflows#cloudflare-workers+2
  2. 인프라 / DevOps·github-engGitHub Engineering·

    Dependabot 길들이기: 업데이트 묶고, 주기 늦추고, 보안은 빠르게

    GitHub의 Dependabot은 의존성 업데이트를 자동화하지만, 기본 설정에서는 10개 업데이트 = 10개 PR이 쏟아져 메인테이너가 알림을 무시하게 된다. Microsoft의 GCToolkit 사례(578개 커밋 중 92개가 Dependabot 버전 범프)를 바탕으로, 그룹핑·주기 조절·보안 업데이트 분리 3가지 설정으로 노이즈를 줄이면서 보안 속도는 유지하는 방법을 다룬다.

    #github-actions#devops#supply-chain-security+2
  3. 인프라 / DevOps·cloudflare-blogCloudflare Blog·

    Cloudflare, 프라이버시 프로토콜 디버깅 CLI pvcli 오픈소스 공개

    Cloudflare가 OHTTP(Oblivious HTTP) 등 프라이버시 보존 프로토콜 디버깅을 위한 CLI 도구 pvcli를 오픈소스(Apache-2.0)로 공개했다. 기존에는 RFC를 참조하며 바이너리를 수작업으로 파싱해야 했는데, pvcli는 curl과 유사한 문법으로 이 과정을 단일 명령으로 줄인다. Apple Private Relay·Microsoft Edge Secure Network를 구동하는 실전 규모의 경험에서 나온 도구다.

    #rust#cli#ohttp+2