×

事件

OpenShift Container Platform 事件 记录重要的生命周期信息,有助于监控和解决虚拟机、命名空间和资源问题。

  • 虚拟机事件:导航到 Web 控制台中**虚拟机详细信息**页面的**事件**选项卡。

    命名空间事件

    您可以通过运行以下命令查看命名空间事件

    $ oc get events -n <namespace>

    请参阅事件列表,了解有关特定事件的详细信息。

    资源事件

    您可以通过运行以下命令查看资源事件

    $ oc describe <resource> <resource_name>

Pod 日志

您可以使用 Web 控制台或 CLI 查看 OpenShift Virtualization Pod 的日志。您还可以使用 Web 控制台中的 LokiStack 查看聚合日志

配置 OpenShift Virtualization Pod 日志详细程度

您可以通过编辑HyperConverged自定义资源 (CR) 来配置 OpenShift Virtualization Pod 日志的详细程度。

步骤
  1. 要为特定组件设置日志详细程度,请通过运行以下命令在默认文本编辑器中打开HyperConverged CR:

    $ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
  2. 通过编辑spec.logVerbosityConfig节来设置一个或多个组件的日志级别。例如:

    apiVersion: hco.kubevirt.io/v1beta1
    kind: HyperConverged
    metadata:
      name: kubevirt-hyperconverged
    spec:
      logVerbosityConfig:
        kubevirt:
          virtAPI: 5 (1)
          virtController: 4
          virtHandler: 3
          virtLauncher: 2
          virtOperator: 6
    1 日志详细程度值必须是1-9范围内的整数,数字越大表示日志越详细。在此示例中,如果virtAPI组件日志的优先级级别为5或更高,则会显示这些日志。
  3. 保存并退出编辑器以应用更改。

使用 Web 控制台查看 virt-launcher Pod 日志

您可以使用 OpenShift Container Platform Web 控制台查看虚拟机的virt-launcher Pod 日志。

步骤
  1. 导航到**虚拟化**→**虚拟机**。

  2. 选择一个虚拟机以打开**虚拟机详细信息**页面。

  3. 在**常规**磁贴上,单击 Pod 名称以打开**Pod 详细信息**页面。

  4. 单击**日志**选项卡以查看日志。

使用 CLI 查看 OpenShift Virtualization Pod 日志

您可以使用oc CLI 工具查看 OpenShift Virtualization Pod 的日志。

步骤
  1. 通过运行以下命令查看 OpenShift Virtualization 命名空间中的 Pod 列表:

    $ oc get pods -n openshift-cnv
    示例输出
    NAME                               READY   STATUS    RESTARTS   AGE
    disks-images-provider-7gqbc        1/1     Running   0          32m
    disks-images-provider-vg4kx        1/1     Running   0          32m
    virt-api-57fcc4497b-7qfmc          1/1     Running   0          31m
    virt-api-57fcc4497b-tx9nc          1/1     Running   0          31m
    virt-controller-76c784655f-7fp6m   1/1     Running   0          30m
    virt-controller-76c784655f-f4pbd   1/1     Running   0          30m
    virt-handler-2m86x                 1/1     Running   0          30m
    virt-handler-9qs6z                 1/1     Running   0          30m
    virt-operator-7ccfdbf65f-q5snk     1/1     Running   0          32m
    virt-operator-7ccfdbf65f-vllz8     1/1     Running   0          32m
  2. 通过运行以下命令查看 Pod 日志:

    $ oc logs -n openshift-cnv <pod_name>

    如果 Pod 无法启动,您可以使用--previous选项查看上次尝试的日志。

    要实时监控日志输出,请使用-f选项。

    示例输出
    {"component":"virt-handler","level":"info","msg":"set verbosity to 2","pos":"virt-handler.go:453","timestamp":"2022-04-17T08:58:37.373695Z"}
    {"component":"virt-handler","level":"info","msg":"set verbosity to 2","pos":"virt-handler.go:453","timestamp":"2022-04-17T08:58:37.373726Z"}
    {"component":"virt-handler","level":"info","msg":"setting rate limiter to 5 QPS and 10 Burst","pos":"virt-handler.go:462","timestamp":"2022-04-17T08:58:37.373782Z"}
    {"component":"virt-handler","level":"info","msg":"CPU features of a minimum baseline CPU model: map[apic:true clflush:true cmov:true cx16:true cx8:true de:true fpu:true fxsr:true lahf_lm:true lm:true mca:true mce:true mmx:true msr:true mtrr:true nx:true pae:true pat:true pge:true pni:true pse:true pse36:true sep:true sse:true sse2:true sse4.1:true ssse3:true syscall:true tsc:true]","pos":"cpu_plugin.go:96","timestamp":"2022-04-17T08:58:37.390221Z"}
    {"component":"virt-handler","level":"warning","msg":"host model mode is expected to contain only one model","pos":"cpu_plugin.go:103","timestamp":"2022-04-17T08:58:37.390263Z"}
    {"component":"virt-handler","level":"info","msg":"node-labeller is running","pos":"node_labeller.go:94","timestamp":"2022-04-17T08:58:37.391011Z"}

