このコンテンツは選択した言語では利用できません。
Chapter 13. Monitoring
13.1. Monitoring overview リンクのコピーリンクがクリップボードにコピーされました!
Monitor the health of your cluster and virtual machines (VMs) to have a unified operational view of your environment. This ensures high availability and optimal resource performance.
You can monitor the health of your cluster and VMs with the following tools:
- Monitoring OpenShift Virtualization VM health status
-
View the overall health of your OpenShift Virtualization environment in the web console by navigating to the Home
Overview page in the OpenShift Container Platform web console. The Status card displays the overall health of OpenShift Virtualization based on the alerts and conditions. - OpenShift Container Platform cluster checkup framework
- Run automated tests with the OpenShift Container Platform cluster checkup framework to ensure that your cluster, including cluster storage, is optimally configured for OpenShift Virtualization.
- Virtualization dashboards overview
-
Monitor VM health, resource utilization, and capacity across your cluster with Perses-based dashboards, available in the web console under Observe
Dashboards(Perses). - Prometheus queries for virtual resources
- Query vCPU, network, storage, and guest memory swapping usage and live migration progress.
- VM custom metrics
-
Configure the
node-exporterservice to expose internal VM metrics and processes. - VM health checks
- Configure readiness, liveness, and guest agent ping probes and a watchdog for VMs.
- Standalone observability controller
- Enable the standalone observability controller to update monitoring and alerts independently of the OpenShift Virtualization control plane.
- Runbooks
- Diagnose and resolve issues that trigger OpenShift Virtualization alerts in the OpenShift Container Platform web console.
13.2. OpenShift Virtualization cluster checkup framework リンクのコピーリンクがクリップボードにコピーされました!
A checkup is an automated test workload that you can use to verify if a specific cluster functionality works as expected. The cluster checkup framework uses native Kubernetes resources to configure and run the checkup.
The OpenShift Virtualization cluster checkup framework is a Technology Preview feature only. Technology Preview features are not supported with Red Hat production service level agreements (SLAs) and might not be functionally complete. Red Hat does not recommend using them in production. These features provide early access to upcoming product features, enabling customers to test functionality and provide feedback during the development process.
For more information about the support scope of Red Hat Technology Preview features, see Technology Preview Features Support Scope.
As a developer or cluster administrator, you can use predefined checkups to improve cluster maintainability, troubleshoot unexpected behavior, minimize errors, and save time. You can review the results of the checkup and share them with experts for further analysis. Vendors can write and publish checkups for features or services that they offer and verify that their customer environments are configured correctly.
Running a predefined checkup in an existing namespace involves setting up a service account for the checkup, creating the Role and RoleBinding objects for the service account, enabling permissions for the checkup, and creating the input config map and the checkup job. You can run a checkup multiple times.
You must always:
- Verify that the checkup image is from a trustworthy source before applying it.
-
Review the checkup permissions before creating the
RoleandRoleBindingobjects.
13.3. Storage checkups リンクのコピーリンクがクリップボードにコピーされました!
You can use a storage checkup to verify that the cluster storage is optimally configured for OpenShift Virtualization.
Running a predefined checkup in an existing namespace involves setting up a service account for the checkup, creating the Role and RoleBinding objects for the service account, enabling permissions for the checkup, and creating the input config map and the checkup job. You can run a checkup multiple times.
You must always:
- Verify that the checkup image is from a trustworthy source before applying it.
-
Review the checkup permissions before creating the
RoleandRoleBindingobjects.
13.3.1. Keep checkup resources for troubleshooting リンクのコピーリンクがクリップボードにコピーされました!
The predefined storage checkup includes skipTeardown configuration options, which control resource clean up after a storage checkup runs. By default, the skipTeardown field value is Never, which means that the checkup always performs teardown steps and deletes all resources after the checkup runs.
You can retain resources for further inspection in case a failure occurs by setting the skipTeardown field to onfailure.
Prerequisites
-
You have installed the OpenShift CLI (
oc).
Procedure
Run the following command to edit the
storage-checkup-configconfig map:$ oc edit configmap storage-checkup-config -n <checkup_namespace>Configure the
skipTeardownfield to use theonfailurevalue. You can do this by modifying thestorage-checkup-configconfig map, stored in thestorage_checkup.yamlfile:apiVersion: v1 kind: ConfigMap metadata: name: storage-checkup-config namespace: <checkup_namespace> data: spec.param.skipTeardown: onfailure # ...Reapply the
storage-checkup-configconfig map by running the following command:$ oc apply -f storage_checkup.yaml -n <checkup_namespace>
13.3.2. Run a storage checkup by using the web console リンクのコピーリンクがクリップボードにコピーされました!
You can run a storage checkup to validate that storage is working correctly for virtual machines.
Procedure
-
Navigate to Virtualization
Checkups in the web console. - Click the Storage tab.
- Click Install permissions.
- Click Run checkup.
- Enter a name for the checkup in the Name field.
- Enter a timeout value for the checkup in the Timeout (minutes) fields.
- Click Run.
Result
You can view the status of the storage checkup in the Checkups list on the Storage tab. Click on the name of the checkup for more details.
13.3.3. Run a storage checkup by using the CLI リンクのコピーリンクがクリップボードにコピーされました!
Use a predefined checkup to verify that the OpenShift Container Platform cluster storage is configured optimally to run OpenShift Virtualization workloads.
Prerequisites
-
You have installed the OpenShift CLI (
oc). The cluster administrator has created the required
cluster-readerpermissions for the storage checkup service account and namespace, such as in the following example:apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: kubevirt-storage-checkup-clustereader roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-reader subjects: - kind: ServiceAccount name: storage-checkup-sa namespace: <target_namespace>where:
<target_namespace>- Specifies the namespace where the checkup is to be run.
Procedure
Create a
ServiceAccount,Role, andRoleBindingmanifest file for the storage checkup.Example service account, role, and rolebinding manifest:
--- apiVersion: v1 kind: ServiceAccount metadata: name: storage-checkup-sa --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: storage-checkup-role rules: - apiGroups: [ "" ] resources: [ "configmaps" ] verbs: ["get", "update"] - apiGroups: [ "kubevirt.io" ] resources: [ "virtualmachines" ] verbs: [ "create", "delete" ] - apiGroups: [ "kubevirt.io" ] resources: [ "virtualmachineinstances" ] verbs: [ "get" ] - apiGroups: [ "subresources.kubevirt.io" ] resources: [ "virtualmachineinstances/addvolume", "virtualmachineinstances/removevolume" ] verbs: [ "update" ] - apiGroups: [ "kubevirt.io" ] resources: [ "virtualmachineinstancemigrations" ] verbs: [ "create" ] - apiGroups: [ "cdi.kubevirt.io" ] resources: [ "datavolumes" ] verbs: [ "create", "delete" ] - apiGroups: [ "" ] resources: [ "persistentvolumeclaims" ] verbs: [ "delete" ] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: storage-checkup-role subjects: - kind: ServiceAccount name: storage-checkup-sa roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: storage-checkup-roleApply the
ServiceAccount,Role, andRoleBindingmanifest in the target namespace:$ oc apply -n <target_namespace> -f <storage_sa_roles_rolebinding>.yamlCreate a
ConfigMapandJobmanifest file. The config map contains the input parameters for the checkup job.Example input config map and job manifest:
--- apiVersion: v1 kind: ConfigMap metadata: name: storage-checkup-config namespace: $CHECKUP_NAMESPACE data: spec.timeout: 10m spec.param.storageClass: ocs-storagecluster-ceph-rbd-virtualization spec.param.vmiTimeout: 3m --- apiVersion: batch/v1 kind: Job metadata: name: storage-checkup namespace: $CHECKUP_NAMESPACE spec: backoffLimit: 0 template: spec: serviceAccount: storage-checkup-sa restartPolicy: Never containers: - name: storage-checkup image: quay.io/kiagnose/kubevirt-storage-checkup:main imagePullPolicy: Always env: - name: CONFIGMAP_NAMESPACE value: $CHECKUP_NAMESPACE - name: CONFIGMAP_NAME value: storage-checkup-configApply the
ConfigMapandJobmanifest file in the target namespace to run the checkup:$ oc apply -n <target_namespace> -f <storage_configmap_job>.yamlWait for the job to complete:
$ oc wait job storage-checkup -n <target_namespace> --for condition=complete --timeout 10mReview the results of the checkup by running the following command:
$ oc get configmap storage-checkup-config -n <target_namespace> -o yamlExample output config map (success):
apiVersion: v1 kind: ConfigMap metadata: name: storage-checkup-config labels: kiagnose/checkup-type: kubevirt-storage data: spec.timeout: 10m status.succeeded: "true" status.failureReason: "" status.startTimestamp: "2023-07-31T13:14:38Z" status.completionTimestamp: "2023-07-31T13:19:41Z" status.result.cnvVersion: 4.21.2 status.result.defaultStorageClass: trident-nfs status.result.goldenImagesNoDataSource: <data_import_cron_list> status.result.goldenImagesNotUpToDate: <data_import_cron_list> status.result.ocpVersion: 4.21.0 status.result.pvcBound: "true" status.result.storageProfileMissingVolumeSnapshotClass: <storage_class_list> status.result.storageProfilesWithEmptyClaimPropertySets: <storage_profile_list> status.result.storageProfilesWithSmartClone: <storage_profile_list> status.result.storageProfilesWithSpecClaimPropertySets: <storage_profile_list> status.result.storageProfilesWithRWX: |- ocs-storagecluster-ceph-rbd ocs-storagecluster-ceph-rbd-virtualization ocs-storagecluster-cephfs trident-iscsi trident-minio trident-nfs windows-vms status.result.vmBootFromGoldenImage: VMI "vmi-under-test-dhkb8" successfully booted status.result.vmHotplugVolume: |- VMI "vmi-under-test-dhkb8" hotplug volume ready VMI "vmi-under-test-dhkb8" hotplug volume removed status.result.vmLiveMigration: VMI "vmi-under-test-dhkb8" migration completed status.result.vmVolumeClone: 'DV cloneType: "csi-clone"' status.result.vmsWithNonVirtRbdStorageClass: <vm_list> status.result.vmsWithUnsetEfsStorageClass: <vm_list>-
data.status.succeededdefines if the checkup is successful (true) or not (false). -
data.status.failureReasondefines the reason for failure if the checkup fails. -
data.status.startTimestampdefines the time when the checkup started, in RFC 3339 time format. -
data.status.completionTimestampdefines the time when the checkup has completed, in RFC 3339 time format. -
data.status.result.cnvVersiondefines the OpenShift Virtualization version. -
data.status.result.defaultStorageClassdefines if there is a default storage class. -
data.status.result.goldenImagesNoDataSourcedefines the list of golden images whose data source is not ready. -
data.status.result.goldenImagesNotUpToDatedefines the list of golden images whose data import cron is not up-to-date. -
data.status.result.ocpVersiondefines the OpenShift Container Platform version. -
data.status.result.pvcBounddefines if a PVC of 10Mi has been created and bound by the provisioner. -
data.status.result.storageProfileMissingVolumeSnapshotClassdefines the list of storage profiles using snapshot-based clone but missing VolumeSnapshotClass. -
data.status.result.storageProfilesWithEmptyClaimPropertySetsdefines the list of storage profiles with unknown provisioners. -
data.status.result.storageProfilesWithSmartClonedefines the list of storage profiles with smart clone support (CSI/snapshot). -
data.status.result.storageProfilesWithSpecClaimPropertySetsdefines the list of storage profiles spec-overriden claimPropertySets. -
data.status.result.vmsWithNonVirtRbdStorageClassdefines the list of virtual machines that use the Ceph RBD storage class when the virtualization storage class exists. -
data.status.result.vmsWithUnsetEfsStorageClassdefines the list of virtual machines that use an Elastic File Store (EFS) storage class where the GID and UID are not set in the storage class.
-
Delete the job and config map that you previously created by running the following commands:
$ oc delete job -n <target_namespace> storage-checkup$ oc delete config-map -n <target_namespace> storage-checkup-configOptional: If you do not plan to run another checkup, delete the
ServiceAccount,Role, andRoleBindingmanifest:$ oc delete -f <storage_sa_roles_rolebinding>.yaml
13.3.4. Troubleshoot a failed storage checkup リンクのコピーリンクがクリップボードにコピーされました!
If a storage checkup fails, there are steps that you can take to identify the reason for failure.
Prerequisites
-
You have installed the OpenShift CLI (
oc). -
You have downloaded the directory provided by the
must-gathertool.
Procedure
Review the
status.failureReasonfield in thestorage-checkup-configconfig map by running the following command and observing the output:$ oc get configmap storage-checkup-config -n <namespace> -o yamlExample output config map:
apiVersion: v1 kind: ConfigMap metadata: name: storage-checkup-config labels: kiagnose/checkup-type: kubevirt-storage data: spec.timeout: 10m status.succeeded: "false" status.failureReason: "ErrNoDefaultStorageClass" # ...-
If the checkup has failed, the
status.succeededvalue isfalse. -
If the checkup has failed, the
status.failureReasonfield contains an error message. In this example output, theErrNoDefaultStorageClasserror message means that no default storage class is configured.
-
If the checkup has failed, the
-
Search the directory provided by the
must-gathertool for logs, events, or terms related to the error in thedata.status.failureReasonfield value.
13.3.5. Storage checkup error codes リンクのコピーリンクがクリップボードにコピーされました!
Storage checkup error codes might appear in the storage-checkup-config config map after a storage checkup fails.
| Error code | Meaning |
|---|---|
|
| No default storage class is configured. |
|
| One or more persistent volume claims (PVCs) failed to bind. |
|
| Multiple default storage classes are configured. |
|
|
There are |
|
|
There are VMs using elastic file system (EFS) storage classes, where the GID and UID are not set in the |
|
|
One or more golden images has a |
|
|
The |
|
| Some VMs failed to boot within the expected time. |
13.4. Prometheus queries for virtual resources リンクのコピーリンクがクリップボードにコピーされました!
Monitor the consumption of cluster infrastructure resources by using the metrics provided by OpenShift Virtualization. These metrics are also used to query live migration status.
-
To use the vCPU metric, apply the
schedstats=enablekernel argument to theMachineConfigobject. This kernel argument enables scheduler statistics used for debugging and performance tuning and adds a minor additional load to the scheduler. - For guest memory swapping queries to return data, enable memory swapping on the virtual guests.
13.4.1. Query metrics for all projects by using the OpenShift Container Platform web console リンクのコピーリンクがクリップボードにコピーされました!
Monitor the state of a cluster and any user-defined workloads by using the OpenShift Container Platform metrics query browser. The query browser uses Prometheus Query Language (PromQL) queries to examine metrics visualized on a plot.
As a cluster administrator or as a user with view permissions for all projects, you can access metrics for all default OpenShift Container Platform and user-defined projects in the Metrics UI.
Prerequisites
-
You have access to the cluster as a user with the
cluster-admincluster role or with view permissions for all projects. -
You have installed the OpenShift CLI (
oc).
Procedure
-
In the OpenShift Container Platform web console, click Observe
Metrics. To add one or more queries, perform any of the following actions:
Option Description Select an existing query.
From the Select query drop-down list, select an existing query.
Create a custom query.
Add your Prometheus Query Language (PromQL) query to the Expression field.
As you type a PromQL expression, autocomplete suggestions appear in a drop-down list. These suggestions include functions, metrics, labels, and time tokens. Use the keyboard arrows to select one of these suggested items and then press Enter to add the item to your expression. Move your mouse pointer over a suggested item to view a brief description of that item.
Add multiple queries.
Click Add query.
Duplicate an existing query.
Click the options menu
next to the query, then choose Duplicate query.
Disable a query from being run.
Click the options menu
next to the query and choose Disable query.
To run queries that you created, click Run queries. The metrics from the queries are visualized on the plot. If a query is invalid, the UI shows an error message.
Note- When drawing time series graphs, queries that operate on large amounts of data might time out or overload the browser. To avoid this, click Hide graph and calibrate your query by using only the metrics table. Then, after finding a feasible query, enable the plot to draw the graphs.
- By default, the query table shows an expanded view that lists every metric and its current value. Click the ˅ down arrowhead to minimize the expanded view for a query.
- Optional: Save the page URL to use this set of queries again in the future.
Explore the visualized metrics. Initially, all metrics from all enabled queries are shown on the plot. Select which metrics are shown by performing any of the following actions:
Option Description Hide all metrics from a query.
Click the options menu
for the query and click Hide all series.
Hide a specific metric.
Go to the query table and click the colored square near the metric name.
Zoom into the plot and change the time range.
Perform one of the following actions:
- Visually select the time range by clicking and dragging on the plot horizontally.
- Use the menu to select the time range.
Reset the time range.
Click Reset zoom.
Display outputs for all queries at a specific point in time.
Hover over the plot at the point you are interested in. The query outputs appear in a pop-up box.
Hide the plot.
Click Hide graph.
13.4.2. Query metrics for user-defined projects by using the OpenShift Container Platform web console リンクのコピーリンクがクリップボードにコピーされました!
Monitor user-defined workloads by using the OpenShift Container Platform metrics query browser. The query browser uses Prometheus Query Language (PromQL) queries to examine metrics visualized on a plot.
To query metrics in the Developer perspective, you must specify a project name that represents the namespace. You must have the required privileges to view metrics for the selected project.
Prerequisites
- You have access to the cluster as a developer or as a user with view permissions for the project that you are viewing metrics for.
- You have enabled monitoring for user-defined projects.
- You have deployed a service in a user-defined project.
-
You have created a
ServiceMonitorcustom resource definition (CRD) for the service to define how the service is monitored.
Procedure
-
In the OpenShift Container Platform web console, click Observe
Metrics. To add one or more queries, perform any of the following actions:
Option Description Select an existing query.
From the Select query drop-down list, select an existing query.
Create a custom query.
Add your Prometheus Query Language (PromQL) query to the Expression field.
As you type a PromQL expression, autocomplete suggestions appear in a drop-down list. These suggestions include functions, metrics, labels, and time tokens. Use the keyboard arrows to select one of these suggested items and then press Enter to add the item to your expression. Move your mouse pointer over a suggested item to view a brief description of that item.
Add multiple queries.
Click Add query.
Duplicate an existing query.
Click the options menu
next to the query, then choose Duplicate query.
Disable a query from being run.
Click the options menu
next to the query and choose Disable query.
To run queries that you created, click Run queries. The metrics from the queries are visualized on the plot. If a query is invalid, the UI shows an error message.
Note- When drawing time series graphs, queries that operate on large amounts of data might time out or overload the browser. To avoid this, click Hide graph and calibrate your query by using only the metrics table. Then, after finding a feasible query, enable the plot to draw the graphs.
- By default, the query table shows an expanded view that lists every metric and its current value. Click the ˅ down arrowhead to minimize the expanded view for a query.
- Optional: Save the page URL to use this set of queries again in the future.
Explore the visualized metrics. Initially, all metrics from all enabled queries are shown on the plot. Select which metrics are shown by performing any of the following actions:
Option Description Hide all metrics from a query.
Click the options menu
for the query and click Hide all series.
Hide a specific metric.
Go to the query table and click the colored square near the metric name.
Zoom into the plot and change the time range.
Perform one of the following actions:
- Visually select the time range by clicking and dragging on the plot horizontally.
- Use the menu to select the time range.
Reset the time range.
Click Reset zoom.
Display outputs for all queries at a specific point in time.
Hover over the plot at the point you are interested in. The query outputs appear in a pop-up box.
Hide the plot.
Click Hide graph.
13.4.3. Virtualization metrics リンクのコピーリンクがクリップボードにコピーされました!
Metric descriptions including example Prometheus Query Language (PromQL) queries. These metrics are not an API and might change between versions.
The following examples use topk queries that specify a time period. If virtual machines (VMs) are deleted during that time period, they can still appear in the query output.
13.4.3.1. vCPU metrics リンクのコピーリンクがクリップボードにコピーされました!
The following query can identify virtual machines that are waiting for Input/Output (I/O):
kubevirt_vmi_vcpu_wait_seconds_total- Returns the wait time (in seconds) on I/O for vCPUs of a virtual machine. Type: Counter.
A value above '0' means that the vCPU wants to run, but the host scheduler cannot run it yet. This inability to run indicates that there is an issue with I/O.
To query the vCPU metric, the schedstats=enable kernel argument must first be applied to the MachineConfig object. This kernel argument enables scheduler statistics used for debugging and performance tuning and adds a minor additional load to the scheduler.
kubevirt_vmi_vcpu_delay_seconds_total- Returns the cumulative time, in seconds, that a vCPU was enqueued by the host scheduler but could not run immediately. This delay appears to the virtual machine as steal time, which is CPU time lost when the host runs other workloads. Steal time can impact performance and often indicates CPU overcommitment or contention on the host. Type: Counter.
Example vCPU delay query:
The following query returns the average per-second delay over a 5-minute period. A high value may indicate CPU overcommitment or contention on the node:
irate(kubevirt_vmi_vcpu_delay_seconds_total[5m]) > 0.05
Example vCPU wait time query:
The following query returns the top 3 VMs waiting for I/O at every given moment over a six-minute time period:
topk(3, sum by (name, namespace) (rate(kubevirt_vmi_vcpu_wait_seconds_total[6m]))) > 0
13.4.3.2. vGPU metrics リンクのコピーリンクがクリップボードにコピーされました!
You can monitor virtual machines using NVIDIA GPUs with this metric.
kubevirt_vmi_gpu_infoReturns information about the GPU resources attached to the virtual machine. This metric is implemented as a Gauge with the following metadata attached:
- Node - The associated virtual machine using the GPU resource.
- Namespace - The associated namespace using the GPU resource.
- Pod - The associated pod using the GPU resource.
-
Resource - The
Extended Resourcetype defined in the virtual machine specification. UUID - The unique hardware identifier of the GPU resource.
Implement the Data Center GPU Manager Exporter (
dcgm-exporter) in the virtual machine with the attached GPU resources.NoteFor information on implementing the
dcgm-exporter, see Install DCGM Exporter.Expose the
dcgm-exporterwith aServiceobject. For information on configuring aServiceobject for this purpose, see Configuring the node exporter service. This section describes how to configure a node exporter service. It is the same process to configure thedcgm-exporter. Substitute yourdcgm-exporterconfiguration where appropriate.
13.4.3.3. Network metrics リンクのコピーリンクがクリップボードにコピーされました!
The following queries can identify virtual machines that are saturating the network:
kubevirt_vmi_network_receive_bytes_total- Returns the total amount of traffic received (in bytes) on the virtual machine’s network. Type: Counter.
kubevirt_vmi_network_transmit_bytes_total- Returns the total amount of traffic transmitted (in bytes) on the virtual machine’s network. Type: Counter.
Example network traffic query:
The following query returns the top 3 VMs transmitting the most network traffic at every given moment over a six-minute time period:
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
13.4.3.4. Storage metrics リンクのコピーリンクがクリップボードにコピーされました!
You can monitor virtual machine storage traffic and identify high-traffic VMs by using Prometheus queries.
The following queries can identify VMs that are writing large amounts of data:
kubevirt_vmi_storage_read_traffic_bytes_total- Returns the total amount (in bytes) of the virtual machine’s storage-related traffic. Type: Counter.
kubevirt_vmi_storage_write_traffic_bytes_total- Returns the total amount of storage writes (in bytes) of the virtual machine’s storage-related traffic. Type: Counter.
Example storage-related traffic queries:
The following query returns the top 3 VMs performing the most storage traffic at every given moment over a six-minute time period:
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]))) > 0The following query returns the top 3 VMs with the highest average read latency at every given moment over a six-minute time period:
topk(3, sum by (name, namespace) (rate(kubevirt_vmi_storage_read_times_seconds_total{name='${name}',namespace='${namespace}'${clusterFilter}}[6m]) / rate(kubevirt_vmi_storage_iops_read_total{name='${name}',namespace='${namespace}'${clusterFilter}}[6m]) > 0)) > 0
The following queries can track data restored from storage snapshots:
vm:kubevirt_vmsnapshot_disks_restored:sum- Returns the total number of virtual machine disks restored from the source virtual machine. Type: Gauge.
vm:kubevirt_vmsnapshot_restored_bytes:sum- Returns the amount of space in bytes restored from the source virtual machine. Type: Gauge.
Examples of storage snapshot data queries:
The following query returns the total number of virtual machine disks restored from the source virtual machine:
vm:kubevirt_vmsnapshot_disks_restored:sum{vm_name="simple-vm", vm_namespace="default"}The following query returns the amount of space in bytes restored from the source virtual machine:
vm:kubevirt_vmsnapshot_restored_bytes:sum{vm_name="simple-vm", vm_namespace="default"}
The following queries can determine the I/O performance of storage devices:
kubevirt_vmi_storage_iops_read_total- Returns the amount of read I/O operations the virtual machine is performing per second. Type: Counter.
kubevirt_vmi_storage_iops_write_total- Returns the amount of write I/O operations the virtual machine is performing per second. Type: Counter.
Example I/O performance query:
The following query returns the top 3 VMs performing the most I/O operations per second at every given moment over a six-minute time period:
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
13.4.3.5. Guest memory swapping metrics リンクのコピーリンクがクリップボードにコピーされました!
The following queries can identify which swap-enabled guests are performing the most memory swapping:
kubevirt_vmi_memory_swap_in_traffic_bytes- Returns the total amount (in bytes) of memory the virtual guest is swapping in. Type: Gauge.
kubevirt_vmi_memory_swap_out_traffic_bytes- Returns the total amount (in bytes) of memory the virtual guest is swapping out. Type: Gauge.
Example memory swapping query:
The following query returns the top 3 VMs where the guest is performing the most memory swapping at every given moment over a six-minute time period:
topk(3, sum by (name, namespace) (rate(kubevirt_vmi_memory_swap_in_traffic_bytes[6m])) + sum by (name, namespace) (rate(kubevirt_vmi_memory_swap_out_traffic_bytes[6m]))) > 0
Memory swapping indicates that the virtual machine is under memory pressure. Increasing the memory allocation of the virtual machine can mitigate this issue.
13.4.3.6. Crash detection metrics リンクのコピーリンクがクリップボードにコピーされました!
You can track guest operating system panic events to identify unstable virtual machines (VMs) and problematic VM images. OpenShift Virtualization detects a guest operating system panic through the pvpanic device on Linux and Windows guests, or through the Hyper-V enlightenment mechanism on Windows guests, and records each event in the following metric.
kubevirt_vmi_guest_os_panic_totalReturns the total number of guest operating system panic events detected for a VM. Type: Counter.
This metric includes the following labels:
-
namespaceandnameidentify the affected VM. -
typeidentifies the panic source, for examplepvpanicorhyper-v. -
bugcheck_codeprovides the bug check code for a Windows guest. Use this code to identify the cause of a Windows stop error.
-
Example crash frequency query:
The following query returns the top 3 VMs with the most guest operating system panic events over a one-hour period. A consistently high value can indicate an unstable workload or a problematic VM image:
topk(3, sum by (namespace, name) (increase(kubevirt_vmi_guest_os_panic_total[1h]))) > 0
Example 24-hour crash count query:
The following query returns the number of guest operating system panic events for each VM over a rolling 24-hour window. Use this query for immediate awareness of crash activity across your environment:
sum by (namespace, name) (increase(kubevirt_vmi_guest_os_panic_total[24h])) > 0
Example query to identify a problematic VM image:
To determine whether a VM image is the source of instability, compare the guest operating system panic events of VMs that were created from the same image. If multiple VMs share the same type or bugcheck_code value, the image or its drivers are the likely cause. The following query groups panic events by panic type over a 24-hour window:
sum by (namespace, name, type, bugcheck_code) (increase(kubevirt_vmi_guest_os_panic_total[24h])) > 0
The ClusterVMPanicDetected and VMNonRecoverableOSPanic alerts are based on the kubevirt_vmi_guest_os_panic_total metric. When a VM has a run strategy of Always, the VM restarts automatically after a non-recoverable panic. Repeated panic events for the same VM can indicate a crash loop that requires investigation.
13.4.3.7. Monitoring AAQ operator metrics リンクのコピーリンクがクリップボードにコピーされました!
The following metrics are exposed by the Application Aware Quota (AAQ) controller for monitoring resource quotas:
kube_application_aware_resourcequota- Returns the current quota usage and the CPU and memory limits enforced by the AAQ Operator resources. Type: Gauge.
kube_application_aware_resourcequota_creation_timestamp- Returns the time, in UNIX timestamp format, when the AAQ Operator resource is created. Type: Gauge.
13.4.3.8. VM label metrics リンクのコピーリンクがクリップボードにコピーされました!
kubevirt_vm_labelsReturns virtual machine labels as Prometheus labels. Type: Gauge.
You can expose and ignore specific labels by editing the
kubevirt-vm-labels-configconfig map. After you apply the config map to your cluster, the configuration is loaded dynamically.Example config map:
apiVersion: v1 kind: ConfigMap metadata: name: kubevirt-vm-labels-config namespace: openshift-cnv data: allowlist: "*" ignorelist: ""data.allowlistspecifies labels to expose.-
If
data.allowlisthas a value of"*", all labels are included. -
If
data.allowlisthas a value of"", the metric does not return any labels. -
If
data.allowlistcontains a list of label keys, only the explicitly named labels are exposed. For example:allowlist: "example.io/name,example.io/version".
-
If
data.ignorelistspecifies labels to ignore. The ignore list overrides the allow list.-
The
data.ignorelistfield does not support wildcard patterns. It can be empty or include a list of specific labels to ignore. -
If
data.ignorelisthas a value of"", no labels are ignored.
-
The
13.4.3.9. Live migration metrics リンクのコピーリンクがクリップボードにコピーされました!
You can query metrics to show live migration status.
kubevirt_vmi_migration_data_processed_bytes- The amount of guest operating system data that has migrated to the new virtual machine (VM). Type: Gauge.
kubevirt_vmi_migration_data_remaining_bytes- The amount of guest operating system data that remains to be migrated. Type: Gauge.
kubevirt_vmi_migration_memory_transfer_rate_bytes- The rate at which memory is becoming dirty in the guest operating system. Dirty memory is data that has been changed but not yet written to disk. Type: Gauge.
kubevirt_vmi_migrations_in_pending_phase- The number of pending migrations. Type: Gauge.
kubevirt_vmi_migrations_in_scheduling_phase- The number of scheduling migrations. Type: Gauge.
kubevirt_vmi_migrations_in_running_phase- The number of running migrations. Type: Gauge.
kubevirt_vmi_migration_succeeded- The number of successfully completed migrations. Type: Gauge.
kubevirt_vmi_migration_failed- The number of failed migrations. Type: Gauge.
13.4.4. Virtualization dashboards overview リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Virtualization includes Perses-based dashboards that give you visibility into virtual machine (VM) inventory, health, resource usage, service levels, and capacity across your cluster.
The dashboards are deployed automatically as PersesDashboard custom resources by the HyperConverged Cluster Operator (HCO) in the openshift-cnv namespace.
To access these dashboards, click Observe
The dashboards require Cluster Observability Operator (COO) with the monitoring stack enabled.
The following table describes the available OpenShift Virtualization dashboards:
| Dashboard | Description |
|---|---|
| Virtual Machines Inventory | Lists all VMs in the cluster with status, instance type, guest operating system, resource allocation, and operational flags such as live-migratable and evictable. Use this dashboard to manage your VM fleet and find VMs that match specific criteria. |
| Virtual Machines Utilization | Shows resource usage for each VM, including CPU, memory, swap, storage, network, and filesystem metrics. Use this dashboard to monitor resources, right-size VMs, and optimize costs. |
| Virtual Machines Service Level | Tracks VM uptime and downtime over a defined range of time, showing planned and unplanned breakdowns. Use this dashboard to report on service-level agreements (SLAs) and find VMs with unexpected downtime. |
| Virtual Machines Time in Status | Shows how long each VM has been in its current state, with filters for time thresholds. Use this dashboard to find stuck VMs or long-stopped VMs that can be cleaned up. |
| Top Consumers | Ranks VMs by resource consumption across memory, CPU, storage, network, vCPU wait time, and swap. Use this dashboard to plan capacity and identify resource contention. |
| Nodes Memory | Shows memory usage per node, including overcommit ratios, memory pressure, and system reservations. Use this dashboard to plan memory capacity, analyze overcommit, and prevent out-of-memory events. |
13.4.4.1. Dashboard panel types リンクのコピーリンクがクリップボードにコピーされました!
The OpenShift Virtualization dashboards combine the following panel types to display data. Understanding each panel type helps you interpret any dashboard.
- Gauge panels
- Display a single percentage value against thresholds that classify the value as healthy, warning, or critical. Each state also has a color: healthy is green, warning is amber, and critical is red.
- Time series panels
- Display multi-line plots over a time range. Use these panels to identify trends and compare entities over time.
- Stat panels
- Display a single numeric value with unit formatting, such as bytes, percentage, or hours.
- Table panels
- Display multi-column, sortable data with filtering and conditional formatting. Most dashboards use table panels as their primary display.
13.4.4.2. Nodes Memory dashboard concepts リンクのコピーリンクがクリップボードにコピーされました!
The Nodes Memory dashboard helps you plan memory capacity, analyze overcommit, and prevent out-of-memory events. To use the dashboard effectively, you must understand the following concepts.
The dashboard filters all data by node and by Kubernetes node role. The role filter defaults to worker, so the dashboard excludes control plane nodes until you change the filter.
- Memory overcommit
- Overcommit is the practice of assigning more virtual memory to VMs than the physical memory available on a node. The overcommit ratio compares assigned virtual memory to physical memory or to pod memory requests. A higher ratio increases VM density but also increases the risk of memory contention if VMs use their assigned memory at the same time.
- Virtual committed memory
- Virtual committed memory is the total memory committed to VMs, including launcher overhead, measured against allocatable physical memory. Comparing committed virtual memory to node capacity shows the worst-case memory demand if all VMs use their full memory allocation at once.
- Pressure stall information (PSI)
-
PSI measures the time that processes are delayed or blocked while waiting for memory. A
Waitingvalue indicates processes that are delayed, and aStalledvalue indicates processes that are completely blocked. Rising PSI values indicate memory contention that can affect workload performance. - Swap usage
- Rising swap usage indicates memory pressure that has not yet caused PSI stalls. Monitor swap usage as an early warning of memory constraints.
- System reserved memory
-
System reserved memory is the memory set aside for system processes on each node. When active system process memory approaches the reserved budget, the node can trigger the
SystemMemoryExceedsReservationalert.
Use these metrics together to detect memory pressure before it affects workloads, evaluate overcommit ratios, and plan node scaling decisions. The following thresholds indicate the overall memory health of the cluster:
- Healthy
- Memory utilization is below 70%, virtual committed memory is below 120%, PSI values are near zero, and no node exceeds its system reserved memory.
- Warning
- Memory utilization is between 80% and 90%, virtual committed memory approaches 150%, or individual nodes diverge significantly from the cluster average, which indicates imbalanced scheduling.
- Critical
- Memory utilization is above 90%, PSI values exceed 0.5, a node exceeds its system reserved memory, or the virtual commit ratio on a node exceeds 200%. These conditions indicate that the cluster is at risk of out-of-memory events and VM eviction.
13.5. Exposing custom metrics for virtual machines リンクのコピーリンクがクリップボードにコピーされました!
Monitor core platform components by using the OpenShift Container Platform monitoring stack based on the Prometheus monitoring system. Additionally, enable monitoring for user-defined projects by using the CLI and query custom metrics exposed for virtual machines through the node-exporter service.
13.5.1. Configure the node exporter service リンクのコピーリンクがクリップボードにコピーされました!
The node-exporter agent is deployed on every virtual machine in the cluster from which you want to collect metrics. Configure the node-exporter agent as a service to expose internal metrics and processes that are associated with virtual machines.
Prerequisites
-
Install the OpenShift CLI (
oc). -
Log in to the cluster as a user with
cluster-adminprivileges. -
Create the
cluster-monitoring-configConfigMapobject in theopenshift-monitoringproject. -
Configure the
user-workload-monitoring-configConfigMapobject in theopenshift-user-workload-monitoringproject by settingenableUserWorkloadtotrue.
Procedure
Create the
ServiceYAML file. In the following example, the file is callednode-exporter-service.yaml.kind: Service apiVersion: v1 metadata: name: node-exporter-service namespace: dynamation labels: servicetype: metrics spec: ports: - name: exmet protocol: TCP port: 9100 targetPort: 9100 type: ClusterIP selector: monitor: metrics-
metadata.namedefines the node-exporter service that exposes the metrics from the virtual machines. -
metadata.namespacedefines the namespace where the service is created. -
metadata.labels.servicetypedefines the label for the service. TheServiceMonitoruses this label to match this service. -
spec.ports.namedefines the name given to the port that exposes metrics on port 9100 for theClusterIPservice. -
spec.ports.portdefines the target port used bynode-exporter-serviceto listen for requests. -
spec.ports.targetPortdefines the TCP port number of the virtual machine that is configured with themonitorlabel. -
spec.selector.monitordefines the label used to match the virtual machine’s pods. In this example, any virtual machine’s pod with the labelmonitorand a value ofmetricswill be matched.
-
Create the node-exporter service:
$ oc create -f node-exporter-service.yaml
13.5.2. Configure a virtual machine with the node exporter service リンクのコピーリンクがクリップボードにコピーされました!
Download the node-exporter file on to the virtual machine. Then, create a systemd service that runs the node-exporter service when the virtual machine boots.
Prerequisites
-
The pods for the component are running in the
openshift-user-workload-monitoringproject. -
Grant the
monitoring-editrole to users who need to monitor this user-defined project.
Procedure
- Log on to the virtual machine.
Download the
node-exporterfile on to the virtual machine by using the directory path that applies to the version ofnode-exporterfile.$ wget https://github.com/prometheus/node_exporter/releases/download/<version>/node_exporter-<version>.linux-<architecture>.tar.gzExtract the executable and place it in the
/usr/bindirectory.$ sudo tar xvf node_exporter-<version>.linux-<architecture>.tar.gz \ --directory /usr/bin --strip 1 "*/node_exporter"Create a
node_exporter.servicefile in this directory path:/etc/systemd/system. Thissystemdservice file runs the node-exporter service when the virtual machine reboots.[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.targetEnable and start the
systemdservice.$ sudo systemctl enable node_exporter.service$ sudo systemctl start node_exporter.service
Verification
Verify that the node-exporter agent is reporting metrics from the virtual machine.
$ curl http://localhost:9100/metricsExample output:
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
13.5.3. Create a custom monitoring label for virtual machines リンクのコピーリンクがクリップボードにコピーされました!
To enable queries to multiple virtual machines from a single service, you can add a custom label in the virtual machine’s YAML file.
Prerequisites
-
Install the OpenShift CLI (
oc). -
Log in as a user with
cluster-adminprivileges. - Access to the web console for stop and restart a virtual machine.
Procedure
Edit the
templatespec of your virtual machine configuration file. In this example, the labelmonitorhas the valuemetrics.spec: template: metadata: labels: monitor: metrics-
Stop and restart the virtual machine to create a new pod with the label name given to the
monitorlabel.
13.5.3.1. Query the node-exporter service for metrics リンクのコピーリンクがクリップボードにコピーされました!
Metrics are exposed for virtual machines through an HTTP service endpoint under the /metrics canonical name. When you query for metrics, Prometheus directly scrapes the metrics from the metrics endpoint exposed by the virtual machines and presents these metrics for viewing.
Prerequisites
-
You have access to the cluster as a user with
cluster-adminprivileges or themonitoring-editrole. - You have enabled monitoring for the user-defined project by configuring the node-exporter service.
-
You have installed the OpenShift CLI (
oc).
Procedure
Obtain the HTTP service endpoint by specifying the namespace for the service:
$ oc get service -n <namespace> <node-exporter-service>To list all available metrics for the node-exporter service, query the
metricsresource.$ curl http://<172.30.226.162:9100>/metrics | grep -vE "^#|^$"Example output:
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
13.5.4. Create a ServiceMonitor resource for the node exporter service リンクのコピーリンクがクリップボードにコピーされました!
You can use a Prometheus client library and scrape metrics from the /metrics endpoint to access and view the metrics exposed by the node-exporter service. Use a ServiceMonitor custom resource definition (CRD) to monitor the node exporter service.
Prerequisites
-
You have access to the cluster as a user with
cluster-adminprivileges or themonitoring-editrole. - You have enabled monitoring for the user-defined project by configuring the node-exporter service.
-
You have installed the OpenShift CLI (
oc).
Procedure
Create a YAML file for the
ServiceMonitorresource configuration. In this example, the service monitor matches any service with the labelmetricsand queries theexmetport every 30 seconds.apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: labels: k8s-app: node-exporter-metrics-monitor name: node-exporter-metrics-monitor namespace: dynamation spec: endpoints: - interval: 30s port: exmet scheme: http selector: matchLabels: servicetype: metrics-
metadata.namedefines the name of theServiceMonitor. -
metadata.namespacedefines the namespace where theServiceMonitoris created. -
spec.endpoints.intervaldefines the interval at which the port will be queried. -
spec.endpoints.portdefines the name of the port that is queried every 30 seconds
-
Create the
ServiceMonitorconfiguration for the node-exporter service.$ oc create -f node-exporter-metrics-monitor.yaml
13.5.4.1. Access the node exporter service outside the cluster リンクのコピーリンクがクリップボードにコピーされました!
You can access the node-exporter service outside the cluster and view the exposed metrics.
Prerequisites
-
You have access to the cluster as a user with
cluster-adminprivileges or themonitoring-editrole. - You have enabled monitoring for the user-defined project by configuring the node-exporter service.
-
You have installed the OpenShift CLI (
oc).
Procedure
Expose the node-exporter service.
$ oc expose service -n <namespace> <node_exporter_service_name>Obtain the FQDN (Fully Qualified Domain Name) for the route.
$ oc get route -o=custom-columns=NAME:.metadata.name,DNS:.spec.hostExample output:
NAME DNS node-exporter-service node-exporter-service-dynamation.apps.cluster.example.orgUse the
curlcommand to display metrics for the node-exporter service.$ curl -s http://node-exporter-service-dynamation.apps.cluster.example.org/metricsExample output:
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
13.6. Exposing downward metrics for virtual machines リンクのコピーリンクがクリップボードにコピーされました!
As an administrator, you can expose a set of host and virtual machine (VM) metrics to a guest VM by enabling the downwardMetrics feature gate and configuring a downward metrics device. You can view these metrics by using the command line or the vm-dump-metrics tool.
On Red Hat Enterprise Linux (RHEL) 9, use the command line to view downward metrics.
The vm-dump-metrics tool is not supported on the Red Hat Enterprise Linux (RHEL) 9 platform.
13.6.1. Enable or disable downward metrics by editing the HyperConverged CR リンクのコピーリンクがクリップボードにコピーされました!
To expose downward metrics for a host virtual machine, you can enable the downwardMetrics feature gate by editing a YAML file.
Prerequisites
- You must have administrator privileges to enable the feature gate.
-
You have installed the OpenShift CLI (
oc).
Procedure
Open the HyperConverged custom resource (CR) in your default editor by running the following command:
$ oc edit hco kubevirt-hyperconverged -n openshift-cnvChoose to enable or disable the downwardMetrics feature gate as follows:
To enable the
downwardMetricsfeature gate, add a feature gate entry withname: downwardMetrics. For example:apiVersion: hco.kubevirt.io/v1 kind: HyperConverged metadata: name: kubevirt-hyperconverged namespace: openshift-cnv spec: featureGates: - name: downwardMetrics # ...To disable the
downwardMetricsfeature gate, set thestatetoDisabled. For example:apiVersion: hco.kubevirt.io/v1 kind: HyperConverged metadata: name: kubevirt-hyperconverged namespace: openshift-cnv spec: featureGates: - name: downwardMetrics state: Disabled # ...
13.6.2. Enable or disable downward metrics by running an oc patch command リンクのコピーリンクがクリップボードにコピーされました!
To expose downward metrics for a host virtual machine, you can enable the downwardMetrics feature gate by using the command line.
Prerequisites
- You must have administrator privileges to enable the feature gate.
-
You have installed the OpenShift CLI (
oc).
Procedure
Choose to enable or disable the
downwardMetricsfeature gate as follows:Enable the
downwardMetricsfeature gate by running the command shown in the following example:$ oc patch hco kubevirt-hyperconverged -n openshift-cnv \ --type json -p '[{"op": "add", "path": "/spec/featureGates/-", \ "value": {"name": "downwardMetrics"}}]'Disable the
downwardMetricsfeature gate by running the command shown in the following example:$ oc patch hco kubevirt-hyperconverged -n openshift-cnv \ --type json -p '[{"op": "add", "path": "/spec/featureGates/-", \ "value": {"name": "downwardMetrics", "state": "Disabled"}}]'
13.6.3. Configure a downward metrics device リンクのコピーリンクがクリップボードにコピーされました!
You can enable the capturing of downward metrics for a host VM by creating a configuration file that includes a downwardMetrics device. Adding this device establishes that the metrics are exposed through a virtio-serial port.
Prerequisites
-
You must first enable the
downwardMetricsfeature gate.
Procedure
Edit or create a YAML file that includes a
downwardMetricsdevice, as shown in the following example:apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: fedora namespace: default spec: dataVolumeTemplates: - metadata: name: fedora-volume spec: sourceRef: kind: DataSource name: fedora namespace: openshift-virtualization-os-images storage: resources: {} instancetype: name: u1.medium runStrategy: Always template: metadata: labels: app.kubernetes.io/name: headless spec: domain: devices: downwardMetrics: {} subdomain: headless volumes: - dataVolume: name: fedora-volume name: rootdisk - cloudInitNoCloud: userData: | #cloud-config chpasswd: expire: false password: '<password>' user: fedora name: cloudinitdisk-
spec.domain.devices.downwardMetricsdefines thedownwardMetricsdevice. -
spec.volumes.cloudInitNoCloud.userdata.passworddefines the password for thefedorauser.
13.6.4. View downward metrics by using the CLI リンクのコピーリンクがクリップボードにコピーされました!
You can view downward metrics by entering a command from inside a guest virtual machine (VM).
Procedure
Run the following commands:
$ sudo sh -c 'printf "GET /metrics/XML\n\n" > /dev/virtio-ports/org.github.vhostmd.1'$ sudo cat /dev/virtio-ports/org.github.vhostmd.1
13.6.5. View downward metrics by using the vm-dump-metrics tool リンクのコピーリンクがクリップボードにコピーされました!
To view downward metrics, install the vm-dump-metrics tool and then use the tool to expose the metrics results.
On Red Hat Enterprise Linux (RHEL) 9, use the command line to view downward metrics. The vm-dump-metrics tool is not supported on the Red Hat Enterprise Linux (RHEL) 9 platform.
Procedure
Install the
vm-dump-metricstool by running the following command:$ sudo dnf install -y vm-dump-metricsRetrieve the metrics results by running the following command:
$ sudo vm-dump-metricsExample output:
<metrics> <metric type="string" context="host"> <name>HostName</name> <value>node01</value> [...] <metric type="int64" context="host" unit="s"> <name>Time</name> <value>1619008605</value> </metric> <metric type="string" context="host"> <name>VirtualizationVendor</name> <value>kubevirt.io</value> </metric> </metrics>
13.7. Virtual machine health checks リンクのコピーリンクがクリップボードにコピーされました!
Define probes and watchdogs in the VirtualMachine resource to configure virtual machine (VM) health checks. Health checks monitor and report the internal state of a VM.
You can configure VM health checks by defining readiness and liveness probes in the VirtualMachine resource.
13.7.1. Readiness and liveness probes for VM health リンクのコピーリンクがクリップボードにコピーされました!
Use readiness and liveness probes to detect and handle unhealthy virtual machines (VMs). You can include one or more probes in the specification of the VM to ensure that traffic does not reach a VM that is not ready for it and that a new VM is created when a VM becomes unresponsive.
A readiness probe determines whether a VM is ready to accept service requests. If the probe fails, the VM is removed from the list of available endpoints until the VM is ready.
A liveness probe determines whether a VM is responsive. If the probe fails, the VM is deleted and a new VM is created to restore responsiveness.
You can configure readiness and liveness probes by setting the spec.readinessProbe and the spec.livenessProbe fields of the VirtualMachine object. These fields support the following tests:
- HTTP GET
- The probe determines the health of the VM by using a web hook. The test is successful if the HTTP response code is between 200 and 399. You can use an HTTP GET test with applications that return HTTP status codes when they are completely initialized.
- TCP socket
- The probe attempts to open a socket to the VM. The VM is only considered healthy if the probe can establish a connection. You can use a TCP socket test with applications that do not start listening until initialization is complete.
- Guest agent ping
-
The probe uses the
guest-pingcommand to determine if the QEMU guest agent is running on the virtual machine.
13.7.1.1. Define an HTTP readiness probe リンクのコピーリンクがクリップボードにコピーされました!
You can define an HTTP readiness probe by setting the spec.readinessProbe.httpGet field of the virtual machine (VM) configuration.
Prerequisites
-
You have installed the OpenShift CLI (
oc).
Procedure
Include details of the readiness probe in the VM configuration file.
Sample readiness probe with an HTTP GET test:
apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: annotations: name: fedora-vm namespace: example-namespace # ... spec: template: spec: readinessProbe: httpGet: port: 1500 path: /healthz httpHeaders: - name: Custom-Header value: Awesome initialDelaySeconds: 120 periodSeconds: 20 timeoutSeconds: 10 failureThreshold: 3 successThreshold: 3 # ...-
spec.template.spec.readinessProbe.httpGetdefines the HTTP GET request to perform to connect to the VM. -
spec.template.spec.readinessProbe.httpGet.portdefines the port of the VM that the probe queries. In the above example, the probe queries port 1500. -
spec.template.spec.readinessProbe.httpGet.pathdefines the path to access on the HTTP server. In the above example, if the handler for the server’s /healthz path returns a success code, the VM is considered to be healthy. If the handler returns a failure code, the VM is removed from the list of available endpoints. -
spec.template.spec.readinessProbe.initialDelaySecondsdefines the time, in seconds, after the VM starts before the readiness probe is initiated. -
spec.template.spec.readinessProbe.periodSecondsdefines the delay, in seconds, between performing probes. The default delay is 10 seconds. This value must be greater thantimeoutSeconds. -
spec.template.spec.readinessProbe.timeoutSecondsdefines the number of seconds of inactivity after which the probe times out and the VM is assumed to have failed. The default value is 1. This value must be lower thanperiodSeconds. -
spec.template.spec.readinessProbe.failureThresholddefines the number of times that the probe is allowed to fail. The default is 3. After the specified number of attempts, the pod is markedUnready. -
spec.template.spec.readinessProbe.successThresholddefines the number of times that the probe must report success, after a failure, to be considered successful. The default is 1.
-
Create the VM by running the following command:
$ oc create -f <file_name>.yaml
13.7.1.2. Define a TCP readiness probe リンクのコピーリンクがクリップボードにコピーされました!
You can define a TCP readiness probe by setting the spec.readinessProbe.tcpSocket field of the virtual machine (VM) configuration.
Prerequisites
-
You have installed the OpenShift CLI (
oc).
Procedure
Include details of the TCP readiness probe in the VM configuration file.
Sample readiness probe with a TCP socket test:
apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: annotations: name: fedora-vm namespace: example-namespace # ... spec: template: spec: readinessProbe: initialDelaySeconds: 120 periodSeconds: 20 tcpSocket: port: 1500 timeoutSeconds: 10 # ...-
spec.template.spec.readinessProbe.initialDelaySecondsdefines the time, in seconds, after the VM starts before the readiness probe is initiated. -
spec.template.spec.readinessProbe.periodSeconds`defines the delay, in seconds, between performing probes. The default delay is 10 seconds. This value must be greater than `timeoutSeconds. -
spec.template.spec.readinessProbe.tcpSocketdefines the TCP action to perform. -
spec.template.spec.readinessProbe.tcpSocket.portdefines the port of the VM that the probe queries. -
spec.template.spec.readinessProbe.timeoutSecondsdefines the number of seconds of inactivity after which the probe times out and the VM is assumed to have failed. The default value is 1. This value must be lower thanperiodSeconds.
-
Create the VM by running the following command:
$ oc create -f <file_name>.yaml
13.7.1.3. Define an HTTP liveness probe リンクのコピーリンクがクリップボードにコピーされました!
Define an HTTP liveness probe by setting the spec.livenessProbe.httpGet field of the virtual machine (VM) configuration. You can define both HTTP and TCP tests for liveness probes in the same way as readiness probes. This procedure configures a sample liveness probe with an HTTP GET test.
Prerequisites
-
You have installed the OpenShift CLI (
oc).
Procedure
Include details of the HTTP liveness probe in the VM configuration file.
Sample liveness probe with an HTTP GET test:
apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: annotations: name: fedora-vm namespace: example-namespace # ... spec: template: spec: livenessProbe: initialDelaySeconds: 120 periodSeconds: 20 httpGet: port: 1500 path: /healthz httpHeaders: - name: Custom-Header value: Awesome timeoutSeconds: 10 # ...-
spec.tenmplate.spec.livenessProbe.initialDelaySecondsdefines the time, in seconds, after the VM starts before the liveness probe is initiated. -
spec.tenmplate.spec.livenessProbe.periodSecondsdefines the delay, in seconds, between performing probes. The default delay is 10 seconds. This value must be greater thantimeoutSeconds. -
spec.tenmplate.spec.livenessProbe.httpGetdefines the HTTP GET request to perform to connect to the VM. -
spec.tenmplate.spec.livenessProbe.httpGet.portdefines the port of the VM that the probe queries. In the above example, the probe queries port 1500. The VM installs and runs a minimal HTTP server on port 1500 via cloud-init. -
spec.tenmplate.spec.livenessProbe.httpGet.pathdefines the path to access on the HTTP server. In the above example, if the handler for the server’s/healthzpath returns a success code, the VM is considered to be healthy. If the handler returns a failure code, the VM is deleted and a new VM is created. -
spec.tenmplate.spec.livenessProbe.timeoutSecondsdefines the number of seconds of inactivity after which the probe times out and the VM is assumed to have failed. The default value is 1. This value must be lower thanperiodSeconds.
-
Create the VM by running the following command:
$ oc create -f <file_name>.yaml
13.7.2. Watchdog devices and recovery actions リンクのコピーリンクがクリップボードにコピーされました!
Watchdog devices monitor guest operating system responsiveness and trigger recovery actions when a virtual machine becomes unresponsive.
A watchdog device continuously monitors the agent running on a virtual machine (VM). When the guest operating system becomes unresponsive, the watchdog can trigger one of three recovery actions depending on how it is configured.
The poweroff action causes the VM to power down immediately. If spec.runStrategy is not set to manual, the VM automatically reboots after powering down.
The reset action reboots the VM in place without allowing the guest operating system to react. When using the reset action, be aware that the reboot time might cause liveness probes to time out. If cluster-level protections detect a failed liveness probe, the VM might be forcibly rescheduled, which increases the overall reboot time.
The shutdown action initiates a graceful shutdown by stopping all services before powering down the VM.
Watchdog functionality is not available for Windows VMs.
To implement watchdog functionality, you must configure the watchdog device for the VM and install the watchdog agent on the guest operating system.
13.7.2.1. Configure a watchdog device for a virtual machine リンクのコピーリンクがクリップボードにコピーされました!
You configure a watchdog device for the virtual machine (VM).
Prerequisites
-
For
x86systems, the VM must use a kernel that works with thei6300esbwatchdog device. If you uses390xarchitecture, the kernel must be enabled fordiag288. Red Hat Enterprise Linux (RHEL) images supporti6300esbanddiag288. -
You have installed the OpenShift CLI (
oc).
Procedure
Create a
YAMLfile with the following contents:apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: labels: kubevirt.io/vm: <vm-label> name: <vm-name> spec: runStrategy: Halted template: metadata: labels: kubevirt.io/vm: <vm-label> spec: domain: devices: watchdog: name: <watchdog> <watchdog-device-model>: action: "poweroff" # ...-
spec.template.spec.domain.devices.watchdog.name.<watchdog-device-model>defines the watchdog device model to use. Forx86specifyi6300esb. Fors390xspecifydiag288. spec.template.spec.domain.devices.watchdog.name.<watchdog-device-model>.actiondefines the watchdog device action. Specifypoweroff,reset, orshutdown. Theshutdownaction requires that the guest virtual machine is responsive to ACPI signals. Usingshutdownis not recommended.The example above configures the watchdog device on a VM with the
poweroffaction and exposes the device as/dev/watchdog.This device can now be used by the watchdog binary.
-
Apply the YAML file to your cluster by running the following command:
$ oc apply -f <file_name>.yaml
Verification
Run the following command to verify that the VM is connected to the watchdog device:
ImportantVerification steps are provided for testing watchdog functionality only and must not be run on production machines.
$ lspci | grep watchdog -iRun one of the following commands to confirm the watchdog is active:
Trigger a kernel panic:
# echo c > /proc/sysrq-triggerStop the watchdog service:
# pkill -9 watchdog
13.7.2.2. Install the watchdog agent on the guest リンクのコピーリンクがクリップボードにコピーされました!
You can install the watchdog agent on the guest and start the watchdog service.
Procedure
- Log in to the virtual machine as root user.
This step is only required when installing on IBM Z® (
s390x). Enablewatchdogby running the following command:# modprobe diag288_wdtVerify that the
/dev/watchdogfile path is present in the VM by running the following command:# ls /dev/watchdogInstall the
watchdogpackage and its dependencies:# yum install watchdogUncomment the following line in the
/etc/watchdog.conffile and save the changes:#watchdog-device = /dev/watchdogEnable the
watchdogservice to start on boot:# systemctl enable --now watchdog.service
13.7.3. Define a guest agent ping probe リンクのコピーリンクがクリップボードにコピーされました!
You can define a guest agent ping probe by setting the spec.readinessProbe.guestAgentPing field of the virtual machine (VM) configuration.
Prerequisites
- The QEMU guest agent must be installed and enabled on the virtual machine.
-
You have installed the OpenShift CLI (
oc).
Procedure
Include details of the guest agent ping probe in the VM configuration file. For example:
apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: annotations: name: fedora-vm namespace: example-namespace # ... spec: template: spec: readinessProbe: guestAgentPing: {} initialDelaySeconds: 120 periodSeconds: 20 timeoutSeconds: 10 failureThreshold: 3 successThreshold: 3 # ...-
spec.template.spec.readinessProbe.guestAgentPingdefines the guest agent ping probe to connect to the VM. -
spec.template.spec.readinessProbe.initialDelaySecondsdefines the time, in seconds, after the VM starts before the guest agent probe is initiated. This value is optional. -
spec.template.spec.readinessProbe.periodSecondsdefines the delay, in seconds, between performing probes. The default delay is 10 seconds. This value must be greater thantimeoutSeconds. This value is optional -
spec.template.spec.readinessProbe.timeoutSecondsdefines the number of seconds of inactivity after which the probe times out and the VM is assumed to have failed. The default value is 1. This value must be lower thanperiodSeconds. This value is optional. -
spec.template.spec.readinessProbe.failureThresholddefines the number of times that the probe is allowed to fail. The default is 3. After the specified number of attempts, the pod is markedUnready. This value is optional. -
spec.template.spec.readinessProbe.successThresholddefines the number of times that the probe must report success, after a failure, to be considered successful. The default is 1. This value is optional.
-
Create the VM by running the following command:
$ oc create -f <file_name>.yaml
13.7.3.1. Guest maintenance without unwanted VM restarts リンクのコピーリンクがクリップボードにコピーされました!
During maintenance operations such as guest OS updates, the QEMU guest agent might become temporarily unavailable. If a GuestAgentPing liveness probe is configured, probe failures cause the kubelet to restart the pod, which destroys the running virtual machine (VM).
You can prevent unwanted pod restarts by temporarily pausing GuestAgentPing probes. Setting the kubevirt.io/pause-guest-agent-probes annotation on a VirtualMachineInstance (VMI) resource causes virt-launcher to return immediate success for GuestAgentPing probes without contacting the QEMU guest agent.
This is a manual, temporary measure. You must set the annotation yourself before maintenance and remove it yourself when maintenance is complete. The annotation is not set or removed automatically. If the GuestAgentPing probe is no longer needed, update the VM spec to remove the probe instead of relying on the annotation.
Consider pausing probes in the following scenarios:
- Guest OS updates that require one or more reboots, such as Windows updates
- Any planned maintenance where the guest agent will be temporarily unavailable
-
This annotation only affects
GuestAgentPingprobes. HTTP, TCP, and exec probes are not affected. -
The annotation takes effect within seconds on the next
virt-launchersync cycle. - You must manually remove the annotation after maintenance to resume normal probe behavior. Probes remain paused indefinitely while the annotation is set.
-
If you no longer require the
GuestAgentPingprobe, remove it from the VM spec rather than keeping the annotation set permanently.
13.7.3.2. Pause and resume guest agent ping probes リンクのコピーリンクがクリップボードにコピーされました!
You can temporarily pause GuestAgentPing probes on a virtual machine instance (VMI) by adding an annotation. This prevents the kubelet from restarting the pod during maintenance operations when the guest agent is temporarily unavailable.
Prerequisites
-
A running VMI with a
GuestAgentPingliveness / readiness probe configured. -
You have installed the OpenShift CLI (
oc).
Procedure
Pause probes by annotating the VMI:
$ oc annotate vmi <vmi_name> kubevirt.io/pause-guest-agent-probes=trueVerify that the annotation is set:
$ oc get vmi <vmi_name> -o jsonpath='{.metadata.annotations.kubevirt\.io/pause-guest-agent-probes}'Example output
trueOptional: Verify that
virt-launcherhas picked up the annotation by checking its logs:$ oc logs -n <namespace> virt-launcher-<vmi_name>-<id> -c compute | grep "probe pause state"- Perform your maintenance operations, such as guest OS updates.
Resume probes by removing the annotation:
$ oc annotate vmi <vmi_name> kubevirt.io/pause-guest-agent-probes-
13.8. Standalone observability controller リンクのコピーリンクがクリップボードにコピーされました!
You can decouple OpenShift Virtualization monitoring from the main deployment by using the standalone observability controller. The controller externalizes monitoring into a standalone Operator.
The standalone observability controller is a Technology Preview feature only. Technology Preview features are not supported with Red Hat production service level agreements (SLAs) and might not be functionally complete. Red Hat does not recommend using them in production. These features provide early access to upcoming product features, enabling customers to test functionality and provide feedback during the development process.
For more information about the support scope of Red Hat Technology Preview features, see Technology Preview Features Support Scope.
The standalone observability controller provides the following capabilities:
- Prometheus metrics for OpenShift Virtualization resources, including virtual machines, virtual machine instances, migrations, and instance types.
-
Alerting rules and recording rules, reconciled through
PrometheusRulecustom resources. -
Metric collection endpoints, reconciled through
ServiceMonitorcustom resources.
13.8.1. Enable the standalone observability controller リンクのコピーリンクがクリップボードにコピーされました!
You can enable the standalone observability controller by setting the deployObservabilityController feature gate in the HyperConverged custom resource (CR). You can then update monitoring and alerts independently of the OpenShift Virtualization control plane.
The standalone observability controller is a Technology Preview feature only. Technology Preview features are not supported with Red Hat production service level agreements (SLAs) and might not be functionally complete. Red Hat does not recommend using them in production. These features provide early access to upcoming product features, enabling customers to test functionality and provide feedback during the development process.
For more information about the support scope of Red Hat Technology Preview features, see Technology Preview Features Support Scope.
Prerequisites
-
You have access to the cluster as a user with
cluster-adminpermissions. -
You have installed the OpenShift CLI (
oc).
Procedure
Enable the
deployObservabilityControllerfeature gate by running the following command:$ oc patch hco kubevirt-hyperconverged -n openshift-cnv \ --type json -p '[{"op": "add", "path": "/spec/featureGates/-", \ "value": {"name": "deployObservabilityController"}}]'
Verification
Verify that the feature gate is enabled by running the following command:
$ oc get hco kubevirt-hyperconverged -n openshift-cnv \ -o jsonpath='{.spec.featureGates}'Expected output
[{"name":"deployObservabilityController"}]
13.9. OpenShift Virtualization runbooks リンクのコピーリンクがクリップボードにコピーされました!
To diagnose and resolve OpenShift Virtualization alerts, you can use the OpenShift Virtualization Operator runbooks. These guides help ensure you can effectively troubleshoot cluster issues and restore system health.
Runbooks for the OpenShift Virtualization Operator are maintained in the openshift/runbooks Git repository, and you can view them on GitHub.
| Alert | GitHub link |
|---|---|
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
13.9.1. Runbooks for deprecated alerts リンクのコピーリンクがクリップボードにコピーされました!
Deprecated alerts no longer report actual issues and you can safely ignore them.
| Alert | GitHub link | Notes |
|---|---|---|
|
| - | |
|
| - | |
|
| - | |
|
| - | |
|
| - | |
|
| - | |
|
| - | |
|
| - | |
|
| - | |
|
| - | |
|
| - | |
|
| - | |
|
| - | |
|
|
Renamed to |