13.9. Prometheus 对虚拟资源的查询
OpenShift Virtualization 提供用于监控集群中如何使用基础架构资源的指标。指标涵盖了以下资源:
- vCPU
- Network
- 存储
- 虚拟机内存交换
使用 OpenShift Container Platform 监控仪表板查询虚拟化指标。
13.9.1. 先决条件
-
要使用 vCPU 指标,必须将
schedstats=enable
内核参数应用到MachineConfig
对象。此内核参数启用用于调试和性能调优的调度程序统计,并为调度程序添加较小的额外负载。如需有关应用内核参数的更多信息,请参阅 OpenShift Container Platform 机器配置任务文档。 - 要进行客户机内存交换查询以返回数据,必须在虚拟客户机上启用内存交换。
13.9.2. 查询指标
OpenShift Container Platform 监控仪表板可供您运行 Prometheus Query Language (PromQL) 查询来查看图表中呈现的指标。此功能提供有关集群以及要监控的任何用户定义工作负载的状态信息。
作为集群管理员,您可以查询所有 OpenShift Container Platform 核心项目和用户定义的项目的指标。
作为开发者,您必须在查询指标时指定项目名称。您必须具有所需权限才能查看所选项目的指标。
13.9.2.1. 以集群管理员身份查询所有项目的指标
作为集群管理员,或具有所有项目的查看权限的用户,您可以在 Metrics UI 中访问所有 OpenShift Container Platform 默认项目和用户定义的项目的指标。
只有集群管理员可以访问 OpenShift Container Platform Monitoring 提供的第三方 UI。
先决条件
-
您可以使用具有
cluster-admin
角色或所有项目的查看权限的用户访问集群。 -
已安装 OpenShift CLI(
oc
)。
流程
-
在 OpenShift Container Platform Web 控制台内的 Administrator 视角中,选择 Observe
Metrics。 - 选择 Insert Metric at Cursor 来查看预定义的查询列表。
- 要创建自定义查询,请将 Prometheus Query Language (PromQL) 查询添加到 Expression 字段。
- 要添加多个查询,选择 Add Query。
- 要删除查询,选择查询旁边的 ,然后选择 Delete query。
- 要禁止运行查询,请选择查询旁边的 并选择 Disable query。
选择 Run Queries 来运行您已创建的查询。图表中会直观呈现查询的指标。如果查询无效,则 UI 会显示错误消息。
注意如果查询对大量数据进行运算,这可能会在绘制时序图时造成浏览器超时或过载。要避免这种情况,请选择 Hide graph 并且仅使用指标表来校准查询。然后,在找到可行的查询后,启用图表来绘制图形。
- 可选:页面 URL 现在包含您运行的查询。要在以后再次使用这一组查询,请保存这个 URL。
其他资源
- 有关创建 PromQL 查询的更多详情,请参阅 Prometheus query 文档。
13.9.2.2. 以开发者身份查询用户定义的项目的指标
您可以以开发者或具有项目查看权限的用户身份访问用户定义项目的指标。
在 Developer 视角中, Metrics UI 包括所选项目的一些预定义 CPU、内存、带宽和网络数据包查询。您还可以对项目的 CPU、内存、带宽、网络数据包和应用程序指标运行自定义 Prometheus Query Language (PromQL) 查询。
开发者只能使用 Developer 视角,而不能使用 Administrator 视角。作为开发者,您一次只能查询一个项目的指标。开发人员无法访问 OpenShift Container Platform 监控提供的用于核心平台组件的第三方 UI。取而代之,为您的用户定义的项目使用 Metrics UI。
先决条件
- 对于您要查看指标的项目,您可以作为开发者或具有查看权限的用户访问集群。
- 您已为用户定义的项目启用了监控。
- 您已在用户定义的项目中部署了服务。
-
您已为该服务创建了
ServiceMonitor
自定义资源定义(CRD),以定义如何监控该服务。
流程
-
在 OpenShift Container Platform web 控制台中的 Developer 视角中,选择 Observe
Metrics。 - 在 Project: 列表中选择您要查看指标的项目。
从 Select Query 列表中选择查询,或者通过选择 Show PromQL 运行自定义 PromQL 查询。
注意在 Developer 视角中,您一次只能运行一个查询。
其他资源
- 有关创建 PromQL 查询的更多详情,请参阅 Prometheus query 文档。
13.9.3. 虚拟化指标
以下指标描述包括示例 Prometheus Query Language(PromQL)查询。这些指标不是 API,可能在不同版本之间有所变化。
以下示例使用 topk
查询来指定时间段。如果在那个时间段内删除虚拟机,它们仍然会显示在查询输出中。
13.9.3.1. vCPU 指标
以下查询可以识别等待输入/输出 (I/O) 的虚拟机:
kubevirt_vmi_vcpu_wait_seconds
- 返回虚拟机的 vCPU 等待时间(以秒为单位)。
高于"0" 的值表示 vCPU 要运行,但主机调度程序还无法运行它。无法运行代表 I/O 存在问题。
要查询 vCPU 指标,必须首先将 schedstats=enable
内核参数应用到 MachineConfig
对象。此内核参数启用用于调试和性能调优的调度程序统计,并为调度程序添加较小的额外负载。
vCPU 等待时间查询示例
topk(3, sum by (name, namespace) (rate(kubevirt_vmi_vcpu_wait_seconds[6m]))) > 0 1
- 1
- 此查询会返回在六分钟内每次都等待 I/O 的 3 台虚拟机。
13.9.3.2. 网络指标
以下查询可以识别正在饱和网络的虚拟机:
kubevirt_vmi_network_receive_bytes_total
- 返回虚拟机网络中接收的流量总数(以字节为单位)。
kubevirt_vmi_network_transmit_bytes_total
- 返回虚拟机网络上传输的流量总数(以字节为单位)。
网络流量查询示例
topk(3, sum by (name, namespace) (rate(kubevirt_vmi_network_receive_bytes_total[6m])) + sum by (name, namespace) (rate(kubevirt_vmi_network_transmit_bytes_total[6m]))) > 0 1
- 1
- 此查询会返回每给定时间在六分钟内传输最多流量的 3 台虚拟机。
13.9.3.3. 存储指标
13.9.3.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 1
- 1
- 此查询会返回在 6 分钟内每给定时间执行最多存储流量的 3 台虚拟机。
13.9.3.3.2. I/O 性能
以下查询可决定存储设备的 I/O 性能:
kubevirt_vmi_storage_iops_read_total
- 返回虚拟机每秒执行的写入 I/O 操作量。
kubevirt_vmi_storage_iops_write_total
- 返回虚拟机每秒执行的读取 I/O 操作量。
I/O 性能查询示例
topk(3, sum by (name, namespace) (rate(kubevirt_vmi_storage_iops_read_total[6m])) + sum by (name, namespace) (rate(kubevirt_vmi_storage_iops_write_total[6m]))) > 0 1
- 1
- 此查询返回在六分钟内每给定时间每秒执行最多 I/O 操作数的 3 台虚拟机。
13.9.3.4. 客户机内存交换指标
以下查询可识别启用了交换最多的客户端执行内存交换最多:
kubevirt_vmi_memory_swap_in_traffic_bytes_total
- 返回虚拟客户机交换的内存总量(以字节为单位)。
kubevirt_vmi_memory_swap_out_traffic_bytes_total
- 返回虚拟 guest 正在交换的内存总量(以字节为单位)。
内存交换查询示例
topk(3, sum by (name, namespace) (rate(kubevirt_vmi_memory_swap_in_traffic_bytes_total[6m])) + sum by (name, namespace) (rate(kubevirt_vmi_memory_swap_out_traffic_bytes_total[6m]))) > 0 1
- 1
- 此查询返回前 3 台虚拟机,其中客户机在六分钟内执行每个给定时间段内每个给定时间最多的内存交换。
内存交换表示虚拟机面临内存压力。增加虚拟机的内存分配可以缓解此问题。