13.9. 가상 리소스에 대한 Prometheus 쿼리
OpenShift Virtualization은 클러스터에서 인프라 리소스를 사용하는 방식을 모니터링하기 위한 메트릭을 제공합니다. 메트릭은 다음 리소스를 다룹니다.
- vCPU
- 네트워크
- 스토리지
- 게스트 메모리 스왑
OpenShift Container Platform 모니터링 대시보드를 사용하여 가상화 메트릭을 쿼리합니다.
13.9.1. 사전 요구 사항
-
vCPU 지표를 사용하려면
MachineConfig
오브젝트에schedstats=enable
커널 인수를 적용해야 합니다. 이 커널 인수를 사용하면 디버깅 및 성능 튜닝에 사용되는 스케줄러 통계가 활성화되고 스케줄러에 약간의 부하가 추가됩니다. 커널 인수 적용에 대한 자세한 내용은 OpenShift Container Platform 머신 구성 작업 설명서를 참조하십시오. - 게스트 메모리 스와핑 쿼리가 데이터를 반환하려면 가상 게스트에서 메모리 스와핑을 활성화해야 합니다.
13.9.2. 메트릭 쿼리
OpenShift Container Platform 모니터링 대시보드를 사용하면 Pacemaker에서 표시되는 메트릭을 검사하기 위해 Prometheus Query Language(PromQL) 쿼리를 실행할 수 있습니다. 이 기능을 사용하면 클러스터 상태 및 모니터링 중인 모든 사용자 정의 워크로드에 대한 정보가 제공됩니다.
클러스터 관리자는 모든 핵심 OpenShift Container Platform 및 사용자 정의 프로젝트에 대한 메트릭을 쿼리할 수 있습니다.
개발자는 메트릭을 쿼리할 때 프로젝트 이름을 지정해야 합니다. 선택한 프로젝트의 메트릭을 확인하는 데 필요한 권한이 있어야 합니다.
13.9.2.1. 클러스터 관리자로서 모든 프로젝트의 메트릭 쿼리
클러스터 관리자 또는 모든 프로젝트에 대한 보기 권한이 있는 사용자로 Metrics UI에서 모든 기본 OpenShift Container Platform 및 사용자 정의 프로젝트에 대한 메트릭에 액세스할 수 있습니다.
클러스터 관리자만 OpenShift Container Platform 모니터링을 통해 제공되는 타사 UI에 액세스할 수 있습니다.
사전 요구 사항
-
cluster-admin
역할 또는 모든 프로젝트에 대한 보기 권한이 있는 사용자로 클러스터에 액세스할 수 있습니다. -
OpenShift CLI(
oc
)가 설치되어 있습니다.
절차
-
OpenShift Container Platform 웹 콘솔의 관리자 관점에서 Observe
Metrics 를 선택합니다. - 커서에 표시기 삽입을 선택하여 사전 정의된 쿼리 목록을 확인합니다.
- 사용자 정의 쿼리를 생성하려면 표현식 필드에 PromQL(Prometheus Query Language) 쿼리를 추가합니다.
- 여러 쿼리를 추가하려면 쿼리 추가를 선택합니다.
- 쿼리를 삭제하려면 쿼리 옆에 있는 를 선택한 다음 쿼리 삭제를 선택합니다.
- 쿼리 실행을 비활성화하려면 쿼리 옆에 있는 를 선택하고 쿼리 비활성화를 선택합니다.
생성된 쿼리를 실행하려면 쿼리 실행을 선택합니다. 쿼리의 메트릭은 플롯에 시각화됩니다. 쿼리가 유효하지 않으면 UI에 오류 메시지가 표시됩니다.
참고대량의 데이터에서 작동하는 쿼리 시간이 초과되거나 시계열 그래프에 있을 때 브라우저가 과부하될 수 있습니다. 이를 방지하려면 그래프 숨기기를 선택하고 메트릭 테이블만 사용하여 쿼리를 조정합니다. 그런 다음 실행 가능한 쿼리를 검색한 후 플롯을 활성화하여 그래프를 그립니다.
- 선택 사항: 이제 페이지 URL에 실행한 쿼리가 포함됩니다. 나중에 이 쿼리 세트를 다시 사용하려면 이 URL을 저장합니다.
추가 리소스
- PromQL 쿼리 생성에 대한 자세한 내용은 Prometheus 쿼리 문서를 참조하십시오.
13.9.2.2. 개발자로 사용자 정의 프로젝트의 메트릭 쿼리
사용자 정의 프로젝트의 메트릭에 대해 개발자 또는 프로젝트에 대한 보기 권한이 있는 사용자로 액세스할 수 있습니다.
개발자 관점에서 Metrics UI에는 선택한 프로젝트에 대한 사전 정의된 CPU, 메모리, 대역폭 및 네트워크 패킷 쿼리가 포함되어 있습니다. 프로젝트에 대한 CPU, 메모리, 대역폭, 네트워크 패킷 및 애플리케이션 메트릭에 대해 사용자 정의 Prometheus Query Language(PromQL) 쿼리를 실행할 수도 있습니다.
개발자는 관리자 관점이 아닌 개발자 관점만 사용할 수 있습니다. 개발자는 한 번에 하나의 프로젝트의 메트릭만 쿼리할 수 있습니다. 개발자는 코어 플랫폼 구성 요소에 대해 OpenShift Container Platform 모니터링을 통해 제공되는 타사 UI에 액세스할 수 없습니다. 대신 사용자 정의 프로젝트에 Metrics UI를 사용합니다.
사전 요구 사항
- 개발자로 또는 메트릭을 확인하는 프로젝트에 대한 보기 권한이 있는 사용자로 클러스터에 액세스할 수 있습니다.
- 사용자 정의 프로젝트에 대한 모니터링을 활성화했습니다.
- 사용자 정의 프로젝트에 서비스를 배포했습니다.
-
서비스에서 모니터링 방법을 정의하는 데 사용할
ServiceMonitor
CRD(사용자 정의 리소스 정의(Custom Resource Definition))가 생성되었습니다.
절차
-
OpenShift Container Platform 웹 콘솔의 개발자 관점에서 Observe
Metrics 를 선택합니다. - Project: 목록에서 메트릭을 보려는 프로젝트를 선택합니다.
쿼리 선택 목록에서 쿼리를 선택하거나 PromQL 표시를 선택하여 사용자 정의 PromQL 쿼리를 실행합니다.
참고개발자 관점에서는 한 번에 하나의 쿼리만 실행할 수 있습니다.
추가 리소스
- PromQL 쿼리 생성에 대한 자세한 내용은 Prometheus 쿼리 문서를 참조하십시오.
13.9.3. 가상화 메트릭
다음 메트릭 설명에는 예제 Prometheus Query Language(PromQL) 쿼리가 포함됩니다. 이러한 메트릭은 API가 아니며 버전 간에 변경될 수 있습니다.
다음 예제에서는 기간을 지정하는 topk
쿼리를 사용합니다. 해당 기간 동안 가상 머신을 삭제해도 쿼리 출력에 계속 표시될 수 있습니다.
13.9.3.1. vCPU 메트릭
다음 쿼리는 I/O(입력/출력) 대기 중인 가상 머신을 식별할 수 있습니다.
kubevirt_vmi_vcpu_wait_seconds
- 가상 시스템의 vCPU에 대해 대기 시간(초)을 반환합니다.
'0' 이상의 값은 vCPU가 실행하려고 하지만 호스트 스케줄러는 아직 실행할 수 없음을 의미합니다. 이러한 실행 불가능은 I/O에 문제가 있음을 나타냅니다.
vCPU 지표를 쿼리하려면 먼저 MachineConfig
오브젝트에 schedstats=enable
커널 인수를 적용해야 합니다. 이 커널 인수를 사용하면 디버깅 및 성능 튜닝에 사용되는 스케줄러 통계가 활성화되고 스케줄러에 약간의 부하가 추가됩니다.
vCPU 대기 시간 쿼리의 예
topk(3, sum by (name, namespace) (rate(kubevirt_vmi_vcpu_wait_seconds[6m]))) > 0 1
- 1
- 이 쿼리는 6분 동안 매 순간에 I/O를 기다리는 상위 3개의 VM을 반환합니다.
13.9.3.2. 네트워크 메트릭
다음 쿼리는 네트워크를 포화 상태로 만드는 가상 머신을 식별할 수 있습니다.
kubevirt_vmi_network_receive_bytes_total
- 가상 시스템의 네트워크에서 수신된 총 트래픽(바이트 단위)을 반환합니다.
kubevirt_vmi_network_transmit_bytes_total
- 가상 시스템의 네트워크에서 전송된 총 트래픽(바이트 단위)을 반환합니다.
네트워크 트래픽 쿼리의 예
topk(3, sum by (name, namespace) (rate(kubevirt_vmi_network_receive_bytes_total[6m])) + sum by (name, namespace) (rate(kubevirt_vmi_network_transmit_bytes_total[6m]))) > 0 1
- 1
- 이 쿼리는 6분 동안 매번 가장 많은 네트워크 트래픽을 전송하는 상위 3 개의 VM을 반환합니다.
13.9.3.3. 스토리지 메트릭
13.9.3.3.1. 스토리지 관련 트래픽
다음 쿼리는 대량의 데이터를 작성하는 VM을 식별할 수 있습니다.
kubevirt_vmi_storage_read_traffic_bytes_total
- 가상 머신의 스토리지 관련 트래픽의 총 양(바이트)을 반환합니다.
kubevirt_vmi_storage_write_traffic_bytes_total
- 가상 시스템의 스토리지 관련 트래픽의 총 스토리지 쓰기(바이트)를 반환합니다.
스토리지 관련 트래픽 쿼리의 예
topk(3, sum by (name, namespace) (rate(kubevirt_vmi_storage_read_traffic_bytes_total[6m])) + sum by (name, namespace) (rate(kubevirt_vmi_storage_write_traffic_bytes_total[6m]))) > 0 1
- 1
- 이 쿼리는 6분 동안 매번 가장 많은 스토리지 트래픽을 수행하는 상위 3 개의 VM을 반환합니다.
13.9.3.3.2. I/O 성능
다음 쿼리는 스토리지 장치의 I/O 성능을 확인할 수 있습니다.
kubevirt_vmi_storage_iops_read_total
- 가상 시스템이 초당 수행하는 쓰기 I/O 작업 양을 반환합니다.
kubevirt_vmi_storage_iops_write_total
- 가상 시스템이 초당 수행하는 읽기 I/O 작업의 양을 반환합니다.
I/O 성능 쿼리의 예
topk(3, sum by (name, namespace) (rate(kubevirt_vmi_storage_iops_read_total[6m])) + sum by (name, namespace) (rate(kubevirt_vmi_storage_iops_write_total[6m]))) > 0 1
- 1
- 이 쿼리는 6분 동안 매 순간 초당 최대 I/O 작업을 수행하는 상위 3 개의 VM을 반환합니다.
13.9.3.4. 게스트 메모리 스왑 메트릭
다음 쿼리는 메모리 스와핑을 가장 많이 수행하는 스왑 사용 게스트를 식별할 수 있습니다.
kubevirt_vmi_memory_swap_in_traffic_bytes_total
- 가상 게스트가 스와핑하는 메모리의 총 양(바이트 단위)을 반환합니다.
kubevirt_vmi_memory_swap_out_traffic_bytes_total
- 가상 게스트가 스왑 아웃하는 메모리의 총 양(바이트 단위)을 반환합니다.
메모리 스와핑 쿼리의 예
topk(3, sum by (name, namespace) (rate(kubevirt_vmi_memory_swap_in_traffic_bytes_total[6m])) + sum by (name, namespace) (rate(kubevirt_vmi_memory_swap_out_traffic_bytes_total[6m]))) > 0 1
- 1
- 이 쿼리는 6분 동안 매 순간 게스트가 가장 많은 메모리 스왑을 수행하는 상위 3개의 VM을 반환합니다.
메모리 스와핑은 가상 시스템이 메모리 부족 상태에 있음을 나타냅니다. 가상 시스템의 메모리 할당을 늘리면 이 문제가 완화될 수 있습니다.