Kubernetes 모니터링

클러스터, 워크로드, 스팬을 한 화면에서

Helm 차트 하나만 설치하세요. kubelet, 호스트, kube-state 메트릭이 OTLP로 흘러 들어옵니다. OpenTelemetry Operator가 모든 스팬에 pod 식별 정보를 주입하므로, 느린 요청에서 실제 처리한 레플리카로 바로 이동할 수 있습니다.

움직임

느린 스팬 아래에 있는 파드.

클러스터에 Helm 차트를 올리기만 하면 됩니다. kubelet·호스트·kube-state 메트릭이 OTLP로 흘러들고, OpenTelemetry Operator가 모든 스팬에 파드와 노드 식별자를 새깁니다.

pod heatmap · 192 pods · cluster cpu 44% LIVE
PODS 192
RUNNING 184
DEGRADED 6
FAILING 2
HOT >78% 11
default default 72
observability obs 32
kube-system kube-sys 40
ingress-nginx ingress 24
data data 24
CPU
0% 100% degraded failing

클러스터 콘솔

워크로드, Pod, 노드 — 하나의 필터 사이드바

플랫폼 팀이 실제로 사용하는 같은 뷰. 네임스페이스 안의 deployment, 특정 노드까지 좁히거나 클러스터 전체를 라이브로 모니터링.

cluster: prod-us-east-1 LIVE
infra › kubernetes › workloads
지난 12시간 새로고침 라이브 10s
Nodes 12
Workloads 8
Cluster CPU 42%
Cluster MEM 54%

워크로드

deployment, statefulset, daemonset별로 집계된 Pod 메트릭.

Deployment StatefulSet DaemonSet
Namespace Workload Kind Ready CPU Memory Node
default api-gateway Deployment 3/3
47%
62%
ip-10-0-1-12
default order-service Deployment 4/4
71%
51%
ip-10-0-1-44
default checkout-worker StatefulSet 2/2
23%
38%
ip-10-0-2-08
observability otel-collector DaemonSet 6/6
39%
48%
per-node
default payment-svc Deployment 2/3
86%
67%
ip-10-0-1-44
default inventory-svc Deployment 3/3
34%
49%
ip-10-0-2-08
kube-system coredns Deployment 2/2
12%
21%
ip-10-0-1-12
ingress-nginx nginx-ingress DaemonSet 3/3
28%
33%
per-node

세 가지 뷰

Pod, 노드, 워크로드 — 모두 일급 객체

어디서나 같은 필터. 워크로드에서 그 Pod, 그 Pod를 실행하는 노드까지 클릭으로 이동.

/infra/kubernetes/pods 200 pods

Pods

Pod별 CPU/메모리 — request 및 limit 대비.

Pod CPU req CPU lim Mem lim
otel-gateway-5988fb47f… ns observability 147% 37% 30%
prd-artifacts-api-6688… ns default 0% 52% 10%
prd-warpstream-5bb84bb… ns warpstream 42% 42% 35%
prd-enrichment-api-769… ns default 0% 34% 21%
/infra/kubernetes/nodes 3 nodes

Nodes

노드별 kubelet 통계, 가동 시간, 라이프사이클.

Node Status CPU Last seen
i-0ef7f77feb3e0a3eb 활성 3.00 14s ago
i-0293a9e7e2bac82a4 활성 2.65 30s ago
i-0a8c19f2d4e7b15c1 활성 1.84 22s ago
 
/infra/kubernetes/workloads 21 workloads

Workloads

deployment, statefulset, daemonset별 집계.

Workload Pods Avg CPU NS
api-gateway 3 47% default
order-service 4 71% default
payment-svc 2 86% default
inventory-svc 3 34% default

Span → Pod

느린 span에서 정확한 Pod까지

OpenTelemetry Operator가 admission 단계에서 모든 span에 k8s.pod.name, k8s.node.name, k8s.namespace.name을 stamp. 느린 trace는 이미 어디서 실행됐는지 알고 있습니다.

Trace: 7af1c204 1.18s

Waterfall

api-gateway
POST /checkout
1.18s
order-service
createOrder
425ms
payment-svc
processPayment
612ms
inventory-svc
reserveItems
98ms
Pod 어트리뷰션 활성

pod

payment-svc-78f4d6c89b-x7k2p

k8s.pod.name
payment-svc-78f4d6c89b-x7k2p
k8s.node.name
ip-10-0-1-44.ec2.internal
k8s.namespace.name
default

하나의 Helm 차트

클러스터에 한 번에 배포

차트를 처음부터 끝까지 읽을 수 있습니다. 명령어 세 줄이면 kubelet, host, kube-state 메트릭이 OTLP로 흐르기 시작합니다.

helm install maple-k8s-infra 3 steps
1 인제스트 키 시크릿 생성
kubectl create namespace maple
kubectl -n maple create secret generic maple-ingest-key \
  --from-literal=ingest-key=$MAPLE_INGEST_KEY
2 차트 설치
helm upgrade --install maple-k8s-infra \
  oci://ghcr.io/makisuo/charts/maple-k8s-infra \
  --namespace maple \
  --set maple.ingestKey.existingSecret.name=maple-ingest-key \
  --set maple.ingestKey.existingSecret.key=ingest-key \
  --set global.clusterName=production
3 롤아웃 확인
kubectl -n maple rollout status daemonset/maple-k8s-infra-agent

할 수 있는 일

클러스터와 애플리케이션을 하나의 파이프라인으로

helm install
블랙박스가 아닌 Helm 차트
maple-k8s-infra는 처음부터 끝까지 읽을 수 있는 작은 Helm 차트입니다. pod별 kubelet, node별 호스트 메트릭, 클러스터 전체 kube-state 메트릭, 각 node의 OTLP 리시버.
k8s.pod.name
pod와 스팬을 결합
스팬에는 k8s.pod.name, k8s.node.name, k8s.namespace.name이 포함됩니다. 느린 트레이스에서 그것을 실행한 pod와 node로 바로 드릴다운.
kube-state
kube-state 메트릭
Deployment, StatefulSet, DaemonSet, 레플리카 수, pod 단계. 모두 표준 kube-state-metrics 익스포터로 수집.
/infra/kubernetes
Workloads, Pods, Nodes 뷰
대시보드에 3개의 일급 인프라 뷰. Deployment, 단일 pod, 단일 node를 어디서든 동일한 필터로 조사할 수 있습니다.
OTel Operator
OpenTelemetry Operator
Admission 단계에서 pod에 OTEL_EXPORTER_OTLP_ENDPOINT와 pod/node 식별 정보가 주입됩니다. OTel SDK가 연결된 앱은 코드 변경 없이 계측됩니다.
one endpoint
멀티 클러스터 수집
조직당 하나의 수집 엔드포인트. prod, staging, 개발자의 kind 클러스터에서 보내고 cluster-name 리소스 속성으로 분리.

다음은

이 데이터를 공유하는 화면

OTLP를 Maple로 보내세요.

엔드포인트 하나, 키 하나. 트레이스·로그·메트릭·세션이 첫 요청부터 같은 트레이스 ID로 모입니다.