客户机系统日志

查看虚拟机客户机的启动日志可以帮助诊断问题。您可以使用 OpenShift Container Platform Web 控制台或oc CLI 配置对客户机日志的访问并查看这些日志。

此功能默认情况下处于禁用状态。如果虚拟机未明确启用或禁用此设置,则它将继承集群范围的默认设置。

如果将凭据或其他个人身份信息 (PII) 等敏感信息写入串行控制台,则会与所有其他可见文本一起记录。Red Hat 建议使用 SSH 发送敏感数据,而不是串行控制台。

使用 Web 控制台启用对虚拟机客户机系统日志的默认访问

您可以使用 Web 控制台启用对虚拟机客户机系统日志的默认访问。

步骤
  1. 从侧边菜单中,单击**虚拟化**→**概述**。

  2. 单击**设置**选项卡。

  3. 单击**集群**→**客户机管理**。

  4. 将**启用客户机系统日志访问**设置为开启。

使用 CLI 启用对虚拟机客户机系统日志的默认访问

您可以通过编辑HyperConverged自定义资源 (CR) 来启用对虚拟机客户机系统日志的默认访问。

步骤
  1. 通过运行以下命令在默认编辑器中打开HyperConverged CR:

    $ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
  2. 更新disableSerialConsoleLog值。例如:

    kind: HyperConverged
    metadata:
      name: kubevirt-hyperconverged
    spec:
      virtualMachineOptions:
        disableSerialConsoleLog: true (1)
    #...
    1 如果要默认启用虚拟机的串行控制台访问,请将disableSerialConsoleLog的值设置为false

使用 Web 控制台为单个虚拟机设置客户机系统日志访问

您可以使用 Web 控制台为单个虚拟机配置对虚拟机客户机系统日志的访问。此设置优先于集群范围的默认配置。

步骤
  1. 在侧边菜单中点击**虚拟化** → **虚拟机**。

  2. 选择一个虚拟机以打开**虚拟机详细信息**页面。

  3. 点击**配置**选项卡。

  4. 将**访客系统日志访问**设置为开启或关闭。

使用命令行界面为单个虚拟机设置访客系统日志访问

您可以通过编辑VirtualMachine CR 来配置对单个虚拟机访客系统日志的访问。此设置优先于集群范围的默认配置。

步骤
  1. 运行以下命令来编辑虚拟机清单:

    $ oc edit vm <vm_name>
  2. 更新logSerialConsole字段的值。例如:

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      name: example-vm
    spec:
      template:
        spec:
          domain:
            devices:
              logSerialConsole: true (1)
    #...
    1 要启用对访客串口控制台日志的访问,请将logSerialConsole值设置为true
  3. 运行以下命令将新配置应用于虚拟机:

    $ oc apply vm <vm_name>
  4. 可选:如果您编辑的是正在运行的虚拟机,请重新启动虚拟机以应用新配置。例如:

    $ virtctl restart <vm_name> -n <namespace>

使用 Web 控制台查看访客系统日志

您可以使用 Web 控制台查看虚拟机 (VM) 访客的串口控制台日志。

