第 21 章 诊断虚拟机问题
使用虚拟机(VM)时,您可能会遇到不同严重等级的问题。有些问题可能很快且容易修复,而另外一些问题,您可能需要捕获与虚拟机相关的数据和日志来报告或诊断问题。
以下章节提供了有关生成日志、诊断一些常见虚拟机问题以及报告这些问题的详细信息。
21.1. 生成 libvirt 调试日志
要诊断虚拟机(VM)问题,生成和查看 libvirt
调试日志会很有帮助。当请求支持解决与虚拟机相关的问题时,附加调试日志也很有用。
21.1.1. 了解 libvirt 调试日志
调试日志是文本文件,其中包含关于虚拟机(VM)运行期间所发生的事件的数据。日志提供有关基本服务器端功能的信息,如主机库和 libvirt
守护进程。日志文件还包含所有正在运行的虚拟机的标准错误输出(stderr
)。
默认情况下不启用 debug 日志记录,必须在 libvirt
启动时启用。
-
要为当前会话收集
libvirt
调试日志,请参阅 在运行时启用 libvirt 调试日志。 -
要默认收集
libvirt
调试日志,请参阅 永久启用 libvirt 调试日志。
之后,您可以在请求支持虚拟机问题时附加日志。详情请参阅 附加 libvirt 调试日志来支持请求。
21.1.2. 永久启用 libvirt 调试日志
您可以将 libvirt
debug 日志记录配置为在 libvirt
启动时自动启用。默认情况下,virtqemud
是 RHEL 10 中的主要 libvirt
守护进程。要在 libvirt
配置中进行持久更改,您必须编辑位于 /etc/libvirt
目录中的 virtqemud.conf
文件。
流程
-
在编辑器中打开
virtqemud.conf
文件。 根据您的要求替换或设置过滤器。
表 21.1. 调试过滤器的值 1
记录
libvirt
生成的所有消息。2
记录所有非调试信息。
3
记录所有警告和错误消息。这是默认值。
4
仅记录错误消息。
例 21.1. 日志过滤器的守护进程设置示例
以下设置:
-
记录来自
remote
,util.json
和rpc
层的所有错误和警告消息 -
仅记录来自
event
层的错误消息。 -
将过滤的日志保存到
/var/log/libvirt/libvirt.log
log_filters="3:remote 4:event 3:util.json 3:rpc" log_outputs="1:file:/var/log/libvirt/libvirt.log"
log_filters="3:remote 4:event 3:util.json 3:rpc" log_outputs="1:file:/var/log/libvirt/libvirt.log"
Copy to Clipboard Copied! -
记录来自
- 保存并退出。
重启
libvirt
守护进程。systemctl restart virtqemud.service
$ systemctl restart virtqemud.service
Copy to Clipboard Copied!
21.1.3. 在运行时启用 libvirt 调试日志
您可以修改 libvirt
守护进程的运行时设置,以启用调试日志并将其保存到输出文件中。
这在无法重启 libvirt
守护进程时很有用,因为重启解决了这个问题,或者因为存在另一个进程(如迁移或备份)同时运行。如果您要在不编辑配置文件或重启守护进程的情况下尝试命令,修改运行时设置也很有用。
先决条件
-
确保
libvirt-admin
软件包已安装。
流程
可选:备份活跃的日志过滤器集合。
virt-admin -c virtqemud:///system daemon-log-filters >> virt-filters-backup
# virt-admin -c virtqemud:///system daemon-log-filters >> virt-filters-backup
Copy to Clipboard Copied! 这样便可在生成日志后恢复活跃的过滤器集合。如果您没有恢复过滤器,则会继续记录消息,这可能会影响系统性能。
使用
virt-admin
工具启用调试,并根据您的要求设置过滤器。表 21.2. 调试过滤器的值 1
记录 libvirt 生成的所有消息。
2
记录所有非调试信息。
3
记录所有警告和错误消息。这是默认值。
4
仅记录错误消息。
例 21.2. 日志过滤器的 virt-admin 设置示例
以下命令:
-
记录来自
远程
、util.json
和rpc
层的所有错误和警告消息 -
仅记录来自
event
层的错误消息。
virt-admin -c virtqemud:///system daemon-log-filters "3:remote 4:event 3:util.json 3:rpc"
# virt-admin -c virtqemud:///system daemon-log-filters "3:remote 4:event 3:util.json 3:rpc"
Copy to Clipboard Copied! -
记录来自
使用
virt-admin
工具将日志保存到特定的文件或目录中。例如,以下命令将日志输出保存到
/var/log/libvirt/
目录中的libvirt.log
文件中:virt-admin -c virtqemud:///system daemon-log-outputs "1:file:/var/log/libvirt/libvirt.log"
# virt-admin -c virtqemud:///system daemon-log-outputs "1:file:/var/log/libvirt/libvirt.log"
Copy to Clipboard Copied! 可选:您还可以删除过滤器,来生成包含所有与虚拟机相关的信息的日志文件。但不建议您这样做,因为这个文件可能包含由 libvirt 模块生成的大量冗余信息。
使用
virt-admin
工具指定一组空白的过滤器。virt-admin -c virtqemud:///system daemon-log-filters
# virt-admin -c virtqemud:///system daemon-log-filters Logging filters:
Copy to Clipboard Copied!
可选:使用之前创建的备份文件将过滤器恢复到其原始状态。
virt-admin -c virtqemud:///system daemon-log-filters "<original-filters>"
# virt-admin -c virtqemud:///system daemon-log-filters "<original-filters>"
Copy to Clipboard Copied! 在这个命令中,将 <
;original-filters&
gt; 替换为virt-filters-backup
的内容。请注意,如果您没有恢复过滤器,则会继续记录消息,这可能会影响系统性能。
21.1.4. 将 libvirt 调试日志附加到支持请求中
您可能需要请求额外的支持来诊断和解决虚拟机(VM)问题。强烈建议将调试日志附加到支持请求中,以确保支持团队可以访问所需的所有信息,从而快速解决与虚拟机相关的问题。
流程
- 要报告问题并请求支持,创建一个支持问题单。
根据遇到的问题,将以下日志与您的报告一起附加:
-
对于
libvirt
服务的问题,请附加来自主机的/var/log/libvirt/libvirt.log
文件。 对于特定虚拟机的问题,请附加对应的日志文件。
例如,对于 testguest1 虚拟机,请附加
testguest1.log
文件,该文件可在/var/log/libvirt/qemu/testguest1.log
中找到。
-
对于