14.13. 가상 머신의 사용자 정의 메트릭 노출
OpenShift Container Platform에는 핵심 플랫폼 구성 요소에 대한 모니터링을 제공하는 사전 구성된 사전 설치된 자체 업데이트 모니터링 스택이 포함되어 있습니다. 이 모니터링 스택은 Prometheus 모니터링 시스템을 기반으로 합니다. Prometheus는 시계열 데이터베이스이며 메트릭에 대한 규칙 평가 엔진입니다.
OpenShift Container Platform 모니터링 스택을 사용하는 것 외에도 CLI를 사용하여 사용자 정의 프로젝트에 대한 모니터링을 활성화하고 node-exporter
서비스를 통해 가상 머신에 대해 노출되는 사용자 정의 지표를 쿼리할 수 있습니다.
14.13.1. 노드 내보내기 서비스 구성
node-exporter 에이전트는 메트릭을 수집하려는 클러스터의 모든 가상 머신에 배포됩니다. 가상 머신과 연결된 내부 지표 및 프로세스를 노출하도록 node-exporter 에이전트를 서비스로 구성합니다.
사전 요구 사항
-
OpenShift Container Platform CLI
oc
를 설치합니다. -
cluster-admin
권한이 있는 사용자로 클러스터에 로그인합니다. -
openshift-monitoring
프로젝트에서cluster-monitoring-config
ConfigMap
오브젝트를 생성합니다. -
enableUserWorkload
를true
로 설정하여openshift-user-workload-monitoring
프로젝트에서user-workload-monitoring-config
ConfigMap
오브젝트를 구성합니다.
절차
Service
YAML 파일을 생성합니다. 다음 예제에서는 파일을node-exporter-service.yaml
이라고 합니다.kind: Service apiVersion: v1 metadata: name: node-exporter-service 1 namespace: dynamation 2 labels: servicetype: metrics 3 spec: ports: - name: exmet 4 protocol: TCP port: 9100 5 targetPort: 9100 6 type: ClusterIP selector: monitor: metrics 7
- 1
- 가상 머신의 지표를 표시하는 node-exporter 서비스입니다.
- 2
- 서비스가 생성되는 네임스페이스입니다.
- 3
- 서비스의 레이블입니다.
ServiceMonitor
는 이 라벨을 사용하여 이 서비스와 일치시킵니다. - 4
ClusterIP
서비스의 포트 9100에서 메트릭을 노출하는 포트에 지정된 이름입니다.- 5
node-exporter-service
가 요청을 수신 대기하는 데 사용하는 대상 포트입니다.- 6
monitor
레이블로 구성된 가상 시스템의 TCP 포트 번호입니다.- 7
- 가상 머신의 Pod와 일치하는 데 사용되는 레이블입니다. 이 예에서는 라벨이
monitor
인 가상 머신의 Pod와 값지표
가 일치합니다.
node-exporter 서비스를 생성합니다.
$ oc create -f node-exporter-service.yaml
14.13.2. 노드 내보내기 서비스를 사용하여 가상 머신 구성
node-exporter
파일을 가상 머신에 다운로드합니다. 그런 다음 가상 머신이 부팅될 때 node-exporter 서비스를 실행하는 systemd
서비스를 생성합니다.
사전 요구 사항
-
구성 요소의 Pod는
openshift-user-workload-monitoring
프로젝트에서 실행됩니다. -
이 사용자 정의 프로젝트를 모니터링해야 하는 사용자에게
monitoring-edit
역할을 부여합니다.
절차
- 가상 머신에 로그인합니다.
node-exporter
파일의 버전에 적용되는 디렉터리 경로를 사용하여 가상 머신에node-exporter
파일을 다운로드합니다.$ wget https://github.com/prometheus/node_exporter/releases/download/v1.3.1/node_exporter-1.3.1.linux-amd64.tar.gz
실행 파일을 추출하여
/usr/bin
디렉터리에 배치합니다.$ sudo tar xvf node_exporter-1.3.1.linux-amd64.tar.gz \ --directory /usr/bin --strip 1 "*/node_exporter"
이 디렉터리 경로에
node_exporter.service
파일을 생성합니다./etc/systemd/system
. 이systemd
서비스 파일은 가상 머신이 재부팅될 때 node-exporter 서비스를 실행합니다.[Unit] Description=Prometheus Metrics Exporter After=network.target StartLimitIntervalSec=0 [Service] Type=simple Restart=always RestartSec=1 User=root ExecStart=/usr/bin/node_exporter [Install] WantedBy=multi-user.target
systemd
서비스를 활성화하고 시작합니다.$ sudo systemctl enable node_exporter.service $ sudo systemctl start node_exporter.service
검증
node-exporter 에이전트에서 가상 머신의 지표를 보고하는지 확인합니다.
$ curl http://localhost:9100/metrics
출력 예
go_gc_duration_seconds{quantile="0"} 1.5244e-05 go_gc_duration_seconds{quantile="0.25"} 3.0449e-05 go_gc_duration_seconds{quantile="0.5"} 3.7913e-05
14.13.3. 가상 머신의 사용자 정의 모니터링 레이블 생성
단일 서비스에서 여러 가상 머신에 대한 쿼리를 활성화하려면 가상 머신의 YAML 파일에 사용자 지정 레이블을 추가합니다.
사전 요구 사항
-
OpenShift Container Platform CLI
oc
를 설치합니다. -
cluster-admin
권한이 있는 사용자로 로그인합니다. - 웹 콘솔에 액세스하여 중지한 후 가상 머신을 재시작합니다.
절차
가상 머신 구성 파일의
template
사양을 편집합니다. 이 예에서 레이블monitor
에는 값메트릭이
있습니다.spec: template: metadata: labels: monitor: metrics
-
가상 머신을 중지하고 다시 시작하여
monitor
레이블에 지정된 레이블 이름으로 새 Pod를 생성합니다.
14.13.3.1. 메트릭에 대해 node-exporter 서비스 쿼리
지표는 /metrics
표준 이름 아래에 HTTP 서비스 끝점을 통해 가상 머신에 대해 노출됩니다. 메트릭을 쿼리할 때 Prometheus는 가상 머신에서 노출하는 지표 끝점에서 직접 메트릭을 스크랩하고 이러한 메트릭을 표시하도록 제공합니다.
사전 요구 사항
-
cluster-admin
권한 또는monitoring-edit
역할의 사용자로 클러스터에 액세스할 수 있습니다. - node-exporter 서비스를 구성하여 사용자 정의 프로젝트에 대한 모니터링을 활성화했습니다.
절차
서비스의 네임스페이스를 지정하여 HTTP 서비스 끝점을 가져옵니다.
$ oc get service -n <namespace> <node-exporter-service>
node-exporter 서비스에 사용 가능한 모든 메트릭을 나열하려면
지표
리소스를 쿼리합니다.$ curl http://<172.30.226.162:9100>/metrics | grep -vE "^#|^$"
출력 예
node_arp_entries{device="eth0"} 1 node_boot_time_seconds 1.643153218e+09 node_context_switches_total 4.4938158e+07 node_cooling_device_cur_state{name="0",type="Processor"} 0 node_cooling_device_max_state{name="0",type="Processor"} 0 node_cpu_guest_seconds_total{cpu="0",mode="nice"} 0 node_cpu_guest_seconds_total{cpu="0",mode="user"} 0 node_cpu_seconds_total{cpu="0",mode="idle"} 1.10586485e+06 node_cpu_seconds_total{cpu="0",mode="iowait"} 37.61 node_cpu_seconds_total{cpu="0",mode="irq"} 233.91 node_cpu_seconds_total{cpu="0",mode="nice"} 551.47 node_cpu_seconds_total{cpu="0",mode="softirq"} 87.3 node_cpu_seconds_total{cpu="0",mode="steal"} 86.12 node_cpu_seconds_total{cpu="0",mode="system"} 464.15 node_cpu_seconds_total{cpu="0",mode="user"} 1075.2 node_disk_discard_time_seconds_total{device="vda"} 0 node_disk_discard_time_seconds_total{device="vdb"} 0 node_disk_discarded_sectors_total{device="vda"} 0 node_disk_discarded_sectors_total{device="vdb"} 0 node_disk_discards_completed_total{device="vda"} 0 node_disk_discards_completed_total{device="vdb"} 0 node_disk_discards_merged_total{device="vda"} 0 node_disk_discards_merged_total{device="vdb"} 0 node_disk_info{device="vda",major="252",minor="0"} 1 node_disk_info{device="vdb",major="252",minor="16"} 1 node_disk_io_now{device="vda"} 0 node_disk_io_now{device="vdb"} 0 node_disk_io_time_seconds_total{device="vda"} 174 node_disk_io_time_seconds_total{device="vdb"} 0.054 node_disk_io_time_weighted_seconds_total{device="vda"} 259.79200000000003 node_disk_io_time_weighted_seconds_total{device="vdb"} 0.039 node_disk_read_bytes_total{device="vda"} 3.71867136e+08 node_disk_read_bytes_total{device="vdb"} 366592 node_disk_read_time_seconds_total{device="vda"} 19.128 node_disk_read_time_seconds_total{device="vdb"} 0.039 node_disk_reads_completed_total{device="vda"} 5619 node_disk_reads_completed_total{device="vdb"} 96 node_disk_reads_merged_total{device="vda"} 5 node_disk_reads_merged_total{device="vdb"} 0 node_disk_write_time_seconds_total{device="vda"} 240.66400000000002 node_disk_write_time_seconds_total{device="vdb"} 0 node_disk_writes_completed_total{device="vda"} 71584 node_disk_writes_completed_total{device="vdb"} 0 node_disk_writes_merged_total{device="vda"} 19761 node_disk_writes_merged_total{device="vdb"} 0 node_disk_written_bytes_total{device="vda"} 2.007924224e+09 node_disk_written_bytes_total{device="vdb"} 0
14.13.4. 노드 내보내기 서비스에 대한 ServiceMonitor 리소스 생성
Prometheus 클라이언트 라이브러리를 사용하고 /metrics
끝점에서 메트릭을 스크랩하여 node-exporter 서비스에서 노출하는 지표에 액세스하고 볼 수 있습니다. ServiceMonitor
CRD(사용자 정의 리소스 정의)를 사용하여 노드 내보내기 서비스를 모니터링합니다.
사전 요구 사항
-
cluster-admin
권한 또는monitoring-edit
역할의 사용자로 클러스터에 액세스할 수 있습니다. - node-exporter 서비스를 구성하여 사용자 정의 프로젝트에 대한 모니터링을 활성화했습니다.
절차
ServiceMonitor
리소스 구성에 대한 YAML 파일을 생성합니다. 이 예에서 서비스 모니터는 레이블지표
와 모든 서비스와 일치하며 30초마다exmet
포트를 쿼리합니다.apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: labels: k8s-app: node-exporter-metrics-monitor name: node-exporter-metrics-monitor 1 namespace: dynamation 2 spec: endpoints: - interval: 30s 3 port: exmet 4 scheme: http selector: matchLabels: servicetype: metrics
node-exporter 서비스에 대한
ServiceMonitor
구성을 생성합니다.$ oc create -f node-exporter-metrics-monitor.yaml
14.13.4.1. 클러스터 외부에서 노드 내보내기 서비스 액세스
클러스터 외부에서 node-exporter 서비스에 액세스하고 노출된 메트릭을 볼 수 있습니다.
사전 요구 사항
-
cluster-admin
권한 또는monitoring-edit
역할의 사용자로 클러스터에 액세스할 수 있습니다. - node-exporter 서비스를 구성하여 사용자 정의 프로젝트에 대한 모니터링을 활성화했습니다.
절차
node-exporter 서비스를 노출합니다.
$ oc expose service -n <namespace> <node_exporter_service_name>
경로에 대한 FQDN(완전화된 도메인 이름)을 가져옵니다.
$ oc get route -o=custom-columns=NAME:.metadata.name,DNS:.spec.host
출력 예
NAME DNS node-exporter-service node-exporter-service-dynamation.apps.cluster.example.org
curl
명령을 사용하여 node-exporter 서비스에 대한 지표를 표시합니다.$ curl -s http://node-exporter-service-dynamation.apps.cluster.example.org/metrics
출력 예
go_gc_duration_seconds{quantile="0"} 1.5382e-05 go_gc_duration_seconds{quantile="0.25"} 3.1163e-05 go_gc_duration_seconds{quantile="0.5"} 3.8546e-05 go_gc_duration_seconds{quantile="0.75"} 4.9139e-05 go_gc_duration_seconds{quantile="1"} 0.000189423