このコンテンツは選択した言語では利用できません。

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-exporter service 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.

Important

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.

Important

You must always:

  • Verify that the checkup image is from a trustworthy source before applying it.
  • Review the checkup permissions before creating the Role and RoleBinding objects.

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.

Important

You must always:

  • Verify that the checkup image is from a trustworthy source before applying it.
  • Review the checkup permissions before creating the Role and RoleBinding objects.

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

  1. Run the following command to edit the storage-checkup-config config map:

    $ oc edit configmap storage-checkup-config -n <checkup_namespace>
  2. Configure the skipTeardown field to use the onfailure value. You can do this by modifying the storage-checkup-config config map, stored in the storage_checkup.yaml file:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: storage-checkup-config
      namespace: <checkup_namespace>
    data:
      spec.param.skipTeardown: onfailure
    # ...
  3. Reapply the storage-checkup-config config 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

  1. Navigate to Virtualization Checkups in the web console.
  2. Click the Storage tab.
  3. Click Install permissions.
  4. Click Run checkup.
  5. Enter a name for the checkup in the Name field.
  6. Enter a timeout value for the checkup in the Timeout (minutes) fields.
  7. 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-reader permissions 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

  1. Create a ServiceAccount, Role, and RoleBinding manifest 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-role
  2. Apply the ServiceAccount, Role, and RoleBinding manifest in the target namespace:

    $ oc apply -n <target_namespace> -f <storage_sa_roles_rolebinding>.yaml
  3. Create a ConfigMap and Job manifest 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-config
  4. Apply the ConfigMap and Job manifest file in the target namespace to run the checkup:

    $ oc apply -n <target_namespace> -f <storage_configmap_job>.yaml
  5. Wait for the job to complete:

    $ oc wait job storage-checkup -n <target_namespace> --for condition=complete --timeout 10m
  6. Review the results of the checkup by running the following command:

    $ oc get configmap storage-checkup-config -n <target_namespace> -o yaml

    Example 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.succeeded defines if the checkup is successful (true) or not (false).
    • data.status.failureReason defines the reason for failure if the checkup fails.
    • data.status.startTimestamp defines the time when the checkup started, in RFC 3339 time format.
    • data.status.completionTimestamp defines the time when the checkup has completed, in RFC 3339 time format.
    • data.status.result.cnvVersion defines the OpenShift Virtualization version.
    • data.status.result.defaultStorageClass defines if there is a default storage class.
    • data.status.result.goldenImagesNoDataSource defines the list of golden images whose data source is not ready.
    • data.status.result.goldenImagesNotUpToDate defines the list of golden images whose data import cron is not up-to-date.
    • data.status.result.ocpVersion defines the OpenShift Container Platform version.
    • data.status.result.pvcBound defines if a PVC of 10Mi has been created and bound by the provisioner.
    • data.status.result.storageProfileMissingVolumeSnapshotClass defines the list of storage profiles using snapshot-based clone but missing VolumeSnapshotClass.
    • data.status.result.storageProfilesWithEmptyClaimPropertySets defines the list of storage profiles with unknown provisioners.
    • data.status.result.storageProfilesWithSmartClone defines the list of storage profiles with smart clone support (CSI/snapshot).
    • data.status.result.storageProfilesWithSpecClaimPropertySets defines the list of storage profiles spec-overriden claimPropertySets.
    • data.status.result.vmsWithNonVirtRbdStorageClass defines the list of virtual machines that use the Ceph RBD storage class when the virtualization storage class exists.
    • data.status.result.vmsWithUnsetEfsStorageClass defines 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.
  7. 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-config
  8. Optional: If you do not plan to run another checkup, delete the ServiceAccount, Role, and RoleBinding manifest:

    $ 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-gather tool.