先决条件
  • 已启用访客系统日志访问。

步骤
  1. 在侧边菜单中点击**虚拟化** → **虚拟机**。

  2. 选择一个虚拟机以打开**虚拟机详细信息**页面。

  3. 点击**诊断**选项卡。

  4. 点击**访客系统日志**以加载串口控制台。

使用命令行界面查看访客系统日志

您可以运行oc logs命令查看虚拟机访客的串口控制台日志。

先决条件
  • 已启用访客系统日志访问。

步骤
  • 运行以下命令查看日志,将<namespace><vm_name>替换为您自己的值:

    $ oc logs -n <namespace> -l kubevirt.io/domain=<vm_name> --tail=-1 -c guest-console-log

日志聚合

您可以通过聚合和过滤日志来简化故障排除。

使用 LokiStack 查看 OpenShift Virtualization 的聚合日志

您可以使用 Web 控制台中的 LokiStack 查看 OpenShift Virtualization Pod 和容器的聚合日志。

先决条件
  • 您已部署 LokiStack。

步骤
  1. 在 Web 控制台中导航到**监控** → **日志**。

  2. 从日志类型列表中选择**应用程序**(对于virt-launcher Pod 日志)或**基础设施**(对于 OpenShift Virtualization 控制平面 Pod 和容器)。

  3. 点击**显示查询**以显示查询字段。

  4. 在查询字段中输入 LogQL 查询,然后点击**运行查询**以显示过滤后的日志。

OpenShift Virtualization LogQL 查询

您可以通过在 Web 控制台的**监控** → **日志**页面上运行 Loki 查询语言 (LogQL) 查询来查看和过滤 OpenShift Virtualization 组件的聚合日志。

默认日志类型为基础设施virt-launcher 日志类型为应用程序

可选:您可以使用行过滤器表达式包含或排除字符串或正则表达式。

如果查询匹配大量日志,则查询可能会超时。

表 1. OpenShift Virtualization LogQL 示例查询
组件 LogQL 查询

全部

{log_type=~".+"}|json
|kubernetes_labels_app_kubernetes_io_part_of="hyperconverged-cluster"

cdi-apiserver

cdi-deployment

cdi-operator

{log_type=~".+"}|json
|kubernetes_labels_app_kubernetes_io_part_of="hyperconverged-cluster"
|kubernetes_labels_app_kubernetes_io_component="storage"

hco-operator

{log_type=~".+"}|json
|kubernetes_labels_app_kubernetes_io_part_of="hyperconverged-cluster"
|kubernetes_labels_app_kubernetes_io_component="deployment"

kubemacpool

{log_type=~".+"}|json
|kubernetes_labels_app_kubernetes_io_part_of="hyperconverged-cluster"
|kubernetes_labels_app_kubernetes_io_component="network"

virt-api

virt-controller

virt-handler

virt-operator

{log_type=~".+"}|json
|kubernetes_labels_app_kubernetes_io_part_of="hyperconverged-cluster"
|kubernetes_labels_app_kubernetes_io_component="compute"

ssp-operator

{log_type=~".+"}|json
|kubernetes_labels_app_kubernetes_io_part_of="hyperconverged-cluster"
|kubernetes_labels_app_kubernetes_io_component="schedule"

容器

{log_type=~".+",kubernetes_container_name=~"<container>|<container>"} (1)
|json|kubernetes_labels_app_kubernetes_io_part_of="hyperconverged-cluster"
1 指定一个或多个用管道符 (|) 分隔的容器。

virt-launcher

运行此查询之前,必须从日志类型列表中选择**应用程序**。

