$ oc get events -n <namespace>
Red Hat OpenShift Service on AWS事件记录重要的生命周期信息,有助于监控和排查虚拟机、命名空间和资源问题。
虚拟机事件:在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 或更高,则会显示这些日志。 |
保存并退出编辑器以应用更改。
您可以使用Red Hat OpenShift Service on AWS 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"}
查看VM客户机的启动日志可以帮助诊断问题。您可以使用Red Hat OpenShift Service on AWS Web控制台或oc
CLI配置对客户机日志的访问并查看它们。
此功能默认情况下处于禁用状态。如果VM没有显式启用或禁用此设置,它将继承集群范围的默认设置。
如果将敏感信息(例如凭据或其他个人身份信息(PII))写入串行控制台,则会将其与所有其他可见文本一起记录。Red Hat建议使用SSH发送敏感数据,而不是串行控制台。 |
您可以使用Web控制台启用对VM客户机系统日志的默认访问。
从侧边菜单中,单击**虚拟化**→**概述**。
单击**设置**选项卡。
单击**集群**→**客户机管理**。
将**启用客户机系统日志访问**设置为开启。
您可以通过编辑HyperConverged
自定义资源(CR)来启用对VM客户机系统日志的默认访问。
通过运行以下命令在默认编辑器中打开HyperConverged
CR:
$ oc edit hyperconverged kubevirt-hyperconverged -n openshift-cnv
更新disableSerialConsoleLog
值。例如:
kind: HyperConverged
metadata:
name: kubevirt-hyperconverged
spec:
virtualMachineOptions:
disableSerialConsoleLog: true (1)
#...
1 | 如果要默认在VM上启用串行控制台访问,请将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虚拟化Pod和容器的聚合日志。
您已部署LokiStack。
在Web控制台中导航到**监控** → **日志**。
从日志类型列表中选择**application**(用于virt-launcher
Pod日志)或**infrastructure**(用于OpenShift虚拟化控制平面Pod和容器)。
单击**显示查询**以显示查询字段。
在查询字段中输入LogQL查询,然后单击**运行查询**以显示过滤后的日志。
您可以通过在Web控制台的**监控** → **日志**页面上运行Loki查询语言(LogQL)查询来查看和过滤OpenShift虚拟化组件的聚合日志。
默认日志类型为infrastructure。virt-launcher
日志类型为application。
可选:您可以使用行过滤器表达式包含或排除字符串或正则表达式。
如果查询匹配大量日志,则查询可能会超时。 |
组件 | LogQL查询 | ||
---|---|---|---|
全部 |
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
容器 |
|
||
|
运行此查询之前,必须从日志类型列表中选择**application**。
|
您可以使用行过滤器表达式过滤日志行以包含或排除字符串或正则表达式。
行过滤器表达式 | 描述 |
---|---|
|
日志行包含字符串 |
|
日志行不包含字符串 |
|
日志行包含正则表达式 |
|
日志行不包含正则表达式 |
{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[关于日志存储]
您可以检查DataVolume
对象的Conditions
和Events
部分来分析和解决问题。
您可以通过检查命令生成的Conditions
和Events
部分的输出,来诊断数据卷问题:
$ oc describe dv <DataVolume>
Conditions
部分显示以下Types
:
Bound
Running
Ready
Events
部分提供以下附加信息:
事件的Type
记录的Reason
事件的Source
包含附加诊断信息的Message
。
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
。
在 Events
部分中,Reason
和 Message
包含有关失败操作的更多故障排除信息。在此示例中,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
– 如果 Type
为 Ready
并且 Status
为 True
,则数据卷已准备好使用,如下例所示。如果数据卷未准备好使用,则 Status
为 False
。
Status:
Conditions:
Last Heart Beat Time: 2020-07-15T04:31:39Z
Last Transition Time: 2020-07-15T04:31:39Z
Status: True
Type: Ready