Procedure

  1. Review the status.failureReason field in the storage-checkup-config config map by running the following command and observing the output:

    $ oc get configmap storage-checkup-config -n <namespace> -o yaml

    Example 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.succeeded value is false.
    • If the checkup has failed, the status.failureReason field contains an error message. In this example output, the ErrNoDefaultStorageClass error message means that no default storage class is configured.
  2. Search the directory provided by the must-gather tool for logs, events, or terms related to the error in the data.status.failureReason field 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 codeMeaning

ErrNoDefaultStorageClass

No default storage class is configured.

ErrPvcNotBound

One or more persistent volume claims (PVCs) failed to bind.

ErrMultipleDefaultStorageClasses

Multiple default storage classes are configured.

ErrEmptyClaimPropertySets

There are StorageProfile objects containing empty ClaimPropertySets specs.

ErrVMsWithUnsetEfsStorageClass

There are VMs using elastic file system (EFS) storage classes, where the GID and UID are not set in the StorageClass object.

ErrGoldenImagesNotUpToDate

One or more golden images has a DataImportCron object that is either not up to date or has a DataSource object which is not ready.

ErrGoldenImageNoDataSource

The DataSource object of the golden image has either no PVC or no snapshot source configured.

ErrBootFailedOnSomeVMs

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.

Note
  • To use the vCPU metric, apply the schedstats=enable kernel argument 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.
  • 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-admin cluster role or with view permissions for all projects.
  • You have installed the OpenShift CLI (oc).

Procedure

  1. In the OpenShift Container Platform web console, click Observe Metrics.
  2. To add one or more queries, perform any of the following actions:

    OptionDescription

    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 kebab next to the query, then choose Duplicate query.

    Disable a query from being run.

    Click the options menu kebab next to the query and choose Disable query.

  3. 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.
  4. Optional: Save the page URL to use this set of queries again in the future.
  5. 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:

    OptionDescription

    Hide all metrics from a query.

    Click the options menu kebab 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 ServiceMonitor custom resource definition (CRD) for the service to define how the service is monitored.

Procedure

  1. In the OpenShift Container Platform web console, click Observe Metrics.
  2. To add one or more queries, perform any of the following actions:

    OptionDescription

    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 kebab next to the query, then choose Duplicate query.

    Disable a query from being run.

    Click the options menu kebab next to the query and choose Disable query.

  3. 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.
  4. Optional: Save the page URL to use this set of queries again in the future.
  5. 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:

    OptionDescription

    Hide all metrics from a query.

    Click the options menu kebab 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.

Note

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.

Note

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_info

Returns 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 Resource type 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.

    Note

    For information on implementing the dcgm-exporter, see Install DCGM Exporter.

    Expose the dcgm-exporter with a Service object. For information on configuring a Service object 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 the dcgm-exporter. Substitute your dcgm-exporter configuration 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]))) > 0
  • The 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
Note

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_total

Returns the total number of guest operating system panic events detected for a VM. Type: Counter.

This metric includes the following labels:

  • namespace and name identify the affected VM.
  • type identifies the panic source, for example pvpanic or hyper-v.
  • bugcheck_code provides 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
Note

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_labels

Returns virtual machine labels as Prometheus labels. Type: Gauge.

You can expose and ignore specific labels by editing the kubevirt-vm-labels-config config 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.allowlist specifies labels to expose.

    • If data.allowlist has a value of "*", all labels are included.
    • If data.allowlist has a value of "", the metric does not return any labels.
    • If data.allowlist contains a list of label keys, only the explicitly named labels are exposed. For example: allowlist: "example.io/name,example.io/version".
  • data.ignorelist specifies labels to ignore. The ignore list overrides the allow list.

    • The data.ignorelist field does not support wildcard patterns. It can be empty or include a list of specific labels to ignore.
    • If data.ignorelist has a value of "", no labels are ignored.

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 Dashboards(Perses) in the web console.

The dashboards require Cluster Observability Operator (COO) with the monitoring stack enabled.

The following table describes the available OpenShift Virtualization dashboards:

