13.2. Prometheus 对虚拟资源的查询
使用 Red Hat OpenShift Service on AWS 监控仪表板查询虚拟化指标。OpenShift Virtualization 提供用于监控集群基础架构资源消耗的指标,包括网络、存储和客户机内存交换。您还可以使用指标查询实时迁移状态。
13.2.1. 先决条件 复制链接链接已复制到粘贴板!
- 要进行客户机内存交换查询以返回数据,必须在虚拟客户机上启用内存交换。
您可以使用 Red Hat OpenShift Service on AWS 指标查询浏览器来运行 Prometheus Query Language (PromQL)查询来查看图表中呈现的指标。此功能提供有关集群以及要监控的任何用户定义工作负载的状态信息。
作为集群管理员或具有所有项目查看权限的用户,您可以在 Metrics UI 中访问所有默认 Red Hat OpenShift Service on AWS 和用户定义的项目的指标。
Metrics UI 包括所有项目的预定义查询,如 CPU、内存、带宽或网络数据包。您还可以运行自定义 Prometheus Query Language (PromQL) 查询。
先决条件
-
您可以使用具有
cluster-admin
集群角色的用户访问集群,或者具有所有项目的查看权限。 -
已安装 OpenShift CLI(
oc
)。
流程
-
在 Red Hat OpenShift Service on AWS web 控制台中,点 Observe
Metrics。 要添加一个或多个查询,请执行以下操作:
Expand 选项 描述 选择现有的查询。
在 Select query 下拉列表中选择一个现有的查询。
创建自定义查询。
将 Prometheus Query Language (PromQL) 查询添加到 Expression 字段中。
当您输入 PromQL 表达式时,自动完成建议会出现在下拉列表中。这些建议包括功能、指标、标签和时间令牌。使用键盘箭头选择其中一项建议的项目,然后按 Enter 将项目添加到您的表达式中。将鼠标指针移到建议的项目上,以查看该项目的简短描述。
添加多个查询。
点 Add query。
复制现有的查询。
选择查询旁边的 Options 菜单
,然后选择 Duplicate 查询。
禁用查询正在运行。
选择查询旁边的 Options 菜单
并选择 Disable query。
要运行您创建的查询,请点 Run queries。图表中会直观呈现查询的指标。如果查询无效,则 UI 会显示错误消息。
注意- 在绘制时间序列图时,对大量数据的查询可能会超时或过载浏览器。要避免这种情况,请单击 Hide graph 并仅使用指标表来校准查询。然后,在找到可行的查询后,启用图表来绘制图形。
- 默认情况下,查询表会显示一个展开的视图,列出每个指标及其当前值。单击 5-4 down 箭头,以最大程度降低查询的展开视图。
- 可选:保存页面 URL,以便在将来再次使用此查询。
探索视觉化指标。最初,图表中显示所有启用的查询中的所有指标。通过执行以下操作来选择显示哪些指标:
Expand 选项 描述 隐藏查询中的所有指标。
点查询的 Options 菜单
并点 Hide all series。
隐藏特定指标。
前往查询表,再点指标名称旁边的带颜色的方格。
放大图表并更改时间范围。
执行以下操作之一:
- 点击图表并在水平方向上拖动,以可视化方式选择时间范围。
- 使用菜单选择时间范围。
重置时间范围。
点 Reset zoom。
在特定时间点显示所有查询的输出。
将鼠标悬停在您感兴趣的点上。查询输出会出现在弹出窗口中。
隐藏图表。
点 Hide graph。
您可以使用 Red Hat OpenShift Service on AWS 指标查询浏览器来运行 Prometheus Query Language (PromQL)查询来查看图表中呈现的指标。此功能提供有关您要监控的任何用户定义的工作负载的信息。
作为开发者,您必须在查询指标时指定项目名称。您必须具有所需权限才能查看所选项目的指标。
Metrics UI 包括预定义查询,如 CPU、内存、带宽或网络数据包。这些查询仅限于所选项目。您还可以对所有对象运行自定义 Prometheus Query Language (PromQL) 查询。
先决条件
- 对于您要查看指标的项目,您可以作为开发者或具有查看权限的用户访问集群。
- 您已为用户定义的项目启用了监控。
- 您已在用户定义的项目中部署了服务。
-
您已为该服务创建了
ServiceMonitor
自定义资源定义(CRD),以定义如何监控该服务。
流程
-
在 Red Hat OpenShift Service on AWS web 控制台中,点 Observe
Metrics。 要添加一个或多个查询,请执行以下操作:
Expand 选项 描述 选择现有的查询。
在 Select query 下拉列表中选择一个现有的查询。
创建自定义查询。
将 Prometheus Query Language (PromQL) 查询添加到 Expression 字段中。
当您输入 PromQL 表达式时,自动完成建议会出现在下拉列表中。这些建议包括功能、指标、标签和时间令牌。使用键盘箭头选择其中一项建议的项目,然后按 Enter 将项目添加到您的表达式中。将鼠标指针移到建议的项目上,以查看该项目的简短描述。
添加多个查询。
点 Add query。
复制现有的查询。
选择查询旁边的 Options 菜单
,然后选择 Duplicate 查询。
禁用查询正在运行。
选择查询旁边的 Options 菜单
并选择 Disable query。
要运行您创建的查询,请点 Run queries。图表中会直观呈现查询的指标。如果查询无效,则 UI 会显示错误消息。
注意- 如果查询对大量数据进行运算,这可能会在绘制时序图时造成浏览器超时或过载。要避免这种情况,请点 Hide graph,并只使用 metrics 表来校准查询。然后,在找到可行的查询后,启用图表来绘制图形。
- 默认情况下,查询表会显示一个展开的视图,列出每个指标及其当前值。点 ˅ 下箭头来最小化查询的展开视图。
- 可选:保存页面 URL,以便在将来再次使用此查询。
探索视觉化指标。最初,图表中显示所有启用的查询中的所有指标。通过执行以下操作来选择显示哪些指标:
Expand 选项 描述 隐藏查询中的所有指标。
点查询的 Options 菜单
并点 Hide all series。
隐藏特定指标。
前往查询表,再点指标名称旁边的带颜色的方格。
放大图表并更改时间范围。
执行以下操作之一:
- 点击图表并在水平方向上拖动,以可视化方式选择时间范围。
- 使用菜单选择时间范围。
重置时间范围。
点 Reset zoom。
在特定时间点显示所有查询的输出。
将鼠标悬停在您感兴趣的点上。查询输出会出现在弹出窗口中。
隐藏图表。
点 Hide graph。
13.2.4. 虚拟化指标 复制链接链接已复制到粘贴板!
以下指标描述包括示例 Prometheus Query Language(PromQL)查询。这些指标不是 API,可能在不同版本之间有所变化。有关虚拟化指标的完整列表,请参阅 KubeVirt 组件指标。
以下示例使用 topk
查询来指定时间段。如果在那个时间段内删除虚拟机,它们仍然会显示在查询输出中。
13.2.4.1. vCPU 指标 复制链接链接已复制到粘贴板!
以下查询可以识别等待输入/输出 (I/O) 的虚拟机:
kubevirt_vmi_vcpu_wait_seconds_total
- 返回虚拟机的 vCPU 的 I/O 上的等待时间(以秒为单位)。类型:计数器。
高于"0" 的值表示 vCPU 要运行,但主机调度程序还无法运行它。无法运行代表 I/O 存在问题。
要查询 vCPU 指标,必须首先将 schedstats=enable
内核参数应用到 MachineConfig
对象。此内核参数启用用于调试和性能调优的调度程序统计,并为调度程序添加较小的额外负载。
vCPU 等待时间查询示例
topk(3, sum by (name, namespace) (rate(kubevirt_vmi_vcpu_wait_seconds_total[6m]))) > 0
topk(3, sum by (name, namespace) (rate(kubevirt_vmi_vcpu_wait_seconds_total[6m]))) > 0
- 1
- 此查询会返回在六分钟内每次都等待 I/O 的 3 台虚拟机。
13.2.4.2. 网络指标 复制链接链接已复制到粘贴板!
以下查询可以识别正在饱和网络的虚拟机:
kubevirt_vmi_network_receive_bytes_total
- 返回虚拟机网络中接收的流量总数(以字节为单位)。类型:计数器。
kubevirt_vmi_network_transmit_bytes_total
- 返回虚拟机网络上传输的流量总数(以字节为单位)。类型:计数器。
网络流量查询示例
topk(3, sum by (name, namespace) (rate(kubevirt_vmi_network_receive_bytes_total[6m])) + sum by (name, namespace) (rate(kubevirt_vmi_network_transmit_bytes_total[6m]))) > 0
topk(3, sum by (name, namespace) (rate(kubevirt_vmi_network_receive_bytes_total[6m])) + sum by (name, namespace) (rate(kubevirt_vmi_network_transmit_bytes_total[6m]))) > 0
- 1
- 此查询会返回每给定时间在六分钟内传输最多流量的 3 台虚拟机。
13.2.4.3. 存储指标 复制链接链接已复制到粘贴板!
13.2.4.3.1. 与存储相关的流量 复制链接链接已复制到粘贴板!
以下查询可以识别正在写入大量数据的虚拟机:
kubevirt_vmi_storage_read_traffic_bytes_total
- 返回虚拟机与存储相关的流量的总量(以字节为单位)。类型:计数器。
kubevirt_vmi_storage_write_traffic_bytes_total
- 返回虚拟机与存储相关的流量的存储写入总量(以字节为单位)。类型:计数器。
与存储相关的流量查询示例
topk(3, sum by (name, namespace) (rate(kubevirt_vmi_storage_read_traffic_bytes_total[6m])) + sum by (name, namespace) (rate(kubevirt_vmi_storage_write_traffic_bytes_total[6m]))) > 0
topk(3, sum by (name, namespace) (rate(kubevirt_vmi_storage_read_traffic_bytes_total[6m])) + sum by (name, namespace) (rate(kubevirt_vmi_storage_write_traffic_bytes_total[6m]))) > 0
- 1
- 此查询会返回在六分钟内每给定时间执行最多存储流量的 3 台虚拟机。
13.2.4.3.2. 存储快照数据 复制链接链接已复制到粘贴板!
kubevirt_vmsnapshot_disks_restored_from_source
- 返回从源虚拟机中恢复的虚拟机磁盘总数。类型:Gauge。
kubevirt_vmsnapshot_disks_restored_from_source_bytes
- 返回从源虚拟机恢复的字节空间量。类型:Gauge。
存储快照数据查询示例
kubevirt_vmsnapshot_disks_restored_from_source{vm_name="simple-vm", vm_namespace="default"}
kubevirt_vmsnapshot_disks_restored_from_source{vm_name="simple-vm", vm_namespace="default"}
- 1
- 此查询返回从源虚拟机恢复的虚拟机磁盘总数。
kubevirt_vmsnapshot_disks_restored_from_source_bytes{vm_name="simple-vm", vm_namespace="default"}
kubevirt_vmsnapshot_disks_restored_from_source_bytes{vm_name="simple-vm", vm_namespace="default"}
- 1
- 此查询返回源虚拟机恢复的空间大小,以字节为单位。
13.2.4.3.3. I/O 性能 复制链接链接已复制到粘贴板!
以下查询可决定存储设备的 I/O 性能:
kubevirt_vmi_storage_iops_read_total
- 返回虚拟机每秒执行的写入 I/O 操作量。类型:计数器。
kubevirt_vmi_storage_iops_write_total
- 返回虚拟机每秒执行的读取 I/O 操作量。类型:计数器。
I/O 性能查询示例
topk(3, sum by (name, namespace) (rate(kubevirt_vmi_storage_iops_read_total[6m])) + sum by (name, namespace) (rate(kubevirt_vmi_storage_iops_write_total[6m]))) > 0
topk(3, sum by (name, namespace) (rate(kubevirt_vmi_storage_iops_read_total[6m])) + sum by (name, namespace) (rate(kubevirt_vmi_storage_iops_write_total[6m]))) > 0
- 1
- 此查询返回在六分钟内每给定时间每秒执行最多 I/O 操作数的 3 台虚拟机。
13.2.4.4. 客户机内存交换指标 复制链接链接已复制到粘贴板!
以下查询可识别启用了交换最多的客户端执行内存交换最多:
kubevirt_vmi_memory_swap_in_traffic_bytes
- 返回虚拟客户机交换的内存总量(以字节为单位)。类型:Gauge。
kubevirt_vmi_memory_swap_out_traffic_bytes
- 返回虚拟 guest 正在交换的内存总量(以字节为单位)。类型:Gauge。
内存交换查询示例
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
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
- 1
- 此查询返回前 3 台虚拟机,其中客户机在六分钟内执行每个给定时间段内每个给定时间最多的内存交换。
内存交换表示虚拟机面临内存压力。增加虚拟机的内存分配可以缓解此问题。
13.2.4.5. 实时迁移指标 复制链接链接已复制到粘贴板!
可以查询以下指标来显示实时迁移状态:
kubevirt_vmi_migration_data_processed_bytes
- 迁移到新虚拟机(VM)的客户机操作系统数据量。类型:Gauge。
kubevirt_vmi_migration_data_remaining_bytes
- 要迁移的客户机操作系统数据量。类型:Gauge。
kubevirt_vmi_migration_memory_transfer_rate_bytes
- 在客户端操作系统中达到脏的速率。脏内存是已更改但还没有写入磁盘的数据。类型:Gauge。
kubevirt_vmi_migrations_in_pending_phase
- 待处理的迁移数量。类型:Gauge。
kubevirt_vmi_migrations_in_scheduling_phase
- 调度迁移的数量。类型:Gauge。
kubevirt_vmi_migrations_in_running_phase
- 正在运行的迁移数量。类型:Gauge。
kubevirt_vmi_migration_succeeded
- 成功完成迁移的数量。类型:Gauge。
kubevirt_vmi_migration_failed
- 失败的迁移数量。类型:Gauge。