쿠버네티스 메트릭
쿠버네티스 모니터링이 수집하는 메 트릭을 카테고리별로 정리했습니다. 각 카테고리의 Tags(차원)와 Fields(측정값)를 확인할 수 있습니다.
컨테이너(container) 메트릭
container 카테고리는 컨테이너의 pod에 설정된 모든 사용자 정의 라벨들을 태그로 수집합니다.
- 대상: 클러스터 프로젝트, 네임스페이스 프로젝트
- 수집 간격: 5초
- 통계 데이터: 5분
쿠버네티스 에이전트 1.9.29 버전부터 Native Sidecar 컨테이너도 수집합니다. Native Sidecar는 spec.initContainers에 선언하고 restartPolicy: Always를 지정한 컨테이너로, Pod가 실행되는 동안 계속 동작합니다.
-
컨테이너 목록, CPU, 메모리 사용량, 재시작 횟수, 준비 상태, OOM 정보, 볼륨 마운트 메타데이터를 일반 컨테이너와 같이 수집합니다.
-
일반 init 컨테이너와 ephemeral 컨테이너는 이전과 같이 수집하지 않습니다.
-
Native Sidecar는 Kubernetes 1.29 이상에서 기본으로 사용할 수 있습니다(1.28은
SidecarContainers기능 게이트 활성화 필요). -
마스터 에이전트와 노드 에이전트를 모두 1.9.29 버전 이상으로 업데이트해야 합니다. 에이전트 업데이트 방법은 다음 문서를 참조하세요.
Tags
| Tag | Type | Unit | Description |
|---|---|---|---|
| agentOid | - | - | 노드 에이전트 고유 ID(고유값) |
| agentPcode | - | - | 프로젝트 코드(고유값) |
| command | - | - | 실행 명령어 |
| containerId | - | - | 컨테이너 ID(고유값) |
| containerKey | - | - | 컨테이너 Key |
| created | - | - | 컨테이너가 생성된 TimeStamp |
| image | - | - | 컨테이너 이미지명 |
| imageHash | - | - | 이미지 해시 값 |
| imageId | - | - | 이미지 ID |
| k8s-app | - | - | Pod의 레이블 k8s-app에 대한 값 |
| microOid | - | - | 컨테이너에 설치된 와탭 APM 에이전트의 고유 ID |
| name | - | - | 컨테이너 이름 |
| namespace | - | - | 컨테이너가 소속된 네임스페이스 |
| namespaceHash | - | - | 컨테이너가 소속된 네임스페이스 해시 값 |
| okind | - | - | 컨테이너에 설치된 와탭 APM 에이전트에 지정한 OKIND 고유 ID |
| okindName | - | - | 컨테이너에 설치된 와탭 APM 에이전트에 지정한 OKIND 이름 |
| oname | - | - | 컨테이너에 설치된 와탭 APM 에이전트 이름 |
| onode | - | - | 컨테이너가 작동 중인 노드 에이전트의 고유 ID |
| onodeName | - | - | 컨테이너가 작동 중인 노드 이름 |
| podHash | - | - | 컨테이너의 Pod 해시 값 |
| podName | - | - | 컨테이너의 Pod 이름 |
| replicaSetHash | - | - | 컨테이너의 레플리카셋 해시 값 |
| replicaSetName | - | - | 컨테이너의 레플리카셋 이름 |
| whatap_project | - | - | 컨테이너가 속한 와탭 프로젝트 이름 |
Fields
| Field | Type | Unit | Shortname/Name/Description |
|---|---|---|---|
| blkio_rbps | - | byte | IoReadBytes |
| Container Block I/O Read Byte | |||
| 컨테이너 전체 블럭 디바이스의 초당 읽은 바이트 합 | |||
| blkio_riops | - | count | IoReadIops |
| Container Block I/O Read IOPS | |||
| 컨테이너 전체 블럭 디바이스의 초당 읽은 건수 합 | |||
| blkio_wbps | - | byte | IoWriteBytes |
| Container Block I/O Write Byte | |||
| 컨테이너 전체 블럭 디바이스의 초당 쓴 바이트 합 | |||
| blkio_wiops | - | count | IoWriteIops |
| Container Block I/O Write IOPS | |||
| 컨테이너 전체 블럭 디바이스의 초당 쓴 건수 합 | |||
| cpu_per_quota | - | percent | CpuByLimit |
| Container CPU Usage by Limit(%) | |||
| CPU Limit 기준 CPU 전체 사용률 | |||
| cpu_quota | - | millicores | CpuLimit |
| Container CPU Limit (core) | |||
| 컨테이너 CPU Limit 할당량 - Limit 미설정인 경우 컨테이너가 작동 중인 해당 노드의 CPU 전체 코어가 밀리코어 단위로 표시됨 | |||
| cpu_quota_percent | - | percent | CpuLimitByNode |
| Container CPU Limit by Node(%) | |||
| 노드 CPU 대비 컨테이너 CPU Limit 할당량 - Limit 미설정인 경우 컨테이너가 작동 중인 해당 노드의 CPU 전체 코어가 퍼센트로 표시됨 | |||
| cpu_sys | - | percent | CpuSysByNode |
| Container CPU Sys Usage by Node(%) | |||
| 노드 CPU 대비 컨테이너 CPU System 사용률 | |||
| cpu_throttledperiods | - | count | CpuThrottledCnt |
| Container CPU Throttling Count | |||
| 컨테이너 CPU Throttled 건수 | |||
| cpu_throttledtime | - | nanosecond(ns) | CpuThrottledTime |
| Container CPU Throttling Time | |||
| 컨테이너 CPU Throttled 시간 | |||
| cpu_total | - | percent | CpuByNode |
| Container CPU Usage by Node(%) | |||
| 노드 CPU 대비 컨테이너 CPU 사용률 | |||
| cpu_total_milli | - | millicores | CpuTotUsage |
| Container CPU Usage (millicore) | |||
| 컨테이너 CPU 사용량 | |||
| cpu_user | - | percent | CpuUserByNode |
| Container CPU User Usage by Node(%) | |||
| 노드 CPU 대비 컨테이너 CPU User 사용률 | |||
| cpu_request | - | millicores | CpuRequest |
| Container CPU Request (core) | |||
| 컨테이너 CPU 요청 | |||
| cpu_per_request | - | percent | CpuByRequest |
| Container CPU Usage by Request(%) | |||
| 컨테이너 CPU 요청 대비 사용률 = cpu_total_milli / cpu_request * 100 | |||
| mem_failcnt | - | count | MemFailCnt |
| Container Memory Failure Count | |||
| 컨테이너 메모리 Limit 도달 건수 | |||
| mem_limit | - | byte | MemLimit |
| Container Memory Limit (byte) | |||
| 컨테이너 메모리 Limit 크기 | |||
| mem_maxusage | - | byte | MemMaxUsage |
| Container Memory Max Usage (byte) | |||
| 컨테이너 메모리 최대 사용량 기록값 - 자세한 내용은 하단 안내를 참고하세요. | |||
| mem_percent | - | percent | MemWsByLimit |
| Container Memory Working Set by Limit(%) | |||
| 컨테이너 메모리 Limit 기준 working set 사용량 = mem_working_set / mem_limit * 100 | |||
| mem_totalcache | - | byte | MemTotCache |
| Container Memory Total Cache (byte) | |||
| 컨테이너 전체 캐시 크기 | |||
| mem_totalpgfault | - | count | MemTotPageFaultCnt |
| Container Memory Total Page Fault Count | |||
| 컨테이너 Page Fault 횟수 | |||
| mem_totalrss | - | byte | MemTotRss |
| Container Memory Total RSS (byte) | |||
| 컨테이너 RSS 메모리 전체 크기 | |||
| mem_totalrss_percent | - | percent | MemTotRssByLimit |
| Container Memory Total RSS by Limit (%) | |||
| 컨테이너 RSS 메모리 전체 사용률 | |||
| mem_totalunevictable | - | byte | MemTotUnevictable |
| Container Memory Total Unevictable (byte) | |||
| 컨테이너 Unevictable Memory 전체 크기 | |||
| mem_usage | - | byte | MemUsage |
| Container Memory Usage (byte) | |||
| 컨테이너 메모리 사용량 | |||
| mem_working_set | - | byte | MemWs |
| Container Memory Working Set (byte) | |||
| 컨테이너 메모리 working set = mem_usage - inactive file | |||
| mem_working_set_percent | - | percent | MemWsByLimit |
| Container Memory Working Set by Limit (%) | |||
| 컨테이너 메모리 Limit 기준 working set 사용량 = mem_working_set / mem_limit * 100 | |||
| mem_request | - | byte | MemRequest |
| Container Memory Request (byte) | |||
| 컨테이너 메모리 Request 크기 | |||
| mem_per_request | - | percent | MemWsByRequest |
| Container Memory Working Set by Request (%) | |||
| 컨테이너 메모리 Request 기준 working set 사용량 = mem_working_set / mem_request * 100 | |||
| network_rbps | - | byte | NetRxBytes |
| Container Network Receive Byte | |||
| 컨테이너 전체 블럭 디바이스의 초당 읽기 바이트 합 | |||
| network_rdropped | - | byte | NetRxDropped |
| Container Network Receive Dropped | |||
| 컨테이너 네트워크 수신 dropped 건수 | |||
| network_rerror | - | byte | NetRxError |
| Container Network Receive Error | |||
| 컨테이너 네트워크 수신 에러 건수 | |||
| network_riops | - | byte | NetRxIops |
| Container Network Receive IOPS | |||
| 컨테이너 네트워크 수신 건수 | |||
| network_wbps | - | byte | NetTxByes |
| Container Network Transmit Byte | |||
| 컨테이너 네트워크 송신 데이터 크기 | |||
| network_wdropped | - | count | NetTxDropped |
| Container Network Transmit Dropped | |||
| 컨테이너 네트워크 송신 dropped 건수 | |||
| network_werror | - | count | NetTxError |
| Container Network Transmit Error | |||
| 컨테이너 네트워크 송신 에러 건수 | |||
| network_wiops | - | count | NetTxIops |
| Container Network Transmit IOPS | |||
| 컨테이너 네트워크 송신 건수 | |||
| node_cpu | - | percent | ConNodeCpu |
| Container Work Node CPU Usage (%) | |||
| 컨테이너가 실행 중인 노드의 CPU 사용량 | |||
| node_mem | - | percent | ConNodeMem |
| Container Work Node Memory Usage (%) | |||
| 컨테이너가 실행 중인 노드의 메모리 사용량 | |||
| phase | string | - | Pod 라이프사이클 ① PENDING ② RUNNING ③ SUCCEEDED ④ FAILED ⑤ UNKNOWN |
| restart_count | integer | - | ConRestartCnt |
| Container Restart Count | |||
| 컨테이너 재시작 횟수 | |||
| state | integer | - | ConState |
| Container Current State | |||
| 컨테이너 상태 코드 ① RUNNING = 114 ② PAUSE = 112 ③ RESTARTING = 101 ④ OOMKILLED = 111 ⑤ DEAD = 100 ⑥ WAITING = 119 | |||
| status | string | - | ConStatus |
| Container Current Status | |||
| 컨테이너 상태 정보 ① running 상태: uptime 정보 표시 ② waiting/terminated 상태: 상태에 대한 reason 정보 표시 |
mem_maxusage는 컨테이너가 실행되는 동안 기록된 메모리 최대 사용량을 나타냅니다. 그러나 Linux 커널 버전이 5.19보다 낮은 경우, 이 지표의 원본 데이터가 지원되지 않을 수 있습니다. 이러한 경우 해당 값이 0으로 표시될 수 있습니다. 해당 지표를 정상적으로 수집하기 위해서는 Linux 커널 버전을 5.19 이상으로 업데이트해야 합니다.
쿠버네티스 노드(kube_node) 메트릭
kube_node 카테고리는 노드에 설정된 모든 사용자 정의 라벨들을 태그로 수집합니다.
- 대상: 클러스터 프로젝트, 네임스페이스 프로젝트
- 수집 간격: 5초
- 통계 데이터: 5분, 1시간
Tags
| Tag | Type | Unit | Description |
|---|---|---|---|
| nodeName | - | - | 노드 이름 |
다음 태그가 추가되었습니다.
| Tag | Type | Unit | Description |
|---|---|---|---|
infrastructureType | string | - | 노드 인프라 유형 - baremetal, vm, unknown |
Fields
| Field | Type | Unit | Description |
|---|---|---|---|
| allocatable_cpu | - | millicores | 노드 할당 가능한 CPU량 |
| allocatable_memory | - | byte | 노드 할당 가능한 메모리량 |
| allocatable_pods | integer | - | 노드 할당 가능한 Pod 수 |
| limit_cpu | - | millicores | 노드 CPU Limit 합계 |
| limit_memory | - | byte | 노드 메모리 Limit 합계 |
| pods | integer | - | 노드 Pod 총 개수 |
| request_cpu | - | millicores | 노드 CPU Request 합계 |
| request_memory | - | byte | 노드 메모리 Request 합계 |
노드의 GPU 수량은 디바이스 타입별 병렬 리스트 필드로 수집합니다. *_types와 *_counts는 인덱스가 1:1로 대응하며, nvidia.com/gpu(whole-GPU)와 모든 MIG 프로파일(nvidia.com/mig-*)을 개별 항목으로 담습니다.
| Field | Type | Unit | Description |
|---|---|---|---|
| gpu_capacity_types | list | - | 노드 GPU capacity의 디바이스 타입 목록 |
| gpu_capacity_counts | list | count | 위 타입별 capacity 수량(인덱스 1:1 대응) |
| gpu_allocatable_types | list | - | 노드 GPU allocatable의 디바이스 타입 목록 |
| gpu_allocatable_counts | list | count | 위 타입별 allocatable 수량(인덱스 1:1 대응) |
v1.9.14부터 whole-GPU 전용 스칼라 필드 capacity_gpu, allocatable_gpu는 제거되었습니다. MIG 환경에서 스칼라 필드가 nvidia.com/gpu만 담고 MIG 슬라이스를 누락해 집계가 거짓 합계가 되는 문제를 차단하기 위함입니다. whole-GPU 수량도 리스트의 nvidia.com/gpu 항목으로 확인하며, 전체, 타입별 집계는 *_counts를 합산합니다.
| 카테고리 | 제거된 스칼라 필드 | 대체 리스트 필드 |
|---|---|---|
kube_node | capacity_gpu, allocatable_gpu | gpu_capacity_types/gpu_capacity_counts, gpu_allocatable_types/gpu_allocatable_counts |
쿠버네티스 노드 성능(kube_node_perf) 메트릭
kube_node_perf 카테고리는 노드에 스케줄링된 모든 Pod/Container의 리소스 사용량과 할당량을 합산하여 노드 단위 성능 지표를 수집합니다.
- 대상: 클러스터 프로젝트, 네임스페이스 프로젝트
- 수집 간격: 5초
- 통계 데이터: 5분, 1시간
Tags
| Tag | Type | Unit | Description |
|---|---|---|---|
| onode | - | - | 노드 해시값 |
| onodeName | - | - | 노드 이름 |
| agentPcode | - | - | 에이전트 프로젝트 코드 |
| agentOid | - | - | 에이전트 고유 ID |
다음 태그가 추가되었습니다.
| Tag | Type | Unit | Description |
|---|---|---|---|
| cgroup_version | - | - | 노드 호스트의 cgroup 마운트 모드 - unified(cgroup v2), hybrid, legacy(cgroup v1), unknown(접근 불가) |
노드 호스트의 /sys/fs/cgroup 마운트 모드를 직접 감지해 태그로 수집합니다. 노드별 cgroup 버전 현황을 서버에서 집계할 수 있습니다.
노드 가상화 판별 태그가 추가되었습니다.
| Tag | Type | Unit | Description |
|---|---|---|---|
virtualization | string | - | 노드 가상화 여부 - baremetal, vm, unknown |
hypervisor | string | - | 하이퍼바이저 벤더명 - 베어메탈이거나 판별할 수 없으면 - |
노드 호스트의 DMI 정보(/sys/class/dmi/id/sys_vendor, product_name)에서 벤더를 먼저 대조하고, 일치하는 벤더가 없으면 /proc/cpuinfo의 hypervisor 플래그로 가상 머신 여부만 판정합니다. DMI 정보가 없는 비 x86 노드는 unknown으로 수집합니다.
QEMU/KVM, VMware, Hyper-V, Xen, VirtualBox, Parallels, Amazon EC2, Google GCE, OpenStack, Nutanix AHV, oVirt/RHV, Alibaba Cloud 등의 벤더를 인식합니다. 값은 노드 기동 중 변하지 않으므로 최초 1회 읽어 캐시합니다.
제약: Amazon EC2 .metal 인스턴스처럼 클라우드 사업자가 제공하는 베어메탈은 DMI 정보만으로 일반 인스턴스와 구분되지 않아 vm으로 판별됩니다.
노드 에이전트 1.9.21 버전 이상에서 수집합니다.
Fields
| Field | Type | Unit | Description |
|---|---|---|---|
| cpuRequest | long | millicores | 노드 내 전체 컨테이너 CPU Request 합계 |
| cpuLimit | long | millicores | 노드 내 전체 컨테이너 CPU Limit 합계 |
| cpuTotal | long | millicores | 노드 내 전체 컨테이너 CPU 사용량 합계 |
| cpuPerRequest | float | percent | 노드 CPU Request 대비 실제 CPU 사용률 |
| cpuPerLimit | float | percent | 노드 CPU Limit 대비 실제 CPU 사용률 |
| memoryRequest | long | byte | 노드 내 전체 컨테이너 Memory Request 합계 |
| memoryLimit | long | byte | 노드 내 전체 컨테이너 Memory Limit 합계 |
| memTotal | long | byte | 노드 내 전체 컨테이너 Memory 사용량 합계 |
| memoryPerRequest | float | percent | 노드 Memory Request 대비 실제 Memory 사용률 |
| memoryPerLimit | float | percent | 노드 Memory Limit 대비 실제 Memory 사용률 |
다음 필드가 추가되었습니다.
| Field | Type | Unit | Description |
|---|---|---|---|
conntrack_count | long | count | 현재 conntrack 엔트리 수 |
conntrack_max | long | count | conntrack 엔트리 상한(nf_conntrack_max) |
conntrack_pct | float | percent | 상한 대비 사용률 |
- 엔트리 수는 호스트 network namespace 기준 값을 읽기 위해
/proc/1/net/stat/nf_conntrack경로에서 수집합니다. nf_conntrack모듈이 로드되지 않은 노드는 필드를 전송하지 않습니다. 값0과 미수집을 구분하기 위한 동작입니다.- 노드 에이전트 1.9.18 버전 이상에서 수집합니다.
collect_conntrack_enabled옵션으로 수집을 끌 수 있습니다.
쿠버네티스 이벤트(kube_event) 메트릭
kube_event 카테고리는 클러스터 프로젝트의 경우 클러스터 전체를 대상으로 데이터를 수집하며 네임스페이스 프로젝트는 해당 네임스페이스에서 발생한 이벤트에 대해서 만 수집합니다.
- 대상: 클러스터 프로젝트, 네임스페이스 프로젝트
- 수집 간격: 5초
- 통계 데이터: 5분, 1시간
Tags
| Tag | Type | Unit | Description |
|---|---|---|---|
| field_path | - | - | Field Path |
| kind | - | - | 이벤트가 발생한 오브젝트 종류 |
| name | - | - | 이벤트가 발생한 쿠버네티스 오브젝트명 |
| namespace | - | - | 이벤트가 발생한 네임스페이스명 |
| reason | - | - | 이벤트 발생 사유 |
| type | - | - | 이벤트 유형 - Warning 또는 Normal |
| uid | - | - | UID - 이벤트가 발생한 오브젝트 |
Fields
| Field | Type | Unit | Description |
|---|---|---|---|
| action | string | - | 액션 이름 |
| count | - | count | 이벤트 발생 건수 |
| event_time | integer | - | 이벤트 최초 발생 TimeStamp |
| first_timestamp | integer | - | 이벤트 최초 발생 시간 |
| last_timestamp | integer | - | 이벤트 마지막 발생 시간 |
| message | string | - | 이벤 트 메시지 |
| reasonFiled | string | - | 이벤트 Reason |
| reporting_component | string | - | 현재 이벤트를 보고하는 컴포넌트 |
| reporting_instance | string | - | 현재 이벤트를 보고하는 인스턴스 |
| series_last_observed_time | integer | - | series last observed time |
쿠버네티스 클러스터(kube_stat) 메트릭
kube_stat 카테고리는 클러스터 프로젝트의 경우 클러스터 전체 대상으로 수집하고 네임스페이스 프로젝트는 해당 네임스페이스와 연관된 오브젝트를 대상으로만 수집합니다.
- 대상: 클러스터 프로젝트, 네임스페이스 프로젝트
- 수집 간격: 5초
- 통계 데이터: 5분, 1시간
Tags
| Tag | Type | Unit | Description |
|---|---|---|---|
| name | - | - | kube_stat(고정 값) |
다음 태그가 추가되었습니다.
| Tag | Type | Unit | Description |
|---|---|---|---|
| namespace | - | - | 수집 대상 네임스페이스명 |
Fields
| Field | Type | Unit | Description |
|---|---|---|---|
| alloctable_cpu | - | millicores | 클러스터 전체 코어 수(클러스터 프로젝트 Only) |
| alloctable_ephemeral-storage | - | byte | 클러스터 전체 할당 가능한 ephemeral storage(클러스터 프로젝트 Only) |
| alloctable_hugepages-1gi | - | byte | 클러스터 전체 할당 가능한 hugepages-1Gi(클러스터 프로젝트 Only) |
| alloctable_hugepages-2mi | - | byte | 클러스터 전체 할당 가능한 hugepages-2Mi(클러스터 프로젝트 Only) |
| alloctable_memory | - | byte | 클러스터 전체 할당 가능한 메모리(클러스터 프로젝트 Only) |
| alloctable_pods | integer | - | 할당 가능한 Pod 수 |
| available_pod | integer | - | Phase가 Running 상태인 Pod의 수 |
| desired_pod | integer | - | metadata.ownerReferences 없이 배포된 Pod 수와 쿠버네티스 오브젝트(ReplicaSet, Daemonset, StatefulSet)에 정의된 Desired Pod 수의 합 |
kubectl get pods -A로 조회한 Pod 수와 동일 | |||
| nodes | integer | - | 노드 수 |
| pod_phase_Pending | integer | - | Pending 상태 Pod 수 |
| pod_phase_Running | integer | - | Running 상태 Pod 수 |
| running_containers | integer | - | Running 컨테이너 수 |
| stopped_containers | integer | - | Stopped 컨테이너 수 |
| total_available_cpu | integer | - | 할당 가능한 CPU 총합 |
| total_available_memory | integer | - | 할당 가능한 Memory 총합 |
| total_limit_cpu | - | millicores | Limit CPU 총합 |
| total_limit_memory | - | byte | Limit Memory 총합 |
| total_request_cpu | - | millicores | Request CPU 총합 |
| total_request_memory | - | byte | Request Memory 총합 |
| unavailable_pod | integer | - | Phase가 Running 상태가 아닌(Pending, Failed, Succedded) Pod 수 |
| waiting_containers | integer | - | Waiting Container 수 |
네임스페이스에 설정된 ResourceQuota의 상한과 소진량을 수집합니다. 다음 필드가 추가되었습니다.
| Field | Type | Unit | Description |
|---|---|---|---|
quota_count | long | count | 네임스페이스에 설정된 ResourceQuota 개수 |
quota_request_cpu_hard | long | millicores | CPU Request 쿼터 상한 |
quota_request_cpu_used | long | millicores | CPU Request 쿼터 소진량 |
quota_request_memory_hard | long | byte | Memory Request 쿼터 상한 |
quota_request_memory_used | long | byte | Memory Request 쿼터 소진량 |
quota_limit_cpu_hard | long | millicores | CPU Limit 쿼터 상한 |
quota_limit_cpu_used | long | millicores | CPU Limit 쿼터 소진량 |
quota_limit_memory_hard | long | byte | Memory Limit 쿼 터 상한 |
quota_limit_memory_used | long | byte | Memory Limit 쿼터 소진량 |
quota_pods_hard | long | count | Pod 수 쿼터 상한 |
quota_pods_used | long | count | Pod 수 쿼터 소진량 |
- 쿠버네티스가 계산한
status.hard와status.used값을 그대로 사용합니다. - 한 네임스페이스에 스코프가 다른 ResourceQuota가 여러 개 있으면 항목별로 합산합니다.
- 쿼터가 설정되지 않은 네임스페이스는
quota_count만0으로 전송하고 나머지 필드는 전송하지 않습니다. 쿼터 미설정과 상한0을 구분하기 위한 동작입니다. - 마스터 에이전트 1.9.17 버전 이상에서 수집합니다.
권한: ClusterRole에 core API resourcequotas의 list 권한이 필요합니다. 권한이 없으면 ResourceQuota 수집만 생략되고 나머지 kube_stat 수집은 계속됩니다.
Pod(kube_pod) 메트릭
kube_pod 카테고리는 Pod에 설정된 모든 사용자 정의 라벨들을 태그로 수집합니다.
- 대상: 마스터(클러스터) 프로젝트, 네임스페이스 프로젝트
- 수집 간격: 5초
- 통계 데이터: 5분
Tags
| Tag | Type | Unit | Description |
|---|---|---|---|
| agentOid | - | - | 노드 에이전트 고유 ID(고유값) |
| agentPcode | - | - | 프로젝트 코드(고유값) |
| command | - | - | 실행 명령어 |
| containerIds | - | - | Pod에 속해있는 컨테이너 ID |
| containerIdsCount | - | - | containerIds의 개수 |
| containerKeys | - | - | Pod 에 속해있는 컨테이너 ID 의 해시 값 |
| containerKeysCount | - | - | containerKeys의 개수 |
| DaemonSet | - | - | Pod의 DaemonSet 이름 |
| Deployment | - | - | Deployment |
| k8s-app | - | - | Pod의 레이블 k8s-app에 대한 값 |
| microOid | - | - | Pod의 컨테이너 내부 애플리케이션에서 실행중인 에이전트의 ID |
| microOids | - | - | Pod 안의 복수개 컨테이너 내부 애플리케이션에서 실행 중인 에이전트의 복수개 ID |
| microOidsCount | - | - | microOids의 개수 |
| name | - | - | Pod 이름 |
| onames | - | - | Pod의 컨테이너 내부 애플리케이션에서 실행중인 에이전트의 명칭 |
| onamesCount | - | - | onames의 개수 |
| podName | - | - | Pod 이름 |
| namespace | - | - | Pod가 소속된 네임스페이스 |
| namespaceHash | - | - | Pod가 소속된 네임스페이스 해시 값 |
| replicaSetHash | - | - | Pod의 ReplicaSet 해시 값 |
| replicaSetName | - | - | Pod의 ReplicaSet 이름 |
| whatap_project | - | - | Pod가 속한 와탭 프로젝트 이름 |
Fields
| Field | Type | Unit | Shortname, Name, Description |
|---|---|---|---|
| blkio_rbps | - | byte | IoReadBytes |
| Pod Block I/O Read Byte | |||
| Pod 전체 블럭 디바이스의 초당 읽은 바이트 합 | |||
| blkio_riops | - | count | IoReadIops |
| Pod Block I/O Read IOPS | |||
| Pod 전체 블럭 디바이스의 초당 읽은 건수 합 | |||
| blkio_wbps | - | byte | IoWriteBytes |
| Pod Block I/O Write Byte | |||
| Pod 전체 블럭 디바이스의 초당 쓴 바이트 합 | |||
| blkio_wiops | - | count | IoWriteIops |
| Pod Block I/O Write IOPS | |||
| Pod 전체 블럭 디바이스의 초당 쓴 건수 합 | |||
| cpu_per_limit | - | percent | CpuByLimit |
| Pod CPU Usage by Limit (%) | |||
| CPU Limit 기준 CPU 전체 사용률 | |||
| cpu_per_request | - | percent | CpuByRequest |
| Pod CPU Usage by Request (%) | |||
| CPU Request 기준 CPU 전체 사용률 | |||
| cpu_quota_percent | - | percent | CpuLimitByNode |
| Pod CPU Limit by Node (%) | |||
| 노드 CPU 대비 Pod CPU Limit 할당량 - Limit 미설정인 경우 Pod가 작동 중인 해당 노드의 CPU 전체 코어가 퍼센트로 표시됨 | |||
| cpu_sys | - | percent | CpuSysByNode |
| Pod CPU Sys Usage by Node (%) | |||
| 노드 CPU 대비 Pod CPU System 사용률 | |||
| cpu_throttledperiods | - | count | CpuThrottledCnt |
| Pod CPU Throttling Count | |||
| Pod CPU Throttled 건수 | |||
| cpu_throttledtime | - | nanosecond(ns) | CpuThrottledTime |
| Pod CPU Throttling Time | |||
| Pod CPU Throttled 시간 | |||
| cpu_total | - | percent | CpuByNode |
| Pod CPU Usage by Node (%) | |||
| 노드 CPU 대비 Pod CPU 사용률 | |||
| cpu_total_milli | - | millicores | CpuTotUsage |
| Pod CPU Usage (millicore) | |||
| Pod CPU 사용량 | |||
| cpu_user | - | percent | CpuUserByNode |
| Pod CPU User Usage by Node (%) | |||
| 노드 CPU 대비 Pod CPU User 사용률 | |||
| cpu_request | - | millicores | CpuRequest |
| Pod CPU Request (core) | |||
| Pod CPU 요청 | |||
| cpu_per_request | - | percent | CpuByRequest |
| Pod CPU Usage by Request (%) | |||
| Pod CPU 요청 대비 사용률 = cpu_total_milli / cpu_request * 100 | |||
| mem_totalcache | - | byte | MemTotCache |
| Pod Memory Total Cache (byte) | |||
| Pod 전체 캐시 크기 | |||
| mem_totalpgfault | - | count | MemTotPageFaultCnt |
| Pod Memory Total Page Fault Count | |||
| Pod Page Fault 횟수 | |||
| mem_totalrss | - | byte | MemTotRss |
| Pod Memory Total RSS (byte) | |||
| Pod RSS 메모리 전체 크기 | |||
| mem_totalrss_percent | - | percent | MemTotRssByLimit |
| Pod Memory Total RSS by Limit (%) | |||
| Pod RSS 메모리 전체 사용률 | |||
| mem_totalunevictable | - | byte | MemTotUnevictable |
| Pod Memory Total Unevictable (byte) | |||
| Pod Unevictable Memory 전체 크기 | |||
| mem_usage | - | byte | MemUsage |
| Pod Memory Usage (byte) | |||
| Pod 메모리 사용량 | |||
| mem_working_set | - | byte | MemWs |
| Pod Memory Working Set (byte) | |||
| Pod 메모리 working set = mem_usage - inactive file | |||
| memory_request | - | byte | MemRequest |
| Pod Memory Request (byte) | |||
| Pod 메모리 요청량 | |||
| memory_limit | - | byte | MemLimit |
| Pod Memory Limit (byte) | |||
| Pod 메모리 Limit 할당량 | |||
| memory_per_request | - | percent | MemByRequest |
| Pod Memory Working Set By Request (%) | |||
| Pod 메모리 요청량 기준 Working Set 사용량 | |||
| memory_per_limit | - | percent | MemByLimit |
| Pod Memory Working Set By Limit (%) | |||
| Pod 메모리 Limit 기준 Working Set 사용량 | |||
| network_rbps | - | byte | NetRxBytes |
| Pod Network Receive Byte | |||
| Pod 전체 블럭 디바이스의 초당 읽기 바이트 합 | |||
| network_rdropped | - | byte | NetRxDropped |
| Pod Network Receive Dropped | |||
| Pod 네트워크 수신 dropped 건수 | |||
| network_rerror | - | byte | NetRxError |
| Pod Network Receive Error | |||
| Pod 네트워크 수신 에러 건수 | |||
| network_riops | - | byte | NetRxIops |
| Pod Network Receive IOPS | |||
| Pod 네트워크 수신 건수 | |||
| network_wbps | - | byte | NetTxByes |
| Pod Network Transmit Byte | |||
| Pod 네트워크 송신 데이터 크기 | |||
| network_wdropped | - | count | NetTxDropped |
| Pod Network Transmit Dropped | |||
| Pod 네트워크 송신 dropped 건수 | |||
| network_werror | - | count | NetTxError |
| Pod Network Transmit Error | |||
| Pod 네트워크 송신 에러 건수 | |||
| network_wiops | - | count | NetTxIops |
| Pod Network Transmit IOPS | |||
| Pod 네트워크 송신 건수 | |||
| phase | string | - | Phase |
| Pod Current Phase | |||
| Pod 라이프사이클 ① PENDING ② RUNNING ③ SUCCEEDED ④ FAILED ⑤ UNKNOWN |
다음 필드는 내부용으로 예약되었습니다.
| Field | Type | Unit | Description |
|---|---|---|---|
| kube_sless_normal | - | - | 쿠버네티스 정보성 이벤트 발생 건수 |
| kube_sless_warning | - | - | 쿠버네티스 경고 이벤트 발생 건수 |
| micro_sful_critical | - | - | apm 심각 상태 기반 이벤트 발생 건수 |
| micro_sful_info | - | - | apm 정보성 상태 기반 이벤트 발생 건수 |
| micro_sful_warning | - | - | apm 경고 상태 기반 이벤트 발생 건수 |
| micro_sless_critical | - | - | apm 심각 무상태 이벤트 발생 건수 |
| micro_sless_info | - | - | apm 정보성 무상태 이벤트 발생 건수 |
| micro_sless_warning | - | - | apm 경고 무상태 이벤트 발생 건수 |
| sful_critical | - | - | 메트릭스 심각 상태 기반 이벤트 발생 건수 |
| sful_info | - | - | 메트릭스 정보성 상태 기반 이벤트 발생 건수 |
| sful_warning | - | - | 메트릭스 경고 상태 기반 이벤트 발생 건수 |
| sless_critical | - | - | 메트릭스 심각 무상태 이벤트 발생 건수 |
| sless_info | - | - | 메트릭스 정보성 무상태 이벤트 발생 건수 |
| sless_warning | - | - | 메트릭스 경고 무상태 이벤트 발생 건수 |
Pod의 GPU Request, Limit 수량은 디바이스 타입별 병렬 리스트 필드로 수집합니다. *_types와 *_counts는 인덱스가 1:1로 대응하며, nvidia.com/gpu(whole-GPU)와 모든 MIG 프로파일(nvidia.com/mig-*)을 개별 항목으로 담습니다.
| Field | Type | Unit | Description |
|---|---|---|---|
| gpu_request_types | list | - | Pod GPU Request의 디바이스 타입 목록 |
| gpu_request_counts | list | count | 위 타입별 Request 수량(인덱스 1:1 대응) |
| gpu_limit_types | list | - | Pod GPU Limit의 디바이스 타입 목록 |
| gpu_limit_counts | list | count | 위 타입별 Limit 수량(인덱스 1:1 대응) |
v1.9.14부터 whole-GPU 전용 스칼라 필드 gpu_request, gpu_limit은 제거되었습니다. MIG 환경에서 스칼라 필드가 nvidia.com/gpu만 담고 MIG 슬라이스를 누락해 집계가 거짓 합계가 되는 문제를 차단하기 위함입니다. whole-GPU 수량도 리스트의 nvidia.com/gpu 항목으로 확인하며, 전체, 타입별 집계는 *_counts를 합산합니다.
쿠버네티스 Pod 통계(kube_pod_stat) 메트릭
kube_pod_stat 카테고리 클러스터 프로젝트는 클러스터 전체를 대상으로 데이터를 수집하며 네임스페이스 프로젝트는 해당 네임스페이스에 소속된 Pod에 대해서만 수집합니다.
- 대상: 클러스터 프로젝트, 네임스페이스 프로젝트
- 수집 간격: 5초
- 통계 데이터: 5분, 1시간
Tags
| Tag | Type | Unit | Description |
|---|---|---|---|
| kind | - | - | 유형 - 클러스터 프로젝트의 경우 cluster 고정 값을 가지며 네임스페이스 프로젝트의 경우 Deployment 또는 ReplicaSet만 수집 |
| name | - | - | 쿠버네티스 자원 이름 - 클러스터 프로젝트는 name 값이 없으며 네임스페이스 프로젝트는 Deployment 또는 ReplicaSet의 이름 |
Fields
| Field | Type | Unit | Description |
|---|---|---|---|
| available_pod | integer | - | Phase가 Running 상태인 Pod의 수 |
| desired_pod | integer | - | metadata.ownerReferences 없이 배포된 Pod 수와 쿠버네티스 오브젝트(ReplicaSet, Daemonset, StatefulSet)에 정의된 Desired Pod 수의 합 |
kubectl get pods -A로 조회한 Pod 수와 동일 | |||
| limit_cpu | - | millicores | CPU Limit 사용량 |
| limit_memory | - | byte | Memory Limit 사용량 |
| request_cpu | - | millicores | CPU Request 사용량 |
| request_memory | - | byte | Memory Request 사용량 |
| running_container | integer | - | Running Container 수 |
| stopped_container | integer | - | Stopped Container 수 |
| waiting_container | integer | - | Waiting Container 수 |
쿠버네티스 Pod 볼륨(kube_pod_volume) 메트릭
kube_pod_volume 카테고리는 노드에 실행 중인 Pod에 마운트된 볼륨의 용량, i-node 사용량을 수집합니다. 앱 파드의 PVC 볼륨은 디렉토리명이 PV 이름이므로 volumeName 태그로 PVC의 spec.volumeName과 조인할 수 있습니다.
Tags
| Tag | Type | Unit | Description |
|---|---|---|---|
| hostDevice | - | - | 볼륨이 위치한 호스트 디바이스 |
| hostFileSystem | - | - | 볼륨의 파일 시스템 |
| hostMountPath | - | - | 호스트 상 볼륨 마운트 경로 |
| volumeName | - | - | 볼륨 이름 - PVC 볼륨의 경우 PV 이름(예를 들어 pvc-...). PVC의 spec.volumeName과 조인 가능 |
| volumePlugin | - | - | 볼륨 플러그인 - 예: kubernetes.io~csi, kubernetes.io~nfs, volume-subpaths |
Fields
| Field | Type | Unit | Description |
|---|---|---|---|
| capacity | long | byte | 볼륨 전체 용량 |
| available | long | byte | 볼륨 사용 가능 용량 |
| availablePercent | float | percent | 볼륨 사용 가능 용량 비율 |
| usedPercent | float | percent | 볼륨 사용률 |
| free | long | byte | 볼륨 여유 용량 |
| freePercent | float | percent | 볼륨 여유 용량 비율 |
| totalInode | long | count | 볼륨 전체 i-node 수 |
| usedInode | long | count | 볼륨 사용 중인 i-node 수 |
| usedInodePercent | float | percent | 볼륨 i-node 사용률 |
emptyDir 볼륨 수집이 추가되었습니다. 기본(디스크) medium emptyDir은 별도 마운트가 아니라 노드 루트 파일 시스템의 디렉터리여서 df 기반 수집에 잡히지 않았습니다. 노드 에이전트가 kubelet 볼륨 디렉터리를 직접 조회해 같은 kube_pod_volume 카테고리로 전송합니다.
- 조 회 경로:
{HOST_PREFIX}{kubelet_root_dir}/pods/{podUid}/volumes/kubernetes.io~empty-dir/{volumeName} - 수집 주기: 60초. 디렉터리 조회 비용이 커서 5초 수집 주기와 분리합니다.
- emptyDir 볼륨의
volumePlugin태그 값은kubernetes.io~empty-dir입니다.
다음 태그가 추가되었습니다.
| Tag | Type | Unit | Description |
|---|---|---|---|
volumeType | string | - | 볼륨 종류 - emptyDir 볼륨은 EmptyDir |
emptyDirMedium | string | - | emptyDir 저장 매체 - Memory 또는 Disk. 파드 spec의 emptyDir.medium 기준이며 미지정은 Disk |
emptyDirSpecConfirmed | string | - | 파드 spec 확인 여부 - true는 spec으로 확인된 값, false는 kubelet 경로와 파일 시스템 종류로 추정한 값 |
다음 필드가 추가되었습니다.
| Field | Type | Unit | Description |
|---|---|---|---|
usedSpace | long | byte | 볼륨 사용량 합계 |
fileCount | long | count | 볼륨 내 파일 수 |
sizeLimit | long | byte | 파드 spec의 emptyDir.sizeLimit- 미설정 시 전송하지 않음 |
truncated | integer | - | 수집 상한 초과 여부 - 1이면 상한에 걸려 값이 실제보다 작음 |
capacity, available, usedPercent는 볼륨 용량을 확정할 수 있을 때만 전송합니다.
sizeLimit이 있으면 그 값을 볼륨 용량으로 사용합니다.sizeLimit이 없고 medium이Memory면 kubelet이 만든 tmpfs 총량을 용량으로 사용합니다. tmpfs 총량의 기본값은 노드 메모리의 절반입니다.sizeLimit이 없는Diskmedium은 상한이 없어 용량을 만들지 않습니다. 이 경우 파드의container.ephemeral_storage_limit과 비교하세요.
노드 에이전트 1.9.23 버전 이상에서 위 태그와 필드를 모두 전송합니다. 수집 활성화와 비용 상한 옵션은 쿠버네티스 에이전트 옵션 설정을 참조하세요.
쿠버네티스 Horizontal Pod Autoscaler(HPA)(kube_hpa_stat) 메트릭
와탭에서 사용하는 ClusterRole에 HPA가 추가되어야 지표 수집이 시작됩니다.
- 대상: 클러스터 프로젝트
- 수집 간격: 5초
- 통계 데이터: 5분, 1시간
Tags
| Tag | Type | Unit | Description |
|---|---|---|---|
| name | - | - | HPA 이름 |
다음 태그가 추가되었습니다.
| Tag | Type | Unit | Description |
|---|---|---|---|
scaleTargetKind | string | - | 스케일 대상 오브젝트 종류(spec.scaleTargetRef.kind) |
scaleTargetName | string | - | 스케일 대상 오브젝트 이름(spec.scaleTargetRef.name) |
scaleTargetApiVersion | string | - | 스케일 대상 오브젝트 API 버전 |
creationTimeMillis | long | - | HPA 생성 시각(epoch ms) - 값이 없으면 전송하지 않음 |
HPA의 스케일 대상은 spec.scaleTargetRef에 있습니다. ownerReferences 기반인 owner_kind, owner_name, owner_id 태그는 HPA에서 대부분 빈 값이므로 스케일 대상은 scaleTarget* 태그로 확인하세요. 기존 태그는 하위 호환을 위해 유지합니다.
마스터 에이전트 1.9.24 버전 이상에서 수집합니다.
Fields
| Field | Type | Unit | Description |
|---|---|---|---|
| currentReplicas | integer | count | 현재 레플리카 수 |
| desiredReplicas | integer | count | Desired 레플리카 수 |
| lastScaleTime | integer | count | 마지막으로 스케일이 변경된 TimeStamp |
| maxReplicas | integer | count | 최대 레플리카 수 |
| minReplicas | integer | count | 최소 레플리카 수 |
쿠버네티스 HPA 목록(kube_hpa) 메트릭
kube_hpa 카테고리는 kubectl get hpa -o wide 결과와 동등한 HPA 목록 데이터를 수집합니다. 시계열 지표 성격인 kube_hpa_stat과는 별개 카테고리입니다.
- 대상: 클러스터 프로젝트
- 수집 간격: 30초
- 요구 버전: 마스터 에이전트 1.9.24 이상
Tags
| Tag | Type | Unit | Description |
|---|---|---|---|
hpaUid | string | - | HPA UID(고유값) |
hpaName | string | - | HPA 이름 |
namespace | string | - | HPA가 소속된 네임스페이스 |
creationTimeMillis | long | - | HPA 생성 시각(epoch ms) |
scaleTargetKind | string | - | 스케일 대상 오브젝트 종류 |
scaleTargetName | string | - | 스케일 대상 오브젝트 이름 |
scaleTargetApiVersion | string | - | 스케일 대상 오브젝트 API 버전 |
Fields
| Field | Type | Unit | Description |
|---|---|---|---|
minReplicas | integer | count | 최소 레플리카 수 |
maxReplicas | integer | count | 최대 레플리카 수 |
currentReplicas | integer | count | 현재 레플리카 수 |
desiredReplicas | integer | count | Desired 레플리카 수 |
targetMetricType | list | - | 스케일 기준 메트릭 종류 목록 |
targetValue | list | - | 메트릭별 목표값 목록 |
currentValue | list | - | 메트릭별 현재값 목록 |
conditionAbleToScale | string | - | AbleToScale 컨디션 상태 |
conditionScalingActive | string | - | ScalingActive 컨디션 상태 |
conditionScalingLimited | string | - | ScalingLimited 컨디션 상태 |
targetMetricType, targetValue, currentValue는 같은 인덱스가 한 메트릭에 대응하는 병렬 리스트입니다. HPA는 CPU, 메모리, 사용자 정의 메트릭을 동시에 가질 수 있어 값 하나로는 표현되지 않습니다.
- 값은
kubectl표기와 같은 문자열입니다(예를 들어50%,100m). - metrics-server가 없어 현재값을 확보하지 못하면
<unknown>으로 수집합니다. - Resource 메트릭 외에 Pods, External, Object 메트릭은 각각
pods:,external:,object:접두어를 붙여 담습니다. autoscaling/v2를 우선 사용하며 미지원 클러스터는autoscaling/v1로 대체합니다.
ClusterRole에 horizontalpodautoscalers 권한이 이미 포함되어 있어 추가 권한 설정은 필요하지 않습니다.
프로세스(kube_process) 메트릭
쿠버네티스 에이전트 1.7.12 버전 이상이 필요합니다. 에이전트 업데이트에 대한 자세한 내용은 다음 문서를 참조하세요.
노드에 존재하는 쿠버네티스 관련 프로세스를 모니터링할 때 수집됩니다.
-
대상: 클러스터 프로젝트, 네임스페이스 프로젝트
-
수집 간격: 5초
-
통계 데이터: 5분
Tags
| Tag | Type | Unit | Description |
|---|---|---|---|
| ppid | string | - | 부모 프로세스 ID /proc/[pid]/status::PPid |
| pid | string | - | 프로세스 ID /proc/[pid]/status::Pid |
| cmd1 | string | - | 명령어 이름 /proc/[pid]/status::Name |
| cmd2 | string | - | 명령어 라인(전체 명령어와 인자) /proc/[pid]/cmdline |
| user | string | - | 사용자 ID 또는 사용자 이름 /proc/[pid]/status::Uid |
| onodeName | string | - | 프로세스의 노드 이름 컨테이너 시스템 환경변수 ( NODE_IP) |
| createTime | TimeStamp | - | 프로세스 시작 시간 /proc/uptime 통해 계산된 필드 |
Fields
| Field | Type | Unit | Description |
|---|---|---|---|
| cpu | float | percent(%) | CPU 사용률 - /proc/[pid]/stat을 통해 계산된 필드 |
| memory | float | percent(%) | 메모리 사용률 - /proc/[pid]/statm을 통해 계산된 필드 |
| rss | long | byte | 실제 메모리 사용량 (Resident Set Size) - /proc/[pid]/status의 VmRSS |
| uid | string | - | 사용자 ID 또는 사용자 이름 - /proc/[pid]/status의 Uid |
| state | string | - | 프로세스 상태 - /proc/[pid]/status의 State |
| sharedMemory | long | byte | 공유 메모리 크기 - /proc/[pid]/statm을 통해 계산된 필드 |
| openFileDescriptors | integer | - | 프로세스가 열어둔 파일 디스크립터 수 - /proc/[pid]/fd를 통해 계산된 필드 |
| vmSize | long | byte | 가상 메모리 크기 (Virtual Memory Size) - /proc/[pid]/status의 VmSize |
| threads | integer | - | 프로세스가 생성한 스레드 수 - /proc/[pid]/status의 Threads |
Kubernetes 환경의 리눅스 프로세스 상태
리눅스에서 /proc/[pid]/status 파일의 State 필드가 프로세스의 현재 상태를 표시합니다. 각 상태 값의 의미는 다음과 같습니다.
| Code | Description |
|---|---|
| R (Running) | 실행 중 - 프로세스가 실행 중이거나 실행될 준비가 되어 있는 상태 |
| S (Sleeping) | 대기 중 - 인터럽트 가능한 수면 상태로, 대기 중이며 이벤트를 기다리고 있는 상태 |
| D (Disk Sleep) | 디스크 수면 - 인 터럽트 불가능한 수면 상태로, 일반적으로 I/O 작업을 기다리는 중인 상태 |
| R (Zombie) | 좀비 상태 - 프로세스가 종료되었으나 아직 부모 프로세스가 종료 상태를 수집하지 않은 상태 |
| T (Stopped) | 중지 - 프로세스가 작업 제어 신호에 의해 중지된 상태 (SIGSTOP 등) 또는 디버거에 의해 중지된 상태 |
| t (Tracing stop) | 추적 중지 - 디버거에 의해 추적 중인 상태 (소문자 t로 표시됨) |
| X (Dead) | 죽은 상태 - 프로세스가 죽은 상태 (일반적으로 보지 않음) |
| x (Dead) | 죽은 상태 - 커널 쓰레드의 죽은 상태 (일반적으로 보지 않음) |
| K (WakeKill) | 강제 종료 - 깨우기 신호를 무시하고 즉시 죽은 상태 |
| W (Waking) | 깨우기 중 - 깨우기 신호를 받아 깨워지는 중인 상태 |
| I (Idle) | 유휴 상태 - 커널 스레드가 유휴 상태 (일반적으로 유저 공간 프로세스에는 보이지 않음) |
Kubernetes는 컨테이너와 노드의 리소스를 효율적으로 관리하기 때문에, 컨테이너 내부에서 실행되는 다수의 프로세스가 실제로 대기 상태를 유지합니다. 이에 따라 대부분의 프로세스는 Sleeping 상태일 수 있습니다.
프로세스 개수(kube_process_count) 메트릭
노드마다 모니터링 대상 프로세스가 몇 개 실행 중인지 수집합니다. 대상 프로세스가 종료돼도 count를 0으로 계속 전송하므로, 메트릭스 이벤트로 프로세스 중단을 찾을 수 있습니다.
- 대상 프로세스: whatap-node-helper의
collect_kube_node_process_metric_target_list목록 - 수집 조건: 노드 에이전트(whatap-node-agent)의
collect_kube_node_process_metric_enabled가true(기본값)일 때 - 수집 간격: 5초(노드 에이전트의 수집 및 전송 주기 설정을 따름)
- 요구 버전: 쿠버네티스 에이전트 1.9.32 이상(Node Helper 포함)
Tags
| Tag | Type | Unit | Description |
|---|---|---|---|
onode | - | - | 노드 식별 값 |
onodeName | - | - | 노드 이름 |
cmd1 | - | - | 대상 프로세스 이름 - /proc/[pid]/status의 Name과 일치하는 값 |
agentPcode | - | - | 프로젝트 코드 |
agentOid | - | - | 노드 에이전트 고유 ID |
Fields
| Field | Type | Unit | Description |
|---|---|---|---|
count | integer | count | 이름이 일치하는 실행 중 프로세스 수 - 대상 프로세스가 없으면 0 |
수집에 실패했거나 데이터가 오래된 경우에는 0을 대신 전송하지 않습니다. 즉, count가 0이면 해당 노드에서 대상 프로세스가 실행되고 있지 않다는 뜻입니다.
노드 에이전트만 1.9.32로 올리고 Node Helper를 이전 버전으로 두면 이 메트릭을 수집하지 않습니다. 마스터, 노드 에이전트 이미지를 public.ecr.aws/whatap/kube_mon:1.9.32 이상으로 함께 업데이트하세요. 별도의 Operator 업그레이드나 RBAC 변경은 필요하지 않습니다.
프로세스 중단 알림 설정
메트릭스 이벤트를 추가할 때 다음과 같이 설정하면 대상 프로세스가 중단됐을 때 알림을 받을 수 있습니다.
- 카테고리:
kube_process_count - 필터: 감시할 프로세스 이름(
cmd1)과 노드 - 조건:
count < 1을 위험 조건으로 지정
목록에 있지만 해당 노드에서 원래 실행하지 않는 프로세스도 0으로 수집합니다. 예를 들어 containerd를 사용하는 노드에 dockerd 중단 알림을 일괄 적용하면 알림이 계속 발생합니다. 노드의 컨테이너 런타임과 구성에 맞는 프로세스만 조건에 지정하세요.
기본 목록에는 모든 노드에서 실행되지 않는 프로세스가 있습니다. kube-apiserver, etcd, kube-controller, kube-scheduler는 컨트롤 플레인 노드에서만 실행되며 EKS, GKE, AKS 같은 관리형 클러스터에서는 어느 노드에서도 실행되지 않습니다. coredns는 CoreDNS Pod가 배치된 노드에서만, aws-k8s-agent는 Amazon VPC CNI를 쓰는 노드에서만 실행됩니다. 그 외 노드에서는 항상 0입니다.
에이전트 상태(agent_status_summary) 메트릭
에이전트 상태와 관련한 지표를 10초 간격으로 수집한 카테고리입니다.
Fields
| Field | Type | Unit | Description |
|---|---|---|---|
inActTime | - | milliseconds(ms) | 에이전트가 비활성화된 상태로 유지된 시간 |
isActive | Boolean | - | 현재 에이전트의 활성 상태 여부 (true / false) |
isRestart | Boolean | - | 에이전트가 재시작되었는지 여부 (true / false) |
lastActTime | - | milliseconds(ms) | 마지막으로 에이전트가 활성화된 상태의 시각 - 0: 비활성화된 경우 |
oid | - | - | 프로젝트에 포함된 각 에이전트의 고유 식별자 |
oType | - | - | 에이전트 종류 - 1: 애플리케이션 에이전트 - 2: subType 참조 |
startTime | - | milliseconds(ms) | 에이전트가 시작된 시점을 나타내는 타임스탬프 |
subType | - | - | 에이전트 종류 - 9: 노드 에이전트 - 10: 마스터 에이전트 |
Ingress(kube_ingress) 메트릭
쿠버네티스 에이전트 1.7.13 버전 이상이 필요합니다. 에이전트 업데이트에 대한 자세한 내용은 다음 문서를 참조하세요.
Ingress 리소스에 대한 메타 데이터와 관련 정보를 모니터링할 때 수집됩니다.
-
대상: 클러스터 프로젝트, 네임스페이스 프로젝트
-
수집 간격: 30초
-
통계 데이터: 5분
Tags
| Tag | Type | Unit | Description |
|---|---|---|---|
ingressUid | string | - | Ingress 리소스의 고유 ID |
ingressName | string | - | Ingress 리소스의 이름 |
ingressNamespace | string | - | Ingress 리소스의 네임스페이스 |
creationTimeMillis | long | milliseconds(ms) | Ingress 리소스 생성 시간 |
ingressClassName | string | - | Ingress 클래스 이름 |
ingressLoadBalancerIps | List | - | Ingress 로드밸런서 IP |
Fields
| Field | Type | Unit | Description |
|---|---|---|---|
host | List | - | Ingress 리소스가 수신하는 호스트 이름 ( *인 경우 모든 호스트에 대해 적용됨) |
path | List | - | 특정 호스트 하위에서 요청 경로 |
backendServiceName | List | - | 백엔드로 전달되는 서비스의 이름 |
backendServicePort | List | - | 백엔드로 전달되는 포트 번호 |
backendServiceUid | List | - | 백엔드로 전달되는 서비스의 uid |
pathType | List | - | 경로 일치 방식 (예, Prefix, Exact) |
쿠버네티스 크론잡(kube_cronjob) 메트릭
디플로이먼트 리소스에 대한 메타데이터와 상태 정보를 태그로 수집합니다.
Tags
| Tag | Type | Unit | Description |
|---|---|---|---|
cronJobName | string | - | CronJob의 이름 (metadata.name) |
namespace | string | - | CronJob이 속한 네임스페이스 (metadata.namespace) |
cronJobUid | string | - | CronJob의 UID (metadata.uid) |
Fields
| Field | Type | Unit | Description |
|---|---|---|---|
lastScheduleTime | string | - | CronJob이 마지막으로 스케줄된 시간 (status.lastScheduleTime) |
lastSuccessfulTime | string | - | CronJob이 마지막으로 성공한 시간 (status.lastSuccessfulTime) |
cronJobSpecSchedule | string | - | CronJob의 스케줄 주기 (spec.schedule, 예: "0 */5 * * *" ) |
successfulJobsHistoryLimit | integer | count | 성공한 Job을 보존하는 최대 개수 (spec.successfulJobsHistoryLimit) |
failedJobsHistoryLimit | integer | count | 실패한 Job을 보존하는 최대 개수 (spec.failedJobsHistoryLimit) |
concurrencyPolicy | string | - | 동시 실행 정책 (Allow, Forbid, Replace) (spec.concurrencyPolicy) |
startingDeadlineSeconds | integer | time(seconds) | 스케줄된 시간이 지난 후에도 Job을 실행할 수 있는 최대 지연 시간 (spec.startingDeadlineSeconds) |
쿠버네티스 디플로이먼트(kube_deployment) 메트릭
디플로이먼트 리소스에 대한 메타데이터와 상태 정보를 태그로 수집합니다.
Tags
| Tag | Type | Unit | Description |
|---|---|---|---|
deployName | string | - | 디플로이먼트의 이름 (metadata.name) |
namespace | string | - | 디플로이먼트가 속한 네임스페이스 (metadata.namespace) |
deployUid | string | - | 디플로이먼트의 UID (metadata.uid) |
Fields
| Field | Type | Unit | Description |
|---|---|---|---|
deployReadyReplicas | integer | count | 준비(Ready) 상태인 파드 수 (status.readyReplicas) |
deployTotalReplicas | integer | count | 설정된 전체 파드 수 (spec.replicas) |
deployUpdatedReplicas | integer | count | 최신 버전으로 갱신된 파드 수 (status.updatedReplicas) |
deployAvailableReplicas | integer | count | 사용 가능한 상태의 파드 수 (status.availableReplicas) |
deployUnavailableReplicas | integer | count | 사용 불가능한 상태의 파드 수 (status.unavailableReplicas) |
deployCreationTime | integer | milliseconds(ms) | 디플로이먼트 생성 시각 (Unix Epoch milliseconds, metadata.creationTimestamp) |
deploySelector | string | - | 디플로이먼트의 선택자 라벨 (spec.selector.matchLabels) |
deployStrategy | string | - | 디플로이먼트의 배포 전략 (spec.strategy.type, 예: RollingUpdate, Recreate) |
쿠버네티스 데몬셋(kube_daemonset) 메트릭
데몬셋 리소스에 대한 메타데이터와 상태 정보를 태그로 수집합니다.
Tags
| Tag | Type | Unit | Description |
|---|---|---|---|
daemonSetName | string | - | DaemonSet의 이름 (metadata.name) |
namespace | string | - | DaemonSet이 소속된 네임스페이스 (metadata.namespace) |
daemonSetUid | string | - | DaemonSet의 UID (metadata.uid) |
creationTime | integer | milliseconds(ms) | DaemonSet 생성 시각 (metadata.creationTimestamp) |
age | string | - | DaemonSet 생성 이후 경과 시간 |
Fields
| Field | Type | Unit | Description |
|---|---|---|---|
currentNumberScheduled | integer | count | 현재 스케줄된 파드 수 (status.currentNumberScheduled) |
desiredNumberScheduled | integer | count | 기대하는 파드 수 (status.desiredNumberScheduled) |
numberReady | integer | count | Ready 상태인 파드 수 (status.numberReady) |
numberAvailable | integer | count | 사용 가능한 파드 수 (status.numberAvailable) |
numberMisscheduled | integer | count | 잘못 스케줄된 파드 수 (status.numberMisscheduled) |
updatedNumberScheduled | integer | count | 업데이트된 파드 수 (status.updatedNumberScheduled) |
daemonSetSelector | string | - | Selector 라벨 (spec.selector.matchLabels) |
쿠버네티스 레플리카셋(kube_replicaset) 메트릭
레플리카셋(ReplicaSet) 리소스에 대한 메타데이터와 상태 정보를 태그로 수집합니다.
Tags
| Tag | Type | Unit | Description |
|---|---|---|---|
replicaSetName | string | - | ReplicaSet의 이름 (metadata.name) |
namespace | string | - | ReplicaSet이 소속된 네임스페이스 (metadata.namespace) |
replicaSetUid | string | - | ReplicaSet의 UID (metadata.uid) |
ownerKind | string | - | 상위 오브젝트 종류 (예: Deployment) (metadata.ownerReferences.kind) |
ownerName | string | - | 상위 오브젝트 이름 (metadata.ownerReferences.name) |
ownerUid | string | - | 상위 오브젝트 UID (metadata.ownerReferences.uid) |
creationTime | integer | milliseconds(ms) | ReplicaSet 생성 시각 (metadata.creationTimestamp) |
age | string | - | ReplicaSet 생성 이후 경과 시간 |
Fields
| Field | Type | Unit | Description |
|---|---|---|---|
replicaSetReplicas | integer | count | 설정된 파드 수 (spec.replicas) |
replicaSetReadyReplicas | integer | count | Ready 상태 파드 수 (status.readyReplicas) |
replicaSetAvailableReplicas | integer | count | 사용 가능한 파드 수 (status.availableReplicas) |
replicaSetSelector | string | - | Selector 라벨 (spec.selector.matchLabels) |
쿠버네티스 스테이트풀셋(kube_statefulSet) 메트릭
스테이트풀셋(StatefulSet) 리소스에 대한 메타데이터와 상태 정보를 태그로 수집합니다.
Tags
| Tag | Type | Unit | Description |
|---|---|---|---|
statefulSetName | string | - | StatefulSet의 이름 (metadata.name) |
namespace | string | - | StatefulSet이 소속된 네임스페이스 (metadata.namespace) |
statefulSetUid | string | - | StatefulSet의 UID (metadata.uid) |
creationTime | integer | milliseconds(ms) | StatefulSet 생성 시각 (metadata.creationTimestamp) |
age | string | - | StatefulSet 생성 이후 경과 시간 |
Fields
| Field | Type | Unit | Description |
|---|---|---|---|
replicas | integer | count | 설정된 파드 수 (spec.replicas) |
readyReplicas | integer | count | Ready 상태 파드 수 (status.readyReplicas) |
currentReplicas | integer | count | 현재 생성된 파드 수 (status.currentReplicas) |
updatedReplicas | integer | count | 업데이트된 파드 수 (status.updatedReplicas) |
statefulSetSelector | string | - | Selector 라벨 (spec.selector.matchLabels) |
쿠버네티스 잡(kube_job) 메트릭
디플로이먼트 리소스에 대한 메타데이터와 상태 정보를 태그로 수집합니다.
Tags
| Tag | Type | Unit | Description |
|---|---|---|---|
jobName | string | - | Job의 이름 (metadata.name) |
namespace | string | - | Job이 소속된 네임스페이스 (metadata.namespace) |
jobUid | string | - | Job의 UID (metadata.uid) |
ownerKind | string | - | 상위 오브젝트의 종류 (예를 들어 CronJob) |
ownerName | string | - | 상위 오브젝트의 이름 |
ownerUid | string | - | 상위 오브젝트의 UID |
Fields
| Field | Type | Unit | Description |
|---|---|---|---|
succeededPods | integer | count | 성공한 파드 수 (status.succeeded) |
failedPods | integer | count | 실패한 파드 수 (status.failed) |
completionTime | string | - | Job이 완료된 시간 (status.completionTime.toString()) |
parallelism | integer | count | 동시에 실행되도록 설정된 파드 수 (spec.parallelism) |
completions | integer | count | Job이 완료되기 위해 필요한 파드 실행 횟수 (spec.completions) |
backoffLimit | integer | count | 실패 시 재시도 가능한 최대 횟수 (spec.backoffLimit) |
activeDeadlineSeconds | integer | seconds(sec) | Job이 실행될 수 있는 최대 시간 (spec.activeDeadlineSeconds) |
쿠버네티스 NetworkPolicy(kube_network_policy) 메트릭
kube_network_policy 카테고리는 클러스터의 NetworkPolicy 오브젝트를 이벤트 기반으로 수집합니다. 주기 수집이 아니라 오브젝트가 추가, 변경, 삭제될 때마다 해당 시점의 스냅숏을 전송합니다.
- 대상: 클러스터 프로젝트, 네임스페이스 프로젝트
- 수집 방식: 이벤트 기반
Tags
| Tag | Type | Unit | Description |
|---|---|---|---|
networkPolicyUid | string | - | NetworkPolicy UID(고유값) |
networkPolicyName | string | - | NetworkPolicy 이름 |
namespace | string | - | NetworkPolicy가 소속된 네임스페이스 |
resourceVersion | string | - | 오브젝트 리비전(metadata.resourceVersion) |
Fields
| Field | Type | Unit | Description |
|---|---|---|---|
generation | long | - | 오브젝트 세대(metadata.generation) |
creationTimeMillis | long | - | 오브젝트 생성 시각(epoch ms) |
policyTypes | list | - | 정책 유형 목록 - Ingress, Egress. 빈 목록은 API 기본값인 Ingress |
selectedPodUids | list | - | 정책이 선택한 파드 UID 목록 |
podSelector | map | - | 정책 대상 파드 셀렉터(matchLabels, matchExpressions) |
ingressRules | list | - | Ingress 규칙 목록 - 규칙별 from, ports 포함 |
egressRules | list | - | Egress 규칙 목록 - 규칙별 to, ports 포함 |
specSchemaVersion | integer | - | spec 필드 스키마 버전 |
specHash | long | - | 정규화한 spec의 해시값 - 내용 변경 여부 판별용 |
규칙은 중첩 구조로 전송해 쿠버네티스 API의 의미를 그대로 보존합니다.
- 한 peer 안의
namespaceSelector와podSelector는 AND 관계입니다. - peer 목록과 규칙 목록은 OR 관계입니다.
- 규칙 안의 빈
from,to는 모든 peer를, 빈ports는 모든 포트를 의미합니다. - peer의
ipBlock은cidr과except를 담습니다. - 포트는
protocol,portType,portNumber또는portName,endPort를 담습니다.
ClusterRole에 networkpolicies 조회 권한이 필요합니다. collect_network_policy_enabled 옵션으로 수집을 끌 수 있습니다.