$ oc get events -n <namespace>
OpenShift Container Platform 事件 记录重要的生命周期信息,有助于监控和解决虚拟机、命名空间和资源问题。
虚拟机事件:导航到 Web 控制台中**虚拟机详细信息**页面的**事件**选项卡。
您可以通过运行以下命令查看命名空间事件
$ oc get events -n <namespace>
请参阅事件列表,了解有关特定事件的详细信息。
您可以通过运行以下命令查看资源事件
$ oc describe <resource> <resource_name>
您可以使用 Web 控制台或 CLI 查看 OpenShift Virtualization Pod 的日志。您还可以使用 Web 控制台中的 LokiStack 查看聚合日志。
您可以通过编辑HyperConverged
自定义资源 (CR) 来配置 OpenShift Virtualization Pod 日志的详细程度。
要为特定组件设置日志详细程度,请通过运行以下命令在默认文本编辑器中打开HyperConverged
CR:
$ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
通过编辑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 或更高,则会显示这些日志。 |
保存并退出编辑器以应用更改。
您可以使用 OpenShift Container Platform Web 控制台查看虚拟机的virt-launcher
Pod 日志。
导航到**虚拟化**→**虚拟机**。
选择一个虚拟机以打开**虚拟机详细信息**页面。
在**常规**磁贴上,单击 Pod 名称以打开**Pod 详细信息**页面。
单击**日志**选项卡以查看日志。
您可以使用oc
CLI 工具查看 OpenShift Virtualization Pod 的日志。
通过运行以下命令查看 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
通过运行以下命令查看 Pod 日志:
$ oc logs -n openshift-cnv <pod_name>
如果 Pod 无法启动,您可以使用 要实时监控日志输出,请使用 |
{"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 控制台启用对虚拟机客户机系统日志的默认访问。
从侧边菜单中,单击**虚拟化**→**概述**。
单击**设置**选项卡。
单击**集群**→**客户机管理**。
将**启用客户机系统日志访问**设置为开启。
您可以通过编辑HyperConverged
自定义资源 (CR) 来启用对虚拟机客户机系统日志的默认访问。
通过运行以下命令在默认编辑器中打开HyperConverged
CR:
$ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
更新disableSerialConsoleLog
值。例如:
kind: HyperConverged
metadata:
name: kubevirt-hyperconverged
spec:
virtualMachineOptions:
disableSerialConsoleLog: true (1)
#...
1 | 如果要默认启用虚拟机的串行控制台访问,请将disableSerialConsoleLog 的值设置为false 。 |
您可以使用 Web 控制台为单个虚拟机配置对虚拟机客户机系统日志的访问。此设置优先于集群范围的默认配置。
在侧边菜单中点击**虚拟化** → **虚拟机**。
选择一个虚拟机以打开**虚拟机详细信息**页面。
点击**配置**选项卡。
将**访客系统日志访问**设置为开启或关闭。
您可以通过编辑VirtualMachine
CR 来配置对单个虚拟机访客系统日志的访问。此设置优先于集群范围的默认配置。
运行以下命令来编辑虚拟机清单:
$ oc edit vm <vm_name>
更新logSerialConsole
字段的值。例如:
apiVersion: kubevirt.io/v1
kind: VirtualMachine
metadata:
name: example-vm
spec:
template:
spec:
domain:
devices:
logSerialConsole: true (1)
#...
1 | 要启用对访客串口控制台日志的访问,请将logSerialConsole 值设置为true 。 |
运行以下命令将新配置应用于虚拟机:
$ oc apply vm <vm_name>
可选:如果您编辑的是正在运行的虚拟机,请重新启动虚拟机以应用新配置。例如:
$ virtctl restart <vm_name> -n <namespace>
您可以通过聚合和过滤日志来简化故障排除。
您可以使用 Web 控制台中的 LokiStack 查看 OpenShift Virtualization Pod 和容器的聚合日志。
您已部署 LokiStack。
在 Web 控制台中导航到**监控** → **日志**。
从日志类型列表中选择**应用程序**(对于virt-launcher
Pod 日志)或**基础设施**(对于 OpenShift Virtualization 控制平面 Pod 和容器)。
点击**显示查询**以显示查询字段。
在查询字段中输入 LogQL 查询,然后点击**运行查询**以显示过滤后的日志。
您可以通过在 Web 控制台的**监控** → **日志**页面上运行 Loki 查询语言 (LogQL) 查询来查看和过滤 OpenShift Virtualization 组件的聚合日志。
默认日志类型为基础设施。virt-launcher
日志类型为应用程序。
可选:您可以使用行过滤器表达式包含或排除字符串或正则表达式。
如果查询匹配大量日志,则查询可能会超时。 |
组件 | LogQL 查询 | ||
---|---|---|---|
全部 |
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
容器 |
|
||
|
运行此查询之前,必须从日志类型列表中选择**应用程序**。
|
您可以使用行过滤器表达式过滤日志行以包含或排除字符串或正则表达式。
行过滤器表达式 | 描述 |
---|---|
|
日志行包含字符串 |
|
日志行不包含字符串 |
|
日志行包含正则表达式 |
|
日志行不包含正则表达式 |
{log_type=~".+"}|json
|kubernetes_labels_app_kubernetes_io_part_of="hyperconverged-cluster"
|= "error" != "timeout"
交叉引用:../../observability/logging/log_storage/about-log-storage.adoc#about-log-storage[关于日志存储]
以下错误消息可能会出现在 OpenShift Virtualization 日志中:
ErrImagePull
或 ImagePullBackOff
指示部署配置错误或引用的镜像存在问题。
您可以检查DataVolume
对象的Conditions
和Events
部分来分析和解决问题。
您可以通过检查命令生成的Conditions
和Events
部分的输出诊断数据卷问题:
$ oc describe dv <DataVolume>
Conditions
部分显示以下类型
:
绑定
运行中
就绪
Events
部分提供以下其他信息:
事件的类型
记录的原因
事件的来源
包含其他诊断信息的消息
。
oc describe
的输出并不总是包含Events
。
当Status
、Reason
或Message
发生更改时,会生成一个事件。条件和事件都会对数据卷状态的更改做出反应。
例如,如果您在导入操作期间拼写错误 URL,则导入会生成 404 消息。该消息更改会生成一个带有原因的事件。Conditions
部分中的输出也会更新。
通过检查describe
命令生成的Conditions
和Events
部分,您可以确定数据卷相对于持久卷声明 (PVC) 的状态,以及操作是否正在运行或已完成。您还可能会收到提供有关数据卷状态及其如何处于当前状态的具体详细信息的消息。
条件有很多不同的组合。每个都必须在其独特的上下文中进行评估。
以下是各种组合的示例。
Bound
- 此示例中显示了一个成功绑定的 PVC。
请注意,Type
为Bound
,因此Status
为True
。如果 PVC 未绑定,则Status
为False
。
当 PVC 绑定时,会生成一个事件,说明 PVC 已绑定。在这种情况下,Reason
为Bound
,Status
为True
。Message
指示哪个 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
- 在这种情况下,请注意Type
为Running
,Status
为False
,这表明发生了导致尝试的操作失败的事件,将 Status 从True
更改为False
。
但是,请注意Reason
为Completed
,并且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