
데몬셋 모니터링이 왜 클러스터 운영의 핵심일까요
새로운 워커 노드를 클러스터에 추가했는데, 갑자기 로그 수집이 끊기거나 네트워크 보안 에이전트가 동작하지 않는 상황을 겪어보셨나요? 분명히 노드는 정상이라고 나오는데, 정작 중요한 시스템 서비스들이 제대로 올라오지 않아 당황스러웠던 경험이 있을 거예요. 데몬셋(DaemonSet)은 모든 노드에 반드시 하나씩 실행되어야 하는 핵심 컴포넌트이기 때문에, 이들의 상태를 놓치는 순간 클러스터 전체의 관측성이 무너져요.
플랫폼 팀의 테크리드라면 단순히 ‘포드가 떠 있는가’를 넘어, ‘모든 노드에 의도한 대로 배포되었는가’와 ‘리소스가 적절하게 할당되었는가’를 끊임없이 의심해야 해요. 데몬셋 모니터링이 제대로 이루어지지 않으면, 특정 노드에서만 발생하는 로그 유실이나 네트워크 지연 문제를 발견하기가 매우 어려워요. 이는 결국 서비스 장애로 이어지고, 원인을 파악하는 데에도 엄청난 시간을 허비하게 만들죠.
이 글에서는 데몬셋을 안정적으로 운영하기 위한 실무적인 접근법을 다뤄요. 단순히 도구를 설치하는 법을 넘어, 어떤 지표를 우선적으로 봐야 하는지, 로그 파이프라인은 어떻게 설계해야 효율적인지, 그리고 장애 발생 시 즉각 대응할 수 있는 알림 체계를 어떻게 구축하는지 상세히 설명해 드릴게요.
- 데몬셋 운영 시 반드시 확인해야 할 핵심 지표와 메트릭
- 프로메테우스와 로키를 활용한 효율적인 수집 구성
- 실무에서 바로 쓰는 그라파나 대시보드 설계 패턴
- 장애를 즉각 인지할 수 있는 알림 규칙 설정법
모니터링 환경 구축을 위한 사전 준비 사항
데몬셋 모니터링을 시작하기 전에 현재 클러스터의 환경을 점검하는 과정이 꼭 필요해요. 무턱대고 도구를 설치하기보다는, 우리 팀의 인프라 규모와 예산, 그리고 운영 역량에 맞는 도구를 선택해야 하거든요. 데몬셋 모니터링의 목표는 단순히 데이터를 쌓는 것이 아니라, 장애 징후를 빠르게 포착하여 대응 시간을 줄이는 것에 있어요.
먼저 현재 사용 중인 쿠버네티스 버전과 설치된 오브젝트들의 상태를 파악하세요. 특히 데몬셋이 주로 담당하는 역할(예: 로그 수집, 메트릭 수집, 서비스 메시 에이전트)이 무엇인지에 따라 데이터의 양과 저장 방식이 완전히 달라질 수 있어요. 예를 들어, 로그 수집 에이전트 자체를 모니터링하는 것은 ‘자기 자신을 감시하는’ 매우 중요한 작업이에요.
모니터링 스택 선택 기준 비교
도구를 선택할 때는 관리의 편의성과 비용, 그리고 확장성을 모두 고려해야 해요. 아래 표를 참고해서 현재 상황에 가장 적합한 조합을 고민해 보세요.
| 비교 항목 | Prometheus + Loki (PLG) | ELK (Elasticsearch) 스택 | Managed 서비스 (Datadog 등) |
|---|---|---|---|
| 운영 난이도 | 중간 (직접 관리 필요) | 높음 (클러스터 리소스 소모 큼) | 낮음 (완전 관리형) |
| 비용 구조 | 저렴 (스토리지 비용 위주) | 높음 (인덱싱 비용 발생) | 높음 (데이터 양에 비례) |
| 로그/메트릭 통합 | 우수 (그라파나 중심) | 보통 (별도 툴 필요할 수 있음) | 매우 우수 (통합 뷰 제공) |
많은 팀이 처음에는 비용 절감을 위해 Prometheus와 Loki 조합으로 시작하는 경우가 많아요. 이 조합은 쿠버네티스 네이티브한 환경에서 데몬셋의 메트릭과 로그를 연결해서 보기에 매우 유리하거든요. 하지만 클러스터 규모가 커지면 스토리지 관리와 쿼리 성능 최적화라는 새로운 숙제가 기다리고 있다는 점을 꼭 기억해야 해요.
데몬셋의 로그를 수집하는 에이전트(예: Fluent-bit)가 로그를 수집하다가 리소스 부족으로 죽어버리면, 클러스터 전체의 로그가 유실될 수 있어요. 반드시 모니터링 대상과 모니터링 도구 간의 리소스 격리를 고민해야 해요.
데몬셋 모니터링 체계 구축 4단계
이제 본격적으로 모니터링을 구성해 볼까요? 단순히 도구를 깔아두는 것이 아니라, 데이터가 흐르는 파이프라인을 설계한다는 관점으로 접근해야 해요. 크게 메트릭 수집, 로그 파이프라인, 시각화, 그리고 알림의 네 가지 단계로 나누어 진행할게요.
STEP 1. 핵심 메트릭 수집 구성하기
데몬셋의 상태를 확인하기 위해서는 단순히 ‘Pod가 떠 있는가’만 봐서는 안 돼요. 쿠버네티스의 상태를 알려주는 kube-state-metrics를 반드시 포함해야 해요. 이를 통해 데몬셋의 선언적 상태(Desired)와 현재 실제 상태(Current)를 비교할 수 있거든요.
우선적으로 수집해야 할 핵심 지표는 다음과 같아요. 첫째, 데몬셋 스케줄링 성공 여부예요. `kube_daemonset_status_desired_number_of_pods`와 `kube_daemonset_status_number_of_pods_ready` 값을 비교하여, 노드 개수만큼 데몬셋 포드가 정상적으로 올라왔는지 확인해야 해요. 만약 이 두 값이 다르다면, 특정 노드에서 데몬셋이 배포되지 못하고 있다는 강력한 신호예요.
둘째, 포드 재시작 횟수(Restart Count)를 꼭 봐야 해요. 데몬셋은 시스템 서비스 역할을 하는 경우가 많아서, 재시작이 빈번하다면 리소스 경합(OOMKill)이나 설정 오류가 발생하고 있을 가능성이 매우 높아요. 마지막으로 각 노드별 리소스 사용량(CPU, Memory)을 수집하여, 데몬셋이 노드의 자원을 과도하게 점유하여 다른 워크로드에 영향을 주지는 않는지 체크해야 해요.
STEP 2. 안정적인 로그 파이프라인 설계
데몬셋은 주로 로그 수집기나 보안 에이전트처럼 ‘데이터를 생산하거나 전달하는’ 역할을 수행해요. 따라서 이들의 로그를 확인하는 것은 장애 원인 파악의 시작점이에요. 가장 권장하는 구성은 Fluent-bit를 데몬셋으로 띄우고, 이를 Loki로 전송하는 방식이에요.
로그 파이프라인을 구축할 때는 다음 시나리오를 고려하세요. 먼저, Fluent-bit가 각 노드의 `/var/log/pods` 경로를 올바르게 태일링(Tailing)하고 있는지 확인해야 해요. 이때 로그에 노드 이름, 네임스페이스, 포드 이름 같은 메타데이터가 정확히 붙어 있어야 나중에 그라파나에서 필터링하기 편해요.
특히 주의할 점은 로그 병목 현상이에요. 특정 노드에서 로그가 폭발적으로 발생할 때, 데몬셋 에이전트가 이를 감당하지 못하면 로그 유실은 물론이고 에이전트 자체가 느려지면서 노드 전체의 성능 저하를 초래할 수 있어요. 이를 방지하기 위해 에이전트의 리소스 제한(Limits)을 설정하되, 로그 버퍼 크기를 적절히 조절하는 세밀한 튜닝이 필요해요.
STEP 3. 직관적인 그라파나 대시보드 구성
수집된 데이터는 사람이 읽기 편하게 시각화해야 해요. 데몬셋 모니터링을 위한 대시보드는 크게 세 가지 관점으로 구성하는 것이 좋아요.
- 클러스터 전체 요약 뷰: 전체 노드 중 데몬셋이 정상 동작 중인 노드의 비율, 전체 데몬셋 포드의 재시작 합계, 현재 발생 중인 알림 현황을 한눈에 보여줘야 해요.
- 데몬셋별 상세 뷰: 특정 데몬셋(예: Fluent-bit)을 선택했을 때, 해당 데몬셋의 CPU/Memory 사용량 추이, 노드별 포드 상태, 에러 로그 빈도를 보여주는 화면이에요.
- 노드별 비교 뷰: 각 노드마다 데몬셋이 동일한 리소스를 사용하는지 비교하는 표를 만들어야 해요. 특정 노드에서만 리소스 사용량이 튀고 있다면 해당 노드의 하드웨어 문제나 설정 차이를 의심해 볼 수 있기 때문이에요.
대시보드를 만들 때는 너무 많은 정보를 한 화면에 넣지 마세요. 핵심 지표를 가장 상단에 배치하고, 문제가 생겼을 때 아래로 내려가면서 상세 내용을 파악할 수 있는 계층적 구조를 갖추는 것이 실무적인 노하우예요.
STEP 4. 실효성 있는 알림(Alerting) 규칙 설정
모니터링의 완성은 알림이에요. 알림은 ‘너무 자주 오지도, 너무 늦게 오지도 않아야’ 해요. 이를 위해 Alertmanager를 활용한 단계별 알림 전략을 세워야 합니다.
먼저, Critical 알림은 즉시 대응이 필요한 상황에만 보낼 것을 권장해요. 예를 들어 ‘데몬셋 포드 수가 노드 개수보다 적을 때(Desired != Ready)’나 ‘에이전트가 OOMKill로 인해 계속 재시작될 때’가 해당돼요. 이런 알림은 슬랙(Slack)이나 PagerDuty 같은 긴급 채널로 전송해야 해요.
반면, Warning 알림은 주의 깊게 살펴봐야 할 상황에 사용해요. 예를 들어 ‘데몬셋의 리소스 사용량이 평소보다 20% 이상 증가했을 때’나 ‘로그 전송 지연(Lag)이 발생하기 시작할 때’예요. 이런 알림은 이메일이나 대시보드에 표시하여 다음 정기 점검 때 확인할 수 있도록 관리하는 것이 효율적이에요.
알림 규칙을 설정할 때는 반드시
for: 5m와 같이 일정 시간 동안 상태가 유지될 때만 알림이 발생하도록 설정하세요. 일시적인 네트워크 순단으로 인한 ‘플래핑(Flapping)’ 현상 때문에 불필요한 알림을 받는 것을 막아줍니다.자주 하는 실수와 해결법 및 FAQ
데몬셋을 운영하다 보면 이론과 실무가 다른 상황을 자주 마주하게 돼요. 많은 엔지니어가 공통적으로 겪는 실수들을 정리했으니, 현재 운영 중인 환경과 비교해 보세요.
자주 하는 실수와 해결법
❌ 실수: Taint와 Toleration 설정을 누락하여 특정 노드에 데몬셋이 안 떠요
왜 발생하는가: 마스터 노드나 GPU 전용 노드처럼 Taint가 걸려 있는 노드에는 기본적으로 포드가 스케줄링되지 않기 때문이에요.
✅ 해결법: 데몬셋 설정에 해당 노드의 Taint를 허용하는 tolerations 섹션을 명확히 추가해 주세요.
❌ 실수: 리소스 Limit을 너무 낮게 잡아 에이전트가 죽어요
왜 발생하는가: 로그 양이 갑자기 늘어나는 피크 타임에 에이전트가 메모리 한계를 넘어서 OOMKill을 당하는 경우예요.
✅ 해결법: 평상시 사용량의 최소 2~3배 정도는 Limit으로 설정하고, 반드시 리소스 사용량 모니터링을 병행하세요.
❌ 실수: 모든 로그를 다 수집하려고 해서 스토리지 비용이 폭증해요
왜 발생하는가: 데몬셋의 로그 레벨을 DEBUG로 설정해 두었거나, 불필요한 시스템 로그까지 전부 수집하고 있기 때문이에요.
✅ 해결법: 프로덕션 환경에서는 로그 레벨을 INFO 또는 WARN으로 조정하고, 필요한 로그 패턴만 필터링하는 규칙을 적용하세요.
❌ 실수: 네트워크 대역폭을 고려하지 않은 로그 전송
왜 발생하는가: 대량의 로그를 한꺼번에 중앙 서버로 보내면서 노드의 네트워크 인터페이스에 부하를 주는 경우예요.
✅ 해결법: 에이전트의 전송 속도를 조절(Throttling)하거나, 배치(Batch) 단위로 묶어서 보내는 설정을 활용하세요.
❌ 실수: 모니터링 도구 자체의 가용성을 간과해요
왜 발생하는가: 데몬셋 모니터링 도구가 돌아가는 노드가 죽으면, 정작 장애를 알려줄 모니터링 데이터도 같이 사라지기 때문이에요.
✅ 해결법: 모니터링 인프라는 최대한 가용성이 높은 별도의 노드 풀이나 관리형 서비스를 활용하세요.
자주 묻는 질문
Q. 데몬셋 포드가 모든 노드에 다 떠 있는지 어떻게 빠르게 확인할 수 있나요?
kubectl get daemonset [데몬셋이름] 명령어를 치면 DESIRED와 READY 숫자가 나와요. 이 두 숫자가 일치하지 않는다면 특정 노드에서 문제가 있는 것이니, kubectl get pods -o wide로 어느 노드에 포드가 없는지 확인해 보세요.
Q. 데몬셋 로그를 확인할 때 특정 노드 로그만 골라낼 수 있나요?
네, 가능해요. Fluent-bit 같은 에이전트가 로그에 노드 이름을 라벨로 붙이도록 설정했다면, 그라파나에서 {node=
안정적인 데몬셋 운영을 위한 마지막 점검
데몬셋 모니터링은 한 번 설정하고 끝나는 작업이 아니에요. 클러스터가 확장되고 워크로드가 변함에 따라 모니터링 체계도 함께 진화해야 하죠. 오늘 다룬 내용을 바탕으로 여러분의 클러스터가 건강하게 숨 쉬고 있는지 다시 한번 점검해 보시길 바라요.
- Desired와 Ready 포드 수가 일치하는지 상시 감시하세요.
- 포드 재시작 횟수를 통해 에이전트의 불안정성을 조기에 발견하세요.
- 로그 파이프라인 구축 시 에이전트의 리소스 격리와 버퍼 설정이 필수예요.
- 그라파나 대시보드는 ‘전체 요약 – 상세 정보 – 노드 비교’ 순으로 구성하세요.
- 알림은 Critical과 Warning으로 나누어 피로도를 관리하세요.
- Taint/Toleration 설정을 확인하여 스케줄링 누락을 방지하세요.
이제 실천에 옮길 차례예요. 당장 오늘 할 일은 현재 운영 중인 데몬셋의 리소스 사용량 추이를 확인하는 것이고, 이번 주 안에는 위에서 언급한 핵심 지표들이 알림으로 잘 들어오는지 테스트해 보는 것을 추천드려요. 만약 구성 과정에서 설정 파일(YAML) 작성이나 쿼리 작성 중에 막히는 부분이 있다면 언제든 댓글로 질문을 남겨 주세요. 함께 고민해 드릴게요!
이 글이 도움이 되셨다면, 함께 읽어보면 좋은 쿠버네티스 데몬셋 기본 개념 글이나 클러스터 구축 입문 글도 확인해 보세요. 여러분의 안정적인 플랫폼 운영을 응원합니다!