Skip to content

Refactor: 운영/스테이징 모니터링 스택 중복 수집 구조 개선 #207

Description

@lunarbae628

📄 설명

동일한 물리 서버에서 운영/스테이징 환경이 함께 실행되고 있지만, 모니터링 스택도 운영/스테이징별로 각각 복제되어 있다.

현재 cadvisorcadvisor-stg는 모두 동일한 Host 리소스를 마운트하여 같은 Docker 환경을 중복 수집한다.

  • /
  • /var/run
  • /sys
  • /var/lib/docker

node-exporter, promtail도 동일한 Host 또는 Docker daemon 기준 데이터를 중복 수집하는 구조다. 운영/스테이징 Prometheus는 각각 별도 네트워크의 exporter를 scrape하지만, 실제 수집 대상은 같은 물리 서버이므로 환경 격리가 아니라 중복 수집에 가깝다.

확인된 주요 내용:

  • cadvisor, cadvisor-stg 모두 동일한 Host filesystem/Docker daemon을 참조한다.
  • node-exporter, node-exporter-stg 모두 동일한 Host rootfs를 참조한다.
  • promtail, promtail-stg 모두 같은 Docker socket, Docker container log directory, /var/log, MySQL slowlog 경로를 참조한다.
  • cadvisor CPU 사용률이 각각 약 10~20% 수준으로 관측되어 중복 실행 비용이 크다.
  • Loki 데이터 볼륨도 운영/스테이징 각각 약 2.2GB 수준으로 확인되어 로그 중복 저장 가능성이 있다.
  • mysqld-exporter는 MySQL 인스턴스 단위 수집기이므로 운영 DB와 스테이징 DB가 분리되어 있다면 각각 유지할 수 있다.

동일 물리 서버에서 운영/스테이징을 함께 실행하는 현재 구조에서는 모니터링 스택을 환경별로 복제하기보다, 단일 모니터링 스택에서 label로 환경을 구분하는 구성이 적절하다.

권장 구조:

  • Grafana 1개
  • Prometheus 1개
  • Loki 1개
  • Promtail 1개
  • node-exporter 1개
  • cadvisor 1개
  • mysqld-exporter는 MySQL 인스턴스별 유지 가능
  • Spring Actuator target은 운영/스테이징별로 분리 scrape하고 env label 부여

✅ 리팩토링 내용

  • 단일 Prometheus가 운영/스테이징 app metric을 모두 scrape하도록 target과 label을 정리한다.
  • cadvisornode-exporter는 Host 단위 exporter로 1개만 유지한다.
  • mysqld-exporter는 운영 DB/스테이징 DB metric이 명확히 구분되도록 job name과 label을 정리한다.
  • promtail은 1개만 유지하고 Docker label 기반으로 env 또는 compose_project를 부여한다.
  • Promtail positions 파일을 /tmp가 아닌 영속 볼륨에 저장하도록 변경한다.
  • Loki retention/compactor 설정을 명확히 한다.
  • Grafana는 운영/스테이징을 스택 복제가 아니라 folder, dashboard variable, alert label 기준으로 분리한다.
  • 이관 후 cadvisor-stg, node-exporter-stg, 중복 promtail-stg, 중복 loki-stg, 중복 grafana-stg 제거를 검토한다.
  • cadvisor 컨테이너가 1개만 실행되는지 확인한다.
  • node-exporter 컨테이너가 1개만 실행되는지 확인한다.
  • 운영/스테이징 app metric이 env label로 구분되어 조회되는지 확인한다.
  • 운영/스테이징 MySQL metric이 job 또는 env label로 구분되어 조회되는지 확인한다.
  • Grafana 대시보드에서 운영/스테이징 필터링이 가능한지 확인한다.
  • Loki 로그에서 compose_project 또는 env 기준 필터링이 가능한지 확인한다.
  • 중복 exporter 제거 후 cAdvisor CPU 사용률과 Loki/Prometheus 저장 증가량이 감소하는지 확인한다.

💡 참고 자료

운영 관점 주의사항:

  • 기존 Grafana dashboard query가 job, instance, container name에 강하게 의존하고 있을 수 있어 이관 시 query 수정이 필요할 수 있다.
  • 단일 Prometheus로 통합하면 운영/스테이징 alert rule을 label 기준으로 분리해야 한다.
  • mysqld-exporter 설정 파일이 운영/스테이징에서 동일하게 사용되고 있으므로 실제 접속 대상과 계정 분리 여부를 확인해야 한다.
  • 같은 물리 서버에서 운영/스테이징을 함께 실행하는 한, 모니터링 스택을 분리해도 장애 격리는 제공되지 않는다. 진짜 격리가 필요하면 Host 또는 VM 분리가 필요하다.

예상 label 기준:

  • env="prod"
  • env="stg"
  • compose_project="docsa"
  • compose_project="docsa-stg"
  • host="homeserver"

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions