14.12. 가상 리소스에 대한 Prometheus 쿼리

OpenShift Virtualization에서는 vCPU, 네트워크, 스토리지, 게스트 메모리 스왑을 포함하여 클러스터 인프라 리소스의 사용을 모니터링하는 데 사용할 수 있는 메트릭을 제공합니다. 메트릭을 사용하여 실시간 마이그레이션 상태를 쿼리할 수도 있습니다.

OpenShift Container Platform 모니터링 대시보드를 사용하여 가상화 메트릭을 쿼리합니다.

14.12.1. 사전 요구 사항

  • vCPU 지표를 사용하려면 MachineConfig 오브젝트에 schedstats=enable 커널 인수를 적용해야 합니다. 이 커널 인수를 사용하면 디버깅 및 성능 튜닝에 사용되는 스케줄러 통계가 활성화되고 스케줄러에 약간의 부하가 추가됩니다. 커널 인수 적용에 대한 자세한 내용은 OpenShift Container Platform 머신 구성 작업 설명서를 참조하십시오.
  • 게스트 메모리 스와핑 쿼리가 데이터를 반환하려면 가상 게스트에서 메모리 스와핑을 활성화해야 합니다.

14.12.2. 메트릭 쿼리 정보

OpenShift Container Platform 모니터링 대시보드를 사용하면 Pacemaker에서 표시되는 메트릭을 검사하기 위해 Prometheus Query Language(PromQL) 쿼리를 실행할 수 있습니다. 이 기능을 사용하면 클러스터 상태 및 모니터링 중인 모든 사용자 정의 워크로드에 대한 정보가 제공됩니다.

클러스터 관리자는 모든 핵심 OpenShift Container Platform 및 사용자 정의 프로젝트에 대한 메트릭을 쿼리할 수 있습니다.

개발자는 메트릭을 쿼리할 때 프로젝트 이름을 지정해야 합니다. 선택한 프로젝트의 메트릭을 확인하는 데 필요한 권한이 있어야 합니다.

14.12.2.1. 클러스터 관리자로서 모든 프로젝트의 메트릭 쿼리

클러스터 관리자 또는 모든 프로젝트에 대한 보기 권한이 있는 사용자로 Metrics UI에서 모든 기본 OpenShift Container Platform 및 사용자 정의 프로젝트에 대한 메트릭에 액세스할 수 있습니다.

사전 요구 사항

  • cluster-admin 클러스터 역할 또는 모든 프로젝트에 대한 보기 권한이 있는 사용자로 클러스터에 액세스할 수 있습니다.
  • OpenShift CLI(oc)가 설치되어 있습니다.

절차

  1. OpenShift Container Platform 웹 콘솔의 관리자 화면에서 모니터링메트릭 으로 이동합니다.
  2. 하나 이상의 쿼리를 추가하려면 다음 작업을 수행합니다.

    옵션설명

    사용자 지정 쿼리를 생성합니다.

    표현식 필드에 PromQL(Prometheus Query Language) 쿼리를 추가합니다.

    PromQL 표현식을 입력하면 목록에 자동 완성 제안 사항이 표시됩니다. 이러한 제안에는 함수, 메트릭, 라벨, 시간 토큰이 있습니다. 키보드 화살표를 사용하여 이러한 제안된 항목 중 하나를 선택한 다음 Enter를 눌러 식에 항목을 추가할 수 있습니다.You can use the keyboard arrows to select one of these suggested items and then press Enter to add the item to your expression. 또한 제안된 항목에 마우스 포인터를 이동하여 해당 항목에 대한 간략한 설명을 볼 수도 있습니다.

    여러 쿼리를 추가합니다.

    쿼리 추가를 클릭합니다.

    기존 쿼리를 복제합니다.

    쿼리 옆에 있는 옵션 메뉴 kebab 를 클릭하고 중복 쿼리 를 선택합니다.

    쿼리를 삭제합니다.

    쿼리 옆에 있는 옵션 메뉴 kebab 를 클릭하고 쿼리 삭제 를 선택합니다.

    쿼리가 실행되지 않도록 비활성화합니다.

    쿼리 옆에 있는 옵션 메뉴 kebab 를 클릭하고 쿼리 비활성화 를 선택합니다.

  3. 생성한 쿼리를 실행하려면 쿼리 실행을 클릭합니다. 쿼리의 메트릭은 플롯에 시각화됩니다. 쿼리가 유효하지 않으면 UI에 오류 메시지가 표시됩니다.

    참고

    대량의 데이터에서 작동하는 쿼리 시간이 초과되거나 시계열 그래프에 있을 때 브라우저가 과부하될 수 있습니다. 이를 방지하려면 그래프 숨기기 를 클릭하고 메트릭 테이블을 사용하여 쿼리를 조정합니다. 가능한 쿼리를 찾은 후 플롯을 활성화하여 그래프를 그립니다.

  4. 선택 사항: 이제 페이지 URL에 실행한 쿼리가 포함되어 있습니다. 나중에 이 쿼리 세트를 다시 사용하려면 이 URL을 저장합니다.

14.12.2.2. 개발자로 사용자 정의 프로젝트의 메트릭 쿼리

사용자 정의 프로젝트의 메트릭에 대해 개발자 또는 프로젝트에 대한 보기 권한이 있는 사용자로 액세스할 수 있습니다.

