Menu Close
Settings Close

Language and Page Formatting Options

第 21 章 诊断虚拟机问题

在使用虚拟机时,您可能会遇到与不同严重级别相关的问题。有些问题可能会快速轻松地修复,而对于其他来说,您可能必须捕获与虚拟机相关的数据和日志来报告或诊断问题。

以下小节提供有关生成日志和诊断一些常见虚拟机问题的详细信息,以及报告这些问题的信息。

21.1. 生成 libvirt 调试日志

要诊断虚拟机(VM)问题,生成和查看 libvirt 调试日志会很有帮助。当要求支持解决虚拟机相关问题时,附加调试日志也很有用。

以下小节解释了 什么是调试日志,如何 将其设置为持久的在运行时启用它们,并在报告问题时附加它们

21.1.1. 了解 libvirt 调试日志

debug 日志是文本文件,其中包含虚拟机(VM)运行时发生的事件的数据。日志提供有关基本的服务器端功能的信息,如主机库和 libvirt 守护进程。日志文件还包含所有正在运行的虚拟机的标准输出(stderr)。

默认不启用 debug 日志记录,且必须在 libvirt 启动时启用。您可以为单个会话或永久启用日志记录。您还可以通过 修改守护进程运行时设置,在 libvirt 守护进程会话已在运行时启用日志。

在请求对虚拟机问题的支持时,附加 libvirt 调试日志也很有用。

21.1.2. 为 libvirt 调试日志启用持久性设置

您可以将 libvirt debug 日志记录配置为在 libvirt 启动时自动启用。默认情况下,virtqemud 是 RHEL 9 中的主要 libvirt 守护进程。要在 libvirt 配置中进行持久更改,您必须编辑位于 /etc/libvirt 目录中的 virtqemud.conf 文件。

注意

在某些情况下,例如,当您从 RHEL 8 升级时,libvirtd 可能仍为已启用的 libvirt 守护进程。在这种情况下,您必须编辑 libvirtd.conf 文件。

流程

  1. 在编辑器中打开 virtqemud.conf 文件。
  2. 根据您的要求替换或设置过滤器。

    表 21.1. 调试过滤器值

    1

    记录 libvirt 生成的所有消息。

    2

    记录所有非调试的信息。

    3

    记录所有警告和错误消息。这是默认值。

    4

    仅记录错误消息。

    例 21.1. 日志过滤器的守护进程设置示例

    以下设置:

    • 记录来自 remoteutil.jsonrpc 层的所有错误和警告信息
    • 仅记录来自 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"
  3. 保存并退出。
  4. 重启 libvirt 守护进程。

    $ systemctl restart virtqemud.service

21.1.3. 在运行时启用 libvirt 调试日志

您可以修改 libvirt 守护进程的运行时设置,以启用调试日志并将其保存到输出文件中。

这在无法重启 libvirt 守护进程时非常有用,因为重启解决了这个问题,或者因为有另一个进程(如迁移或备份)同时运行。如果您要在不编辑配置文件或重启守护进程的情况下尝试命令,修改运行时设置也很有用。

先决条件

  • 确保已安装了 libvirt-admin 软件包。

流程

  1. 可选:备份活跃的日志过滤器集合。

    # virt-admin -c virtqemud:///system daemon-log-filters >> virt-filters-backup
    注意

    建议您备份活跃的过滤器集合,以便在生成日志后恢复它们。如果您没有恢复过滤器,信息将继续记录可能会影响系统性能。

  2. 使用 virt-admin 实用程序根据您的要求启用调试和设置过滤器。

    表 21.2. 调试过滤器值

    1

    记录 libvirt 生成的所有消息。

    2

    记录所有非调试的信息。

    3

    记录所有警告和错误消息。这是默认值。

    4

    仅记录错误消息。

    例 21.2. 日志记录过滤器的 virt-admin 设置示例

    以下命令:

    • 记录来自 remoteutil.jsonrpc 层的所有错误和警告信息
    • 仅记录来自 event 层的错误消息。
    # virt-admin -c virtqemud:///system daemon-log-filters "3:remote 4:event 3:util.json 3:rpc"
  3. 使用 virt-admin 实用程序将日志保存到特定文件或目录中。

    例如,以下命令将日志输出保存到 /var/log/libvirt/ 目录中的 libvirt.log 文件中。

    # virt-admin -c virtqemud:///system daemon-log-outputs "1:file:/var/log/libvirt/libvirt.log"
  4. 可选:您还可以删除过滤器来生成包含所有与虚拟机相关的信息的日志文件。但不建议您这样做,因为这个文件可能包含由 libvirt 模块生成的大量冗余信息。

    • 使用 virt-admin 实用程序指定一组空的过滤器。

      # virt-admin -c virtqemud:///system daemon-log-filters
        Logging filters:
  5. 可选:使用备份文件将过滤器恢复到其原始状态。
    使用保存的值执行第二步,以恢复过滤器。

21.1.4. 附加 libvirt debug 日志来支持请求

您可能需要请求额外的支持来诊断和解决虚拟机(VM)问题。强烈建议您将调试日志附加到支持请求,以确保支持团队能够访问所需的全部信息,以快速解决问题。

流程

  • 要报告问题并请求支持,创建一个支持问题单
  • 根据遇到的问题,将以下日志与您的报告一起附加:

    • 对于 libvirt 服务的问题,请从主机附加 /var/log/libvirt/libvirt.log 文件。
    • 对于特定虚拟机的问题,请附加对应的日志文件。

      例如,对于 testguest1 虚拟机,附加 testguest1.log 文件,该文件可在 /var/log/libvirt/qemu/testguest1.log 中找到。