DashboardDescription

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.

Note

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 Waiting value indicates processes that are delayed, and a Stalled value 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 SystemMemoryExceedsReservation alert.

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-admin privileges.
  • Create the cluster-monitoring-config ConfigMap object in the openshift-monitoring project.
  • Configure the user-workload-monitoring-config ConfigMap object in the openshift-user-workload-monitoring project by setting enableUserWorkload to true.

Procedure

  1. Create the Service YAML file. In the following example, the file is called node-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.name defines the node-exporter service that exposes the metrics from the virtual machines.
    • metadata.namespace defines the namespace where the service is created.
    • metadata.labels.servicetype defines the label for the service. The ServiceMonitor uses this label to match this service.
    • spec.ports.name defines the name given to the port that exposes metrics on port 9100 for the ClusterIP service.
    • spec.ports.port defines the target port used by node-exporter-service to listen for requests.
    • spec.ports.targetPort defines the TCP port number of the virtual machine that is configured with the monitor label.
    • spec.selector.monitor defines the label used to match the virtual machine’s pods. In this example, any virtual machine’s pod with the label monitor and a value of metrics will be matched.
  2. 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-monitoring project.
  • Grant the monitoring-edit role to users who need to monitor this user-defined project.

Procedure

  1. Log on to the virtual machine.
  2. Download the node-exporter file on to the virtual machine by using the directory path that applies to the version of node-exporter file.

    $ wget https://github.com/prometheus/node_exporter/releases/download/<version>/node_exporter-<version>.linux-<architecture>.tar.gz
  3. Extract the executable and place it in the /usr/bin directory.

    $ sudo tar xvf node_exporter-<version>.linux-<architecture>.tar.gz \
        --directory /usr/bin --strip 1 "*/node_exporter"
  4. Create a node_exporter.service file in this directory path: /etc/systemd/system. This systemd service 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.target
  5. Enable and start the systemd service.

    $ 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/metrics

    Example 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-admin privileges.
  • Access to the web console for stop and restart a virtual machine.

Procedure

  1. Edit the template spec of your virtual machine configuration file. In this example, the label monitor has the value metrics.

    spec:
      template:
        metadata:
          labels:
            monitor: metrics
  2. Stop and restart the virtual machine to create a new pod with the label name given to the monitor label.

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-admin privileges or the monitoring-edit role.
  • You have enabled monitoring for the user-defined project by configuring the node-exporter service.
  • You have installed the OpenShift CLI (oc).

Procedure

  1. Obtain the HTTP service endpoint by specifying the namespace for the service:

    $ oc get service -n <namespace> <node-exporter-service>
  2. To list all available metrics for the node-exporter service, query the metrics resource.

    $ 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-admin privileges or the monitoring-edit role.
  • You have enabled monitoring for the user-defined project by configuring the node-exporter service.
  • You have installed the OpenShift CLI (oc).

Procedure

  1. Create a YAML file for the ServiceMonitor resource configuration. In this example, the service monitor matches any service with the label metrics and queries the exmet port 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.name defines the name of the ServiceMonitor.
    • metadata.namespace defines the namespace where the ServiceMonitor is created.
    • spec.endpoints.interval defines the interval at which the port will be queried.
    • spec.endpoints.port defines the name of the port that is queried every 30 seconds
  2. Create the ServiceMonitor configuration 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-admin privileges or the monitoring-edit role.
  • You have enabled monitoring for the user-defined project by configuring the node-exporter service.
  • You have installed the OpenShift CLI (oc).

Procedure

  1. Expose the node-exporter service.

    $ oc expose service -n <namespace> <node_exporter_service_name>
  2. Obtain the FQDN (Fully Qualified Domain Name) for the route.

    $ oc get route -o=custom-columns=NAME:.metadata.name,DNS:.spec.host

    Example output:

    NAME                    DNS
    node-exporter-service   node-exporter-service-dynamation.apps.cluster.example.org
  3. Use the curl command to display metrics for the node-exporter service.

    $ curl -s http://node-exporter-service-dynamation.apps.cluster.example.org/metrics

    Example 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.