{log_type=~".+", kubernetes_container_name="compute"}|json
|!= "custom-ga-command" (1)
1 |!= "custom-ga-command" 排除包含字符串custom-ga-command的 libvirt 日志。(BZ#2177684

您可以使用行过滤器表达式过滤日志行以包含或排除字符串或正则表达式。

表 2. 行过滤器表达式
行过滤器表达式 描述

|= "<string>"

日志行包含字符串

!= "<string>"

日志行不包含字符串

|~ "<regex>"

日志行包含正则表达式

!~ "<regex>"

日志行不包含正则表达式

示例行过滤器表达式
{log_type=~".+"}|json
|kubernetes_labels_app_kubernetes_io_part_of="hyperconverged-cluster"
|= "error" != "timeout"
LokiStack 和 LogQL 的其他资源

常见错误消息

以下错误消息可能会出现在 OpenShift Virtualization 日志中:

ErrImagePullImagePullBackOff

指示部署配置错误或引用的镜像存在问题。

数据卷故障排除

您可以检查DataVolume对象的ConditionsEvents部分来分析和解决问题。

关于数据卷条件和事件

您可以通过检查命令生成的ConditionsEvents部分的输出诊断数据卷问题:

$ oc describe dv <DataVolume>

Conditions部分显示以下类型

  • 绑定

  • 运行中

  • 就绪

Events部分提供以下其他信息:

  • 事件的类型

  • 记录的原因

  • 事件的来源

  • 包含其他诊断信息的消息

oc describe 的输出并不总是包含Events

StatusReasonMessage发生更改时,会生成一个事件。条件和事件都会对数据卷状态的更改做出反应。

例如,如果您在导入操作期间拼写错误 URL,则导入会生成 404 消息。该消息更改会生成一个带有原因的事件。Conditions部分中的输出也会更新。

分析数据卷条件和事件

通过检查describe命令生成的ConditionsEvents部分,您可以确定数据卷相对于持久卷声明 (PVC) 的状态,以及操作是否正在运行或已完成。您还可能会收到提供有关数据卷状态及其如何处于当前状态的具体详细信息的消息。

条件有很多不同的组合。每个都必须在其独特的上下文中进行评估。

以下是各种组合的示例。

  • Bound - 此示例中显示了一个成功绑定的 PVC。

    请注意,TypeBound,因此StatusTrue。如果 PVC 未绑定,则StatusFalse

    当 PVC 绑定时,会生成一个事件,说明 PVC 已绑定。在这种情况下,ReasonBoundStatusTrueMessage 指示哪个 PVC 拥有该数据卷。

    Events 部分中的Message提供了更多详细信息,包括 PVC 已绑定多长时间 (Age) 以及由哪个资源 (From) 绑定,在本例中为datavolume-controller

    示例输出
    Status:
      Conditions:
        Last Heart Beat Time:  2020-07-15T03:58:24Z
        Last Transition Time:  2020-07-15T03:58:24Z
        Message:               PVC win10-rootdisk Bound
        Reason:                Bound
        Status:                True
        Type:                  Bound
    ...
      Events:
        Type     Reason     Age    From                   Message
        ----     ------     ----   ----                   -------
        Normal   Bound      24s    datavolume-controller  PVC example-dv Bound
  • Running - 在这种情况下,请注意TypeRunningStatusFalse,这表明发生了导致尝试的操作失败的事件,将 Status 从True更改为False

    但是,请注意ReasonCompleted,并且Message字段指示Import Complete

    事件部分,原因消息包含有关失败操作的更多故障排除信息。在这个例子中,消息显示由于404错误而无法连接,该错误列在事件部分的第一个警告中。

    根据这些信息,您可以得出结论:正在运行导入操作,这会与尝试访问数据卷的其他操作产生冲突。

    示例输出
    Status:
      Conditions:
        Last Heart Beat Time:  2020-07-15T04:31:39Z
        Last Transition Time:  2020-07-15T04:31:39Z
        Message:               Import Complete
        Reason:                Completed
        Status:                False
        Type:                  Running
    ...
      Events:
        Type     Reason       Age                From                   Message
        ----     ------       ----               ----                   -------
        Warning  Error        12s (x2 over 14s)  datavolume-controller  Unable to connect
        to http data source: expected status code 200, got 404. Status: 404 Not Found
  • 就绪 – 如果类型就绪状态True,则数据卷已准备好使用,如下例所示。如果数据卷未准备好使用,则状态False

    示例输出
    Status:
      Conditions:
        Last Heart Beat Time: 2020-07-15T04:31:39Z
        Last Transition Time:  2020-07-15T04:31:39Z
        Status:                True
        Type:                  Ready