×

事件

Red Hat OpenShift Service on AWS事件记录重要的生命周期信息,有助于监控和排查虚拟机、命名空间和资源问题。

  • 虚拟机事件:在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日志

您可以使用Red Hat OpenShift Service on AWS 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"}

客户机系统日志

查看VM客户机的启动日志可以帮助诊断问题。您可以使用Red Hat OpenShift Service on AWS Web控制台或oc CLI配置对客户机日志的访问并查看它们。

此功能默认情况下处于禁用状态。如果VM没有显式启用或禁用此设置,它将继承集群范围的默认设置。

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

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

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

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

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

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

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

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

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

步骤
  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 如果要默认在VM上启用串行控制台访问,请将disableSerialConsoleLog的值设置为false

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

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

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

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

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

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

使用CLI设置单个虚拟机的访客系统日志访问权限

您可以通过编辑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. 单击**访客系统日志**以加载串口控制台。

使用CLI查看访客系统日志

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

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

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

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

日志聚合

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

使用LokiStack查看OpenShift虚拟化聚合日志

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

先决条件
  • 您已部署LokiStack。

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

  2. 从日志类型列表中选择**application**(用于virt-launcher Pod日志)或**infrastructure**(用于OpenShift虚拟化控制平面Pod和容器)。

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

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

OpenShift虚拟化LogQL查询

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

默认日志类型为infrastructurevirt-launcher日志类型为application

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

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

表1. OpenShift虚拟化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

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

{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虚拟化日志中:

ErrImagePullImagePullBackOff

表示部署配置不正确或引用的镜像存在问题。

数据卷故障排除

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

关于数据卷条件和事件

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

$ oc describe dv <DataVolume>

Conditions部分显示以下Types

  • Bound

  • Running

  • Ready

Events部分提供以下附加信息:

  • 事件的Type

  • 记录的Reason

  • 事件的Source

  • 包含附加诊断信息的Message

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

    Events 部分中,ReasonMessage 包含有关失败操作的更多故障排除信息。在此示例中,Message 显示由于 Events 部分的第一个 Warning 中列出的 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
  • Ready – 如果 TypeReady 并且 StatusTrue,则数据卷已准备好使用,如下例所示。如果数据卷未准备好使用,则 StatusFalse

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