Node Exporter¶
이 문서는 호스트에 Node Exporter 구성요소를 배포해 호스트 지표를 수집하고 Datakit으로 수집·저장한 뒤, 마지막으로 Guance를 통해 데이터를 시각화합니다. Node Exporter는 호스트의 CPU 사용률, 메모리 사용량, 디스크 I/O, 네트워크 트래픽 등을 포함한 다양한 시스템 운영 지표를 수집할 수 있습니다.
설정¶
사전 조건¶
- datakit가 설치되어 있음
Node-Exporter로 호스트 지표 데이터 수집¶
- DaemonSet 설정 파일
node-exporter.yaml생성
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: node-exporter
namespace: monitor-sa
labels:
name: node-exporter
spec:
selector:
matchLabels:
name: node-exporter
template:
metadata:
labels:
name: node-exporter
spec:
hostPID: true # 호스트의 PID 사용
hostIPC: true # 호스트의 IPC 사용
hostNetwork: true # 호스트의 네트워크 사용
containers:
- name: node-exporter
image: quay.io/prometheus/node-exporter:v1.8.2
ports:
- containerPort: 9100
resources:
requests:
cpu: 0.15
securityContext:
privileged: true
args:
- --path.procfs
- /host/proc
- --path.sysfs
- /host/sys
- --collector.filesystem.ignored-mount-points
- '"^/(sys|proc|dev|host|etc)($|/)"'
volumeMounts:
- name: dev
mountPath: /host/dev
- name: proc
mountPath: /host/proc
- name: sys
mountPath: /host/sys
- name: rootfs
mountPath: /rootfs
tolerations:
- key: "node-role.kubernetes.io/master"
operator: "Exists"
effect: "NoSchedule"
volumes:
- name: proc
hostPath:
path: /proc
- name: dev
hostPath:
path: /dev
- name: sys
hostPath:
path: /sys
- name: rootfs
hostPath:
path: /
---
apiVersion: v1
kind: Service
metadata:
name: node-exporter
namespace: monitor-sa
spec:
type: ClusterIP
ports:
- name: http
port: 9100
protocol: TCP
targetPort: 31672
selector:
name: node-exporter
실행
http://호스트ip:31672/metrics를 통해 현재 호스트에서 수집된 모든 모니터링 데이터를 확인할 수 있습니다.
Datakit 설정¶
datakit.yaml파일의ConfigMap리소스에kubernetesprometheus.conf를 추가
apiVersion: v1
kind: ConfigMap
metadata:
name: datakit-conf
namespace: datakit
data:
kubernetesprometheus.conf: |-
[inputs.kubernetesprometheus]
node_local = true # NodeLocal 모드를 활성화할지 여부, 수집을 각 노드로 분산
[[inputs.kubernetesprometheus.instances]]
role = "service" # 필수. service, pod, endpoints, node로 설정 가능
namespaces = ["monitor-sa"] # 선택 사항. 여러 개를 설정할 수 있으며, 쉼표로 구분. 비어 있으면 모든 항목과 매칭
selector = "" # 선택 사항. 수집 대상 리소스의 labels로, 선택할 대상을 매칭하는 데 사용. 비어 있으면 모두와 매칭
scrape = "true" # 선택 사항. 수집 스위치, 기본값 true
scheme = "http"
port = "__kubernetes_service_port_%s_port "
path = "/metrics" # 선택 사항. 대부분의 prometheus 수집 경로는 /metrics이며, 실제 수집 서비스의 지표 주소를 기준으로 함
params = "" # 선택 사항. http 접근 파라미터 문자열, 예: name=nginx&package=middleware
interval = "30s" # 선택 사항. 수집 주기, 기본값 30s
[inputs.kubernetesprometheus.instances.custom]
measurement = "kube_nodeexporter" # 선택 사항. Guance 메트릭 이름, 기본값은 메트릭의 첫 번째 밑줄 앞 문자 사용
job_as_measurement = false # 선택 사항. 데이터의 job 태그 값을 메트릭 집합 이름으로 사용할지 여부
[inputs.kubernetesprometheus.instances.custom.tags]
instance = "__kubernetes_mate_instance" # 선택 사항. 메트릭 tag
host = "__kubernetes_mate_host" # 선택 사항. 메트릭 tag
pod_name = "__kubernetes_pod_name" # 선택 사항. 메트릭 tag
pod_namespace = "__kubernetes_pod_namespace" # 선택 사항. 메트릭 tag, 계속 추가 가능하며, 여기서는 전역 tag와 선출 tag를 상속하지 않음
cluster = "cluster01" # 선택 사항
kubernetesprometheus.conf마운트datakit.yaml파일의volumeMounts아래에 추가
- mountPath: /usr/local/datakit/conf.d/kubernetesprometheus/kubernetesprometheus.conf
name: datakit-conf
subPath: kubernetesprometheus.conf
readOnly: true
- datakit 재시작 다음 명령을 실행
메트릭¶
node 메트릭 집합¶
Node Exporter 메트릭은 node 메트릭 집합에 있으며, 여기서는 Node Exporter 메트릭 관련 설명을 소개합니다
| Metrics | 설명 | 단위 |
|---|---|---|
node_arp_entries |
ARP 테이블의 항목 수 |
count |
node_boot_time_seconds |
시스템 시작 이후 경과 시간 |
s |
node_context_switches_total |
컨텍스트 전환 총 횟수 |
count |
node_cpu_guest_seconds_total |
CPU가 가상 머신이나 컨테이너에서 다른 운영 체제를 실행하는 데 사용한 시간의 총합 |
s |
node_cpu_seconds_total |
CPU가 사용자 모드, 시스템 모드 및 유휴 상태에서 사용한 총 시간 |
s |
node_disk_io_now |
현재 실행 중인 디스크 I/O 작업 수 |
count |
node_disk_io_time_seconds_total |
디스크 I/O 작업에 소요된 총 시간 |
s |
node_disk_io_time_weighted_seconds_total |
I/O 작업 대기 시간의 가중 총합 |
s |
node_disk_read_bytes_total |
디스크에서 읽은 총 바이트 수 |
byte |
node_disk_read_time_seconds_total |
디스크 읽기에 소요된 총 시간 |
s |
node_disk_reads_completed_total |
완료된 디스크 읽기 작업의 총 횟수 |
count |
node_disk_reads_merged_total |
병합된 디스크 읽기 작업의 총 횟수 |
count |
node_disk_write_time_seconds_total |
디스크 쓰기에 소요된 총 시간 |
count |
node_disk_writes_completed_total |
완료된 디스크 쓰기 작업의 총 횟수 |
count |
node_disk_writes_merged_total |
병합된 디스크 쓰기 작업의 총 횟수 |
count |
node_disk_written_bytes_total |
디스크에 기록된 총 바이트 수 |
byte |
node_entropy_available_bits |
사용 가능한 엔트로피 수(암호화 작업에 사용) |
count |
node_filefd_allocated |
할당된 파일 디스크립터 수 |
count |
node_filefd_maximum |
파일 디스크립터의 최대 수 |
count |
node_filesystem_avail_bytes |
파일 시스템의 사용 가능한 공간 바이트 수 |
byte |
node_ilesystem_device_error |
파일 시스템 장치 오류 횟수 |
count |
node_filesystem_files |
파일 시스템의 파일 수 |
count |
node_filesystem_files_free |
파일 시스템의 사용 가능한 파일 수 |
count |
node_filesystem_free_bytes |
파일 시스템의 사용 가능한 공간 바이트 수 |
byte |
node_filesystem_size_bytes |
파일 시스템의 총 크기 |
byte |
node_forks_total |
fork() 시스템 호출 총 횟수 |
count |
node_intr_total |
총 인터럽트 횟수 |
count |
node_ipvs_backend_connections_active |
활성 IP 가상 서버 수 |
count |
node_ipvs_backend_connections_inactive |
비활성 IPVS 백엔드 연결 수 |
count |
node_ipvs_connections_total |
IPVS 총 연결 수 |
count |
node_ipvs_incoming_bytes_total |
IPVS를 통해 수신한 총 바이트 수 |
byte |
node_ipvs_incoming_packets_total |
IPVS를 통해 수신한 총 패킷 수 |
count |
node_ipvs_outgoing_bytes_total |
IPVS를 통해 전송한 총 바이트 수 |
byte |
node_load1 |
최근 1분 평균 부하 |
count |
node_load15 |
최근 15분 평균 부하 |
count |
node_load5 |
최근 5분 평균 부하 |
count |
node_memory_Active_anon_bytes |
활성 익명 메모리 사용 바이트 수 |
byte |
node_memory_Active_bytes |
활성 메모리 사용 바이트 수 |
byte |
node_memory_Active_file_bytes |
활성 파일 메모리 사용 바이트 수 |
byte |
node_memory_AnonHugePages_bytes |
익명 대형 페이지 메모리 사용 바이트 수 |
byte |
node_memory_Bounce_bytes |
메모리 bounce buffer 사용 바이트 수 |
byte |
node_memory_Buffers_bytes |
버퍼 메모리 사용 바이트 수 |
byte |
node_memory_Cached_bytes |
캐시 사용 바이트 수 |
byte |
node_memory_CmaFree_bytes |
CMA(예약된 커널 메모리)에서 사용 가능한 바이트 수 |
byte |
node_memory_CmaTotal_bytes |
CMA의 총 바이트 수 |
byte |
node_memory_CommitLimit_bytes |
시스템이 할당할 수 있는 메모리 바이트 수 |
byte |
node_memory_Committed_AS_bytes |
커밋된 메모리 사용 바이트 수 |
byte |
node_memory_DirectMap1G_bytes |
직접 매핑된 1G 메모리 영역의 바이트 수 |
byte |
node_memory_DirectMap2M_bytes |
직접 매핑된 2M 메모리 영역의 바이트 수 |
byte |
node_memory_DirectMap4k_bytes |
직접 매핑된 4k 메모리 영역의 바이트 수 |
byte |
node_memory_Dirty_bytes |
더티 메모리(디스크에 기록해야 하는 메모리)의 바이트 수 |
byte |
node_memory_HardwareCorrupted_bytes |
하드웨어에 의해 손상된 메모리 바이트 수 |
byte |
node_memory_HugePages_Free |
사용 가능한 대형 페이지 메모리 수 |
count |
node_memory_HugePages_Rsvd |
예약된 대형 페이지 메모리 수 |
count |
node_memory_HugePages_Surp |
대형 페이지 메모리의 surplus 수 |
count |
node_memory_HugePages_Total |
대형 페이지 메모리의 총 수 |
byte |
node_memory_Hugepagesize_bytes |
각 대형 페이지의 크기 |
byte |
node_memory_Inactive_anon_bytes |
비활성 익명 메모리 사용 바이트 수 |
byte |
node_memory_Inactive_bytes |
비활성 파일 메모리 사용 바이트 수 |
byte |
node_memory_SReclaimable_bytes |
회수 가능한 슬로우 메모리 사용 바이트 수 |
byte |
node_memory_SUnreclaim_bytes |
회수 불가능한 슬로우 메모리 사용 바이트 수 |
byte |
node_memory_Shmem_bytes |
공유 메모리 사용 바이트 수 |
byte |
node_memory_Slab_bytes |
slab에서 사용한 메모리 바이트 수 |
byte |
node_memory_SwapCached_bytes |
캐시된 스왑 공간 사용 바이트 수 |
byte |
node_memory_SwapFree_bytes |
사용 가능한 스왑 공간 바이트 수 |
byte |
node_memory_SwapTotal_bytes |
스왑 공간의 총 바이트 수 |
byte |
node_memory_Unevictable_bytes |
축출 불가능한 메모리 사용 바이트 수 |
byte |
node_memory_VmallocChunk_bytes |
vmalloc 메모리 청크 사용 바이트 수 |
byte |
node_memory_VmallocTotal_bytes |
vmalloc 메모리의 총 바이트 수 |
byte |
node_memory_VmallocUsed_bytes |
사용 중인 vmalloc 메모리 바이트 수 |
byte |
node_memory_WritebackTmp_bytes |
쓰기 되돌리기 작업에 사용되는 임시 메모리 바이트 수 |
byte |
node_memory_VmallocTotal_bytes |
vmalloc 메모리의 총 바이트 수 |
byte |
node_netstat_Icmp6_InErrors |
IPv6 ICMP 오류 메시지 수신 횟수 |
count |
node_netstat_Icmp6_InMsgs |
IPv6 ICMP 메시지 수신 횟수 |
count |
node_netstat_Icmp6_OutMsgs |
IPv6 ICMP 메시지 전송 횟수 |
count |
node_netstat_Icmp_InErrors |
ICMP 오류 메시지 수신 횟수 |
count |
node_netstat_Icmp_InMsgs |
ICMP 메시지 수신 횟수 |
count |
node_netstat_Icmp_OutMsgs |
ICMP 메시지 전송 횟수 |
count |
node_netstat_Ip6_InOctets |
수신된 IPv6 데이터 바이트 수 |
byte |
node_netstat_Ip6_OutOctets |
전송된 IPv6 데이터 바이트 수 |
byte |
node_netstat_IpExt_InOctets |
확장 IPv4 수신 데이터 바이트 수 |
byte |
node_netstat_IpExt_OutOctets |
확장 IPv4 전송 데이터 바이트 수 |
byte |
node_netstat_TcpExt_ListenDrops |
TCP 수신 대기 큐 오버플로 횟수 |
count |
node_netstat_TcpExt_ListenOverflows |
TCP 수신 대기 큐 오버플로 횟수. |
count |
node_netstat_TcpExt_SyncookiesFailed |
SYN cookies 실패 횟수 |
count |