
스테이트풀셋 운영의 위기, 왜 모니터링이 생존의 문제일까요
새벽 3시, 갑작스러운 호출에 잠에서 깨어나 터미널을 열었을 때 데이터베이스 포드(Pod)가 죽어 있는 것을 발견했다면 얼마나 당혹스러울까요? 단순히 포드가 재시작되는 것을 넘어, 스토리지 볼륨(PVC) 연결이 끊기거나 데이터 동기화가 어긋나 있는 상태라면 상황은 훨씬 심각해져요. 일반적인 디플로이먼트(Deployment)와 달리 스테이트풀셋(StatefulSet)은 개별 포드가 고유한 정체성을 가지고 데이터를 직접 들고 있기 때문이에요.
온프레미스 환경에서 인프라를 운영하는 분들이라면 데이터 정합성이 깨졌을 때의 공포를 잘 알고 계실 거예요. 어떤 포드가 왜 문제가 생겼는지, 디스크 용량이 임계치에 도달한 것은 아닌지, 혹은 네트워크 지연으로 인해 복제(Replication)가 늦어지는 것인지 즉각 파악하지 못하면 장애 복구 시간은 걷잡을 수 없이 길어집니다.
단순히 “포드가 떠 있는가”를 확인하는 수준의 모니터링으로는 부족해요. 스테이트풀셋의 핵심인 상태 유지(Stateful)를 보장하기 위해서는 데이터와 정체성을 추적할 수 있는 정교한 관측성(Observability) 체계가 반드시 필요합니다. 이 글을 통해 복잡한 스테이트풀셋 환경을 한눈에 파악하고 관리할 수 있는 실무적인 방법을 전해드릴게요.
이번 가이드에서는 다음과 같은 내용을 집중적으로 다룹니다.
- 스테이트풀셋 운영 시 반드시 지켜봐야 할 핵심 지표
- 프로메테우스(Prometheus)를 활용한 메트릭 수집 구성법
- 로그 파이프라인을 통한 데이터 흐름 추적
- 효율적인 운영을 위한 대시보드와 알림 설정 전략
안정적인 관측을 위한 사전 준비와 판단 기준
본격적인 구축에 앞서 여러분의 환경에 어떤 도구가 적합한지 결정해야 해요. 모든 데이터를 다 수집하려다가는 오히려 모니터링 시스템 자체가 리소스를 다 잡아먹는 배보다 배꼽이 더 큰 상황이 발생할 수 있습니다. 스테이트풀셋은 스토리지와 밀접하게 연결되어 있으므로, 스토리지 계층의 상태를 얼마나 깊게 볼 것인가가 선택의 핵심입니다.
우선 현재 클러스터에 기본적인 프로메테우스와 그라파나(Grafana) 스택이 설치되어 있는지 확인하세요. 만약 로그 관리가 전무하다면 로그 수집기인 플루언트디(Fluentd)나 프로메테일(Promtail)을 도입할 준비도 함께 진행해야 합니다. 무엇을 먼저 구축할지 고민된다면 아래 비교 표를 참고해 보세요.
| 구분 | 메트릭 모니터링 | 로그 모니터링 | 권장 도입 시점 |
|---|---|---|---|
| 주요 대상 | CPU, 메모리, 디스크 I/O, 네트워크 | 애플리케이션 에러, 쿼리 로그, 시스템 로그 | 인프라 가용성 확보 단계 |
| 장점 | 실시간 상태 파악 및 즉각적 알림 | 장애 발생 원인(Root Cause) 분석 | 상태 이상 징후 발견 시 |
| 단점 | 상세한 에러 메시지 확인 불가 | 저장 공간 소모 및 검색 부하 | 상세 분석이 필요할 때 |
스테이트풀셋은 포드마다 고유한 인덱스(예: pod-0, pod-1)를 가집니다. 모니터링 도구를 구성할 때 이 인덱스를 기준으로 데이터를 그룹화할 수 있도록 레이블(Label) 설정을 설계하는 것이 매우 중요해요.
또한, 온프레미스 환경이라면 물리적 디스크의 성능 저하가 스테이트풀셋 포드의 성능 저하로 직결됩니다. 따라서 쿠버네티스 내부 메트릭뿐만 아니라, 노드 레벨의 디스크 I/O 성능 지표를 함께 수집할 수 있는 환경을 갖추는 것이 좋습니다. 준비가 끝났다면 이제 실제 수집 체계를 구축해 볼까요?
단계별 스테이트풀셋 관측 체계 구축 프로세스
이제 실제 실무 환경에서 작동하는 모니터링 체계를 구축해 보겠습니다. 단순히 툴을 설치하는 것을 넘어, 데이터가 유실되지 않고 의미 있는 정보를 제공하도록 구성하는 것이 핵심이에요.
STEP 1. 반드시 추적해야 할 핵심 지표 정의하기
스테이트풀셋 모니터링의 성공 여부는 “어떤 데이터를 보는가”에 달려 있습니다. 일반적인 서비스와 달리 다음 네 가지 영역에 집중해야 해요.
- 스토리지 상태: PVC(Persistent Volume Claim)의 사용량, 디스크 I/O Wait, Read/Write Throughput를 확인하세요. 디스크가 가득 차면 데이터베이스는 즉시 쓰기 중단 상태가 됩니다.
- 리소스 사용량: 포드별 CPU/Memory 사용량과 함께 Throttling(제한) 발생 여부를 살펴야 합니다.
- 네트워크 성능: 포드 간 복제 시 발생하는 지연 시간(Latency)과 패킷 손실을 관찰하세요.
- 애플리케이션 상태: 포드의 Readiness/Liveness Probe 성공 여부와 연결된 애플리케이션 내부의 상태 값(예: DB Replication Lag)을 가져와야 합니다.
디스크 사용량 지표를 볼 때, 단순히 전체 용량만 보지 마세요. inode 사용량이나 파일 시스템의 에러 로그를 함께 모니터링하지 않으면 디스크 용량은 충분해도 쓰기 오류가 발생할 수 있습니다.
STEP 2. 프로메테우스 기반 메트릭 수집 구성
가장 권장하는 방식은 Prometheus Operator를 사용하는 거예요. `ServiceMonitor`라는 커스텀 리소스를 활용하면 스테이트풀셋 포드들의 메트릭을 자동으로 찾아낼 수 있습니다.
먼저, 스테이트풀셋의 각 포드가 메트릭 엔드포인트를 노출하고 있는지 확인하세요. 그 후 다음과 같은 구조로 `ServiceMonitor`를 작성합니다. 이 설정은 프로메테우스가 특정 레이블을 가진 서비스들을 주기적으로 스크래핑(Scraping)하도록 지시합니다. 설정 파일 예시를 직접 코드로 작성하진 않지만, 핵심은 `selector` 부분에 스테이트풀셋의 레이블을 정확히 매칭시키는 것이에요. 이렇게 하면 새로운 포드가 추가되거나 삭제되어도 프로메테우스가 알아서 관리 대상에 포함시킵니다.
STEP 3. 로그 파이프라인 구축을 통한 추적성 확보
메트릭이 “무슨 일이 일어났는가”를 알려준다면, 로그는 “왜 일어났는가”를 알려줍니다. 스테이트풀셋은 포드가 재시작될 때 데이터 유실 방지를 위해 매우 민감하게 반응하므로 로그 흐름이 끊기면 안 됩니다.
현대적인 구성으로는 Loki와 Promtail 조합을 추천해요. 이 조합은 프로메테우스와 레이블 체계가 매우 유사해서 관리 효율성이 매우 높습니다. Promtail이 각 노드의 포드 로그를 수집할 때, 쿠버네티스 메타데이터(Namespace, Pod name, Container name)를 레이블로 붙여줍니다. 이렇게 하면 그라파나에서 특정 포드 인덱스(예: `mysql-0`)를 검색하여 해당 데이터베이스의 특정 시점 로그를 즉시 찾아낼 수 있어요.
STEP 4. 운영 효율을 높이는 대시보드 설계
모든 데이터를 화면에 띄우면 아무것도 보이지 않게 됩니다. 대시보드는 계층적으로 설계해야 해요. 전체 클러스터 보기 → 스테이트풀셋 그룹 보기 → 개별 포드 상세 보기 순서로 드릴다운(Drill-down)이 가능해야 합니다.
그라파나 대시보드에 반드시 포함해야 할 패널 예시는 다음과 같습니다.
- Storage Overview: 모든 PVC의 사용량 %를 막대그래프로 표시하여 임계치 근접 포드를 식별합니다.
- Pod Lifecycle: 포드의 재시작 횟수(Restart Count)를 시계열 그래프로 그려 급격한 변화를 감지합니다.
- Network Latency: 복제 노드 간의 응답 시간을 나타내는 Heatmap을 사용하여 네트워크 병목을 확인합니다.
STEP 5. 실무적인 알림(Alerting) 규칙 설정
알림은 너무 자주 오면 무시하게 되고, 너무 늦게 오면 소용이 없습니다. 알림 규칙은 치명도(Severity)에 따라 분류하세요.
예를 들어, 디스크 용량이 80%를 넘으면 `Warning` 알림을 보내 담당자가 업무 시간에 확인하게 하고, 95%를 넘거나 디스크 쓰기 오류가 발생하면 `Critical` 알림으로 분류하여 즉시 페이지(PagerDuty)를 울리도록 설정해야 합니다. 또한, 특정 포드가 5분 이상 `Pending` 상태에 머물러 있거나, 복제 지연(Replication Lag)이 설정한 초(second)를 초과할 때도 반드시 알림이 발생하도록 로직을 짜야 합니다.
알림 설정 시 ‘알림 폭풍(Alert Storm)’을 주의하세요. 하나의 장애로 수십 개의 포드에서 알림이 동시에 울릴 수 있습니다. 그룹화(Grouping) 기능을 사용하여 하나의 장애 원인에 대해 하나의 알림만 받도록 설정하는 것이 현명합니다.
자주 하는 실수와 해결법 및 자주 묻는 질문
스테이트풀셋 모니터링을 처음 구축할 때 운영자들이 흔히 빠지는 함정들이 있습니다. 이를 미리 알고 피하는 것만으로도 많은 시간을 아낄 수 있어요.
자주 하는 실수와 해결법
❌ 모든 포드의 메트릭을 하나로 합쳐서 보기
왜 발생하는가: 개별 포드의 정체성을 무시하고 전체 평균값만 보면, 특정 포드 하나가 죽어가는 징후를 놓치게 됩니다.
✅ 해결법: 반드시 포드 이름이나 인덱스를 기준으로 데이터를 분리(Breakdown)해서 관찰해야 합니다.
❌ 스토리지 용량만 보고 디스크 성능 무시하기
왜 발생하는가: 디스크 공간은 충분하지만, I/O 대기 시간(I/O Wait)이 높아져 애플리케이션이 멈추는 경우가 많기 때문입니다.
✅ 해결법: 용량 지표와 함께 IOPS, Latency, Throughput 지표를 반드시 병행 모니터링하세요.
❌ 알림 임계치를 너무 낮게 설정하기
왜 발생하는가: 일시적인 네트워크 스파이크나 가비지 컬렉션(GC)으로 인한 리소스 상승에도 알림이 울려 ‘알림 피로’를 유발합니다.
✅ 해결법: 단일 지표가 아닌, 일정 시간(예: 5분 이상) 지속될 때 알림이 울리도록 `for` 조건을 설정하세요.
❌ 로그 보존 기간(Retention) 미설정
왜 발생하는가: 로그가 무한정 쌓여서 스토리지 장애를 유발하거나, 정작 중요한 사고 발생 시 과거 로그를 찾지 못하게 됩니다.
✅ 해결법: 데이터 중요도에 따라 로그 보존 기간을 명확히 정하고, 오래된 로그는 오브젝트 스토리지로 아카이빙하는 전략을 쓰세요.
❌ Kubernetes 메타데이터 누락
왜 발생하는가: 로그나 메트릭에 포드 이름이 없으면, 수많은 포드 중 어떤 것이 문제인지 찾느라 시간을 허비하게 됩니다.
✅ 해결법: 수집 단계에서 반드시 쿠버네티스 레이블을 주입하도록 구성하세요.
자주 묻는 질문
Q. 특정 스테이트풀셋 포드 하나만 집중적으로 모니터링할 수 있나요?
네, 가능합니다. 프로메테우스의 쿼리(PromQL)에서 포드 이름을 필터로 지정하거나, 그라파나 대시보드에서 변수(Variable) 기능을 사용해 특정 포드만 선택하여 볼 수 있도록 구성하면 됩니다.
Q. PVC 용량이 꽉 찼을 때 자동으로 확장할 수 있는 모니터링 방법이 있나요?
직접적인 모니터링 기능은 아니지만, 용량이 80%에 도달했을 때 알림을 받은 후, 쿠버네티스의 Volume Expansion 기능을 통해 용량을 늘리는 운영 프로세스를 갖추는 것이 정석입니다.
Q. 애플리케이션 내부 지표(예: DB 커넥션 수)는 어떻게 가져오나요?
애플리케이션이 Prometheus 포맷의 엔드포인트를 노출하도록 하거나, JMX Exporter 같은 도구를 사용하여 내부 상태를 메트릭으로 변환한 뒤 수집해야 합니다.
Q. 로그가 너무 많아서 검색 속도가 너무 느려요. 어떻게 하죠?
인덱싱 전략을 점검해야 합니다. Loki를 사용 중이라면 적절한 레이블을 사용하고 있는지, 너무 많은 레이블을 남발하여 카디널리티(Cardinality) 문제가 생기지는 않았는지 확인해 보세요.
운영 관측성 확보를 위한 최종 정리
스테이트풀셋 모니터링은 단순한 설정이 아니라, 안정적인 서비스를 운영하기 위한 최소한의 보험입니다. 데이터의 정체성과 스토리지의 상태를 놓치지 않는 것, 그것이 핵심이에요. 오늘 배운 내용을 바탕으로 여러분의 클러스터를 더 견고하게 만들어 보세요.
- 스테이트풀셋은 포드 인덱스를 기준으로 메트릭을 분리해서 봐야 합니다.
- 스토리지 사용량뿐만 아니라 I/O 성능과 inode 상태를 반드시 체크하세요.
- 프로메테우스와 그라파나를 결합해 실시간 지표와 시계열 추이를 관리하세요.
- 로그 파이프라인 구축 시 쿠버네티스 레이블을 반드시 포함시켜 추적성을 높이세요.
- 알림은 치명도에 따라 분류하고, ‘알림 피로’를 방지하도록 설계해야 합니다.
지금 바로 시작할 수 있는 단계별 액션 플랜입니다.
- 오늘 할 일: 현재 스테이트풀셋 포드의 디스크 사용량 지표가 프로메테우스에 잘 수집되고 있는지 확인하세요.
- 이번 주 할 일: 가장 중요한 데이터베이스 포드에 대해 디스크 임계치 알림 규칙을 하나라도 생성해 보세요.
- 실행 직전 할 일: 장애 발생 시 로그를 즉시 검색할 수 있도록 그라파나 로그 패널을 대시보드에 추가해 보세요.
실습 환경에서 직접 구성해 보시다가 설정이 꼬이거나 메트릭이 보이지 않는다면, 언제든 댓글로 질문을 남겨 주세요. 함께 고민해 보겠습니다.
더 자세한 내용이 궁금하시다면 쿠버네티스 스테이트풀셋 기본 개념 글이나 클러스터 구축 입문 글도 함께 읽어 보시는 것을 추천합니다.