콘텐츠로 이동

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

실행

kubectl create ns monitor-sa
kubectl apply -f node-exporter.yaml

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 재시작 다음 명령을 실행
kubectl delete -f datakit.yaml
kubectl apply -f datakit.yaml

메트릭

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

문서 평가

이 페이지가 도움이 되었나요?