📄 설명
동일한 물리 서버에서 운영/스테이징 환경이 함께 실행되고 있지만, 모니터링 스택도 운영/스테이징별로 각각 복제되어 있다.
현재 cadvisor와 cadvisor-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 부여
✅ 리팩토링 내용
💡 참고 자료
운영 관점 주의사항:
- 기존 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"
📄 설명
동일한 물리 서버에서 운영/스테이징 환경이 함께 실행되고 있지만, 모니터링 스택도 운영/스테이징별로 각각 복제되어 있다.
현재
cadvisor와cadvisor-stg는 모두 동일한 Host 리소스를 마운트하여 같은 Docker 환경을 중복 수집한다.//var/run/sys/var/lib/dockernode-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 경로를 참조한다.cadvisorCPU 사용률이 각각 약 10~20% 수준으로 관측되어 중복 실행 비용이 크다.mysqld-exporter는 MySQL 인스턴스 단위 수집기이므로 운영 DB와 스테이징 DB가 분리되어 있다면 각각 유지할 수 있다.동일 물리 서버에서 운영/스테이징을 함께 실행하는 현재 구조에서는 모니터링 스택을 환경별로 복제하기보다, 단일 모니터링 스택에서 label로 환경을 구분하는 구성이 적절하다.
권장 구조:
Grafana1개Prometheus1개Loki1개Promtail1개node-exporter1개cadvisor1개mysqld-exporter는 MySQL 인스턴스별 유지 가능envlabel 부여✅ 리팩토링 내용
cadvisor와node-exporter는 Host 단위 exporter로 1개만 유지한다.mysqld-exporter는 운영 DB/스테이징 DB metric이 명확히 구분되도록 job name과 label을 정리한다.promtail은 1개만 유지하고 Docker label 기반으로env또는compose_project를 부여한다./tmp가 아닌 영속 볼륨에 저장하도록 변경한다.cadvisor-stg,node-exporter-stg, 중복promtail-stg, 중복loki-stg, 중복grafana-stg제거를 검토한다.cadvisor컨테이너가 1개만 실행되는지 확인한다.node-exporter컨테이너가 1개만 실행되는지 확인한다.envlabel로 구분되어 조회되는지 확인한다.envlabel로 구분되어 조회되는지 확인한다.compose_project또는env기준 필터링이 가능한지 확인한다.💡 참고 자료
운영 관점 주의사항:
job,instance, container name에 강하게 의존하고 있을 수 있어 이관 시 query 수정이 필요할 수 있다.mysqld-exporter설정 파일이 운영/스테이징에서 동일하게 사용되고 있으므로 실제 접속 대상과 계정 분리 여부를 확인해야 한다.예상 label 기준:
env="prod"env="stg"compose_project="docsa"compose_project="docsa-stg"host="homeserver"