개발자 관점에서 Metrics UI에는 선택한 프로젝트에 대한 사전 정의된 CPU, 메모리, 대역폭 및 네트워크 패킷 쿼리가 포함되어 있습니다. 프로젝트에 대한 CPU, 메모리, 대역폭, 네트워크 패킷 및 애플리케이션 메트릭에 대해 사용자 정의 Prometheus Query Language(PromQL) 쿼리를 실행할 수도 있습니다.

참고

개발자는 관리자 관점이 아닌 개발자 관점만 사용할 수 있습니다. 개발자는 웹 콘솔의 사용자 정의 프로젝트에 대해 한 번에 한 프로젝트의 메트릭 만 쿼리할 수 있습니다.

사전 요구 사항

  • 개발자로 또는 메트릭을 확인하는 프로젝트에 대한 보기 권한이 있는 사용자로 클러스터에 액세스할 수 있습니다.
  • 사용자 정의 프로젝트에 대한 모니터링을 활성화했습니다.
  • 사용자 정의 프로젝트에 서비스를 배포했습니다.
  • 서비스에서 모니터링 방법을 정의하는 데 사용할 ServiceMonitor CRD(사용자 정의 리소스 정의(Custom Resource Definition))가 생성되었습니다.

절차

  1. OpenShift Container Platform 웹 콘솔에서 개발자 화면을 선택합니다.
  2. ObserveMetrics 를 선택합니다.
  3. Project: 목록에서 메트릭을 보려는 프로젝트를 선택합니다.
  4. 쿼리 선택 목록에서 쿼리를 선택하거나 PromQL 표시를 선택하여 선택한 쿼리에 따라 사용자 정의 PromQL 쿼리를 만듭니다.
  5. 선택 사항: 쿼리 선택 목록에서 사용자 지정 쿼리를 선택하여 새 쿼리를 입력합니다. 입력하는 경우 드롭다운 목록에 자동 완성 제안이 표시됩니다. 이러한 제안에는 함수 및 메트릭이 포함됩니다. 제안된 항목을 클릭하여 선택합니다.

    참고

    개발자 관점에서는 한 번에 하나의 쿼리만 실행할 수 있습니다.

14.12.3. 가상화 메트릭

다음 메트릭 설명에는 예제 Prometheus Query Language(PromQL) 쿼리가 포함됩니다. 이러한 메트릭은 API가 아니며 버전 간에 변경될 수 있습니다.

참고

다음 예제에서는 기간을 지정하는 topk 쿼리를 사용합니다. 해당 기간 동안 가상 머신을 삭제해도 쿼리 출력에 계속 표시될 수 있습니다.

14.12.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을 반환합니다.

14.12.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을 반환합니다.

14.12.3.3. 스토리지 메트릭

14.12.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을 반환합니다.
14.12.3.3.2. 스토리지 스냅샷 데이터
kubevirt_vmsnapshot_disks_restored_from_source_total
소스 가상 머신에서 복원된 총 가상 머신 디스크 수를 반환합니다. 유형: 게이지.
kubevirt_vmsnapshot_disks_restored_from_source_bytes
소스 가상 시스템에서 복원된 공간(바이트)을 반환합니다. 유형: 게이지.

스토리지 스냅샷 데이터 쿼리의 예

kubevirt_vmsnapshot_disks_restored_from_source_total{vm_name="simple-vm", vm_namespace="default"} 1

1
이 쿼리는 소스 가상 머신에서 복원된 총 가상 머신 디스크 수를 반환합니다.
kubevirt_vmsnapshot_disks_restored_from_source_bytes{vm_name="simple-vm", vm_namespace="default"} 1
1
이 쿼리는 소스 가상 시스템에서 복원된 공간(바이트)을 반환합니다.
14.12.3.3.3. 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을 반환합니다.

14.12.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을 반환합니다.
참고

메모리 스와핑은 가상 시스템이 메모리 부족 상태에 있음을 나타냅니다. 가상 시스템의 메모리 할당을 늘리면 이 문제가 완화될 수 있습니다.

14.12.4. 실시간 마이그레이션 메트릭

실시간 마이그레이션 상태를 표시하려면 다음 메트릭을 쿼리할 수 있습니다.

kubevirt_migrate_vmi_data_processed_bytes
새 VM(가상 머신)으로 마이그레이션된 게스트 운영 체제(OS) 데이터의 양입니다. 유형: 게이지.
kubevirt_migrate_vmi_data_remaining_bytes
마이그레이션 중인 게스트 OS 데이터의 양입니다. 유형: 게이지.
kubevirt_migrate_vmi_dirty_memory_rate_bytes
게스트 OS에서 메모리가 더러워지는 속도입니다. 더러움 메모리는 변경되었지만 아직 디스크에 기록되지 않은 데이터입니다. 유형: 게이지.
kubevirt_migrate_vmi_pending_count
보류 중인 마이그레이션 수입니다. 유형: 게이지.
kubevirt_migrate_vmi_scheduling_count
스케줄링 마이그레이션 수입니다. 유형: 게이지.
kubevirt_migrate_vmi_running_count
실행 중인 마이그레이션 수입니다. 유형: 게이지.
kubevirt_migrate_vmi_succeeded
성공적으로 완료된 마이그레이션 수입니다. 유형: 게이지.
kubevirt_migrate_vmi_failed
실패한 마이그레이션 수입니다. 유형: 게이지.

14.12.5. 추가 리소스