A.3. virt-who 故障排除方法

验证 virt-who 状态

要在 Satellite web UI 中验证 virt-who 的状态,进入 Infrastructure > Virt-who 配置 并检查每个 virt-who 实例的 Status 列。状态 OK 表示 virt-who 成功连接到卫星服务器并报告每个虚拟机监控程序管理的虚拟机。

要使用 CLI 列出所有 virt-who 实例的状态,请在卫星服务器上输入以下命令:

# hammer virt-who-config list

命令的输出包括向卫星服务器报告每个 virt-who 实例的日期和时间。

调试日志记录

检查 /var/log/rhsm/rhsm.log 文件,其中 virt-who 会记录其所有活动。

要启用更详细的日志记录,请修改 virt-who 配置:

  • 在卫星 Web UI 中,选择 Enable 调试输出 复选框。
  • 在 Hammer CLI 中,添加 --debug true 选项。

重新部署配置以使更改生效。

当底层问题解决时,修改 virt-who 配置以禁用调试,然后再次重新部署配置。

测试配置选项

进行更改并测试结果,根据需要重复。virt-who 提供两个选项,可以帮助测试配置文件、凭证和与虚拟化平台的连接:

  • virt-who --one-shot 命令读取配置文件,检索虚拟机列表并将其发送到卫星服务器,然后立即退出。
  • virt-who --print 命令读取配置文件并打印虚拟机列表,但不将其发送到卫星服务器。

预期的输出是虚拟机监控程序及其虚拟机列表,采用 JSON 格式。以下是 VMware vSphere 实例中提取的。所有虚拟机监控程序的输出都遵循相同的结构。

{
    "guestId": "422f24ed-71f1-8ddf-de53-86da7900df12",
    "state": 5,
    "attributes": {
        "active": 0,
        "virtWhoType": "esx",
        "hypervisorType": "vmware"
    }
},

识别使用多个 virt-who 配置文件时的问题

如果您在一个服务器上有多个 virt-who 配置文件,则一次将一个文件移动到另一个目录,同时在每个文件移动后进行测试。如果问题不再发生,则原因与最近移动的文件相关联。解决此问题后,将 virt-who 配置文件返回至其原始位置。

另外,您可以使用 --config 选项指定其位置,在移动该文件后测试单个文件。例如:

# virt-who --debug --one-shot --config /tmp/conf_name.conf

识别重复的虚拟机监控程序

重复的虚拟机监控程序可能会导致订阅和权利错误。输入以下命令检查重复的虚拟机监控程序:

# systemctl stop virt-who
# virt-who -op >/tmp/virt-who.json
# systemctl start virt-who
# cat /tmp/virt-who.json | json_reformat | grep name | sort | uniq -c | sort -nr | head -n10
  3    "name": "localhost"
  1    "name": "rhel1.example.com"
  1    "name": "rhel2.example.com"
  1    "name": "rhel3.example.com"
  1    "name": "rhel4.example.com"
  1    "name": "rhvh1.example.com"
  1    "name": "rhvh2.example.com"
  1    "name": "rhvh3.example.com"
  1    "name": "rhvh4.example.com"
  1    "name": "rhvh5.example.com"

在本例中,三个虚拟机监控程序具有相同的 FQDN(localhost),必须更正才能使用唯一的 FQDN。

识别重复的虚拟机

输入以下命令检查重复的虚拟机:

# systemctl stop virt-who
# virt-who -op >/tmp/virt-who.json
# systemctl start virt-who
# cat /tmp/virt-who.json | json_reformat | grep "guestId" | sort | uniq -c | sort -nr | head -n10

检查虚拟机监控程序的数量

输入以下命令检查当前虚拟机监控程序 virt-who 报告数量:

# systemctl stop virt-who
# virt-who -op >/tmp/virt-who.json
# systemctl start virt-who
# cat /tmp/virt-who.json | json_reformat | grep name | sort | uniq -c | wc -l

检查虚拟机数量

输入以下命令检查 virt-who 报告的虚拟机数量:

# systemctl stop virt-who
# virt-who -op >/tmp/virt-who.json
# systemctl start virt-who
# cat /tmp/virt-who.json | json_reformat | grep "guestId" | sort | uniq -c | wc -l