Note

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

  1. Open the HyperConverged custom resource (CR) in your default editor by running the following command:

    $ oc edit hco kubevirt-hyperconverged -n openshift-cnv
  2. Choose to enable or disable the downwardMetrics feature gate as follows:

    • To enable the downwardMetrics feature gate, add a feature gate entry with name: downwardMetrics. For example:

      apiVersion: hco.kubevirt.io/v1
      kind: HyperConverged
      metadata:
        name: kubevirt-hyperconverged
        namespace: openshift-cnv
      spec:
        featureGates:
          - name: downwardMetrics
      # ...
    • To disable the downwardMetrics feature gate, set the state to Disabled. 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 downwardMetrics feature gate as follows:

    • Enable the downwardMetrics feature 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 downwardMetrics feature 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 downwardMetrics feature gate.

Procedure

  • Edit or create a YAML file that includes a downwardMetrics device, 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.downwardMetrics defines the downwardMetrics device.
  • spec.volumes.cloudInitNoCloud.userdata.password defines the password for the fedora user.

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.

Note

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

  1. Install the vm-dump-metrics tool by running the following command:

    $ sudo dnf install -y vm-dump-metrics
  2. Retrieve the metrics results by running the following command:

    $ sudo vm-dump-metrics

    Example 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-ping command 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

  1. 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.httpGet defines the HTTP GET request to perform to connect to the VM.
    • spec.template.spec.readinessProbe.httpGet.port defines the port of the VM that the probe queries. In the above example, the probe queries port 1500.
    • spec.template.spec.readinessProbe.httpGet.path defines 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.initialDelaySeconds defines 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.timeoutSeconds defines 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 than periodSeconds.
    • spec.template.spec.readinessProbe.failureThreshold defines the number of times that the probe is allowed to fail. The default is 3. After the specified number of attempts, the pod is marked Unready.
    • spec.template.spec.readinessProbe.successThreshold defines the number of times that the probe must report success, after a failure, to be considered successful. The default is 1.
  2. 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

  1. 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.initialDelaySeconds defines 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.tcpSocket defines the TCP action to perform.
    • spec.template.spec.readinessProbe.tcpSocket.port defines the port of the VM that the probe queries.
    • spec.template.spec.readinessProbe.timeoutSeconds defines 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 than periodSeconds.
  2. 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

  1. 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.initialDelaySeconds defines the time, in seconds, after the VM starts before the liveness probe is initiated.
    • spec.tenmplate.spec.livenessProbe.periodSeconds defines the delay, in seconds, between performing probes. The default delay is 10 seconds. This value must be greater than timeoutSeconds.
    • spec.tenmplate.spec.livenessProbe.httpGet defines the HTTP GET request to perform to connect to the VM.
    • spec.tenmplate.spec.livenessProbe.httpGet.port defines 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.path defines 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 deleted and a new VM is created.
    • spec.tenmplate.spec.livenessProbe.timeoutSeconds defines 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 than periodSeconds.
  2. 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.

Note

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 x86 systems, the VM must use a kernel that works with the i6300esb watchdog device. If you use s390x architecture, the kernel must be enabled for diag288. Red Hat Enterprise Linux (RHEL) images support i6300esb and diag288.
  • You have installed the OpenShift CLI (oc).

Procedure

  1. Create a YAML file 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. For x86 specify i6300esb. For s390x specify diag288.
    • spec.template.spec.domain.devices.watchdog.name.<watchdog-device-model>.action defines the watchdog device action. Specify poweroff, reset, or shutdown. The shutdown action requires that the guest virtual machine is responsive to ACPI signals. Using shutdown is not recommended.

      The example above configures the watchdog device on a VM with the poweroff action and exposes the device as /dev/watchdog.

      This device can now be used by the watchdog binary.

  2. Apply the YAML file to your cluster by running the following command:

    $ oc apply -f <file_name>.yaml

Verification

  1. Run the following command to verify that the VM is connected to the watchdog device:

    Important

    Verification steps are provided for testing watchdog functionality only and must not be run on production machines.

    $ lspci | grep watchdog -i
  2. Run one of the following commands to confirm the watchdog is active:

    • Trigger a kernel panic:

      # echo c > /proc/sysrq-trigger
    • Stop 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

  1. Log in to the virtual machine as root user.
  2. This step is only required when installing on IBM Z® (s390x). Enable watchdog by running the following command:

    # modprobe diag288_wdt
  3. Verify that the /dev/watchdog file path is present in the VM by running the following command:

    # ls /dev/watchdog
  4. Install the watchdog package and its dependencies:

    # yum install watchdog
  5. Uncomment the following line in the /etc/watchdog.conf file and save the changes:

    #watchdog-device = /dev/watchdog
  6. Enable the watchdog service 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

  1. 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.guestAgentPing defines the guest agent ping probe to connect to the VM.
    • spec.template.spec.readinessProbe.initialDelaySeconds defines the time, in seconds, after the VM starts before the guest agent probe is initiated. This value is optional.
    • 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. This value is optional
    • spec.template.spec.readinessProbe.timeoutSeconds defines 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 than periodSeconds. This value is optional.
    • spec.template.spec.readinessProbe.failureThreshold defines the number of times that the probe is allowed to fail. The default is 3. After the specified number of attempts, the pod is marked Unready. This value is optional.
    • spec.template.spec.readinessProbe.successThreshold defines 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.
  2. 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
Important
  • This annotation only affects GuestAgentPing probes. HTTP, TCP, and exec probes are not affected.
  • The annotation takes effect within seconds on the next virt-launcher sync 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 GuestAgentPing probe, 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 GuestAgentPing liveness / readiness probe configured.
  • You have installed the OpenShift CLI (oc).

Procedure

  1. Pause probes by annotating the VMI:

    $ oc annotate vmi <vmi_name> kubevirt.io/pause-guest-agent-probes=true
  2. Verify that the annotation is set:

    $ oc get vmi <vmi_name> -o jsonpath='{.metadata.annotations.kubevirt\.io/pause-guest-agent-probes}'

    Example output

    true

  3. Optional: Verify that virt-launcher has picked up the annotation by checking its logs:

    $ oc logs -n <namespace> virt-launcher-<vmi_name>-<id> -c compute | grep "probe pause state"
  4. Perform your maintenance operations, such as guest OS updates.
  5. 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.

Important

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 PrometheusRule custom resources.
  • Metric collection endpoints, reconciled through ServiceMonitor custom 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.

Important

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-admin permissions.
  • You have installed the OpenShift CLI (oc).

Procedure

  • Enable the deployObservabilityController feature 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.

Note

Runbooks for the OpenShift Virtualization Operator are maintained in the openshift/runbooks Git repository, and you can view them on GitHub.

Table 13.1. Runbooks for OpenShift Virtualization alerts
AlertGitHub link

CDIDataImportCronOutdated

Runbook

CDIDataVolumeUnusualRestartCount

Runbook

CDIDefaultStorageClassDegraded

Runbook

CDIMultipleDefaultVirtStorageClasses

Runbook

CDINoDefaultStorageClass

Runbook

CDINotReady

Runbook

CDIOperatorDown

Runbook

CDIStorageProfilesIncomplete

Runbook

ClusterVMPanicDetected

Runbook

CnaoDown

Runbook

CnaoNMstateMigration

Runbook

DeprecatedMachineType

Runbook

GuestFilesystemAlmostOutOfSpace

Runbook

GuestVCPUQueueHighCritical

Runbook

GuestVCPUQueueHighWarning

Runbook

HAControlPlaneDown

Runbook

HCOGoldenImageWithNoArchitectureAnnotation

Runbook

HCOGoldenImageWithNoSupportedArchitecture

Runbook

HCOInstallationIncomplete

Runbook

HCOMisconfiguredDescheduler

Runbook

HCOMultiArchGoldenImagesDisabled

Runbook

HCOOperatorConditionsUnhealthy

Runbook

HighNodeCPUFrequency

Runbook

HPPNotReady

Runbook

HPPOperatorDown

Runbook

HPPSharingPoolPathWithOS

Runbook

HighCPUWorkload

Runbook

KubemacpoolDown

Runbook

KubeVirtCRModified

Runbook

KubeVirtDeprecatedAPIRequested

Runbook

KubeVirtVMGuestMemoryAvailableLow

Runbook

KubeVirtVMGuestMemoryPressure

Runbook

KubeVirtNoAvailableNodesToRunVMs

Runbook

KubeVirtVMIExcessiveMigrations

Runbook

LowKVMNodesCount

Runbook

LowReadyVirtControllersCount

Runbook

LowReadyVirtOperatorsCount

Runbook

LowVirtAPICount

Runbook

LowVirtControllersCount

Runbook

LowVirtOperatorCount

Runbook

NetworkAddonsConfigNotReady

Runbook

NoLeadingVirtOperator

Runbook

NoReadyVirtController

Runbook

NoReadyVirtOperator

Runbook

NodeNetworkInterfaceDown

Runbook

OrphanedVirtualMachineInstances

Runbook

OutdatedVirtualMachineInstanceWorkloads

Runbook

PersistentVolumeFillingUp

Runbook

SSPCommonTemplatesModificationReverted

Runbook

SSPDown

Runbook

SSPFailingToReconcile

Runbook

SSPHighRateRejectedVms

Runbook

SSPTemplateValidatorDown

Runbook

UnsupportedHCOModification

Runbook

VirtAPIDown

Runbook

VirtApiRESTErrorsBurst

Runbook

VirtControllerDown

Runbook

VirtControllerRESTErrorsBurst

Runbook

VirtHandlerDaemonSetRolloutFailing

Runbook

VirtHandlerRESTErrorsBurst

Runbook

VirtLauncherPodsStuckFailed

Runbook

VirtOperatorDown

Runbook

VirtOperatorRESTErrorsBurst

Runbook

VirtualMachineStuckInUnhealthyState

Runbook

VirtualMachineStuckOnNode

Runbook

VMCannotBeEvicted

Runbook

VMNonRecoverableOSPanic

Runbook

VMStorageClassWarning

Runbook

13.9.1. Runbooks for deprecated alerts

Deprecated alerts no longer report actual issues and you can safely ignore them.

Table 13.2. Runbooks for deprecated OpenShift Virtualization alerts
AlertGitHub linkNotes

DuplicateWaspAgentDSDetected

Runbook

-

KubeMacPoolDuplicateMacsFound

Runbook

-

VirtualMachineInstanceHasEphemeralHotplugVolume

Runbook

-

KubeVirtComponentExceedsRequestedCPU

Runbook

-

KubeVirtComponentExceedsRequestedMemory

Runbook

-

KubevirtVmHighMemoryUsage

Runbook

-

OperatorConditionsUnhealthy

Runbook

-

SingleStackIPv6Unsupported

Runbook

-

SSPOperatorDown

Runbook

-

VirtApiRESTErrorsHigh

Runbook

-

VirtControllerRESTErrorsHigh

Runbook

-

VirtHandlerRESTErrorsHigh

Runbook

-

VirtOperatorRESTErrorsHigh

Runbook

-

VirtualMachineCRCErrors

Runbook

Renamed to VMStorageClassWarning.

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

Red Hat ドキュメントについて

Legal Notice

Theme

© 2026 Red Hat
トップに戻る