虚拟机管理器问题排查

本文档介绍如何排查虚拟机管理器问题。

如需详细了解虚拟机管理器,请参阅虚拟机管理器

准备工作

  • 设置身份验证(如果尚未设置)。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以按如下方式向 Compute Engine 进行身份验证。

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. REST

      如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证

概览

如需排查问题,请先验证虚拟机管理器已正确设置。如果设置正确但仍然存在问题,您可以查看日志。查看日志时,您可以找出虚拟机或虚拟机管理器工作流中的问题,例如命令或脚本中的错误,并且可以隔离和解决这些错误。

您可以从日志中收集以下信息:

  • 虚拟机记录的任何错误消息或警告。这非常适合用来识别虚拟机级别的错误或者虚拟机上运行的其他服务的错误。如需查看这些日志,请参阅检查 Cloud Logging
  • OS Config 代理记录的详细调试信息。这对于识别虚拟机管理器运行的任何操作的问题非常有用。如需检查 OS Config 代理的调试日志,请参阅检查调试日志

确定问题或错误后,您还可以查看常见错误部分,了解可能的修复方案。

检查 Cloud Logging

您可以使用 Google Cloud 控制台中用于各特性的快速链接查看特定虚拟机的日志。

操作系统修补

  1. 在 Google Cloud 控制台中,转到 OS Patch Management 页面上的修补作业标签页。

    转到“修补作业”

  2. 点击要调试的修补作业的名称。
  3. 向下滚动到已更新的虚拟机实例
  4. 对于特定虚拟机,在日志下点击查看

操作系统政策

操作系统政策支持此过程。对于客机政策(Beta 版),请使用以下部分中的调试日志选项。

  1. 在 Google Cloud 控制台中,转到 OS Configuration Management 页面上的虚拟机实例标签页。

    转到“虚拟机实例”

  2. 点击要调试的虚拟机的名称。
  3. 向下滚动到政策
  4. 日志下,点击查看

检查调试日志

您可以通过为 OS Config 代理启用调试并查看调试日志,来确定任何虚拟机管理器功能的问题。

为 OS Config 代理启用调试日志记录

您可以通过在虚拟机实例或项目上设置 osconfig-log-level=debug 元数据,启用调试日志记录。

如需在您的虚拟机上启用调试日志记录,请完成以下步骤:

控制台

  1. 在 Google Cloud 控制台中,转到虚拟机实例页面。

    转到“虚拟机实例”

  2. 点击要为其设置元数据值的虚拟机的名称。

  3. 实例详情页面上,点击修改以修改设置。

  4. 自定义元数据下,添加以下元数据条目:

    键:osconfig-log-level
    值:debug

  5. 点击保存以将更改应用于虚拟机。

gcloud

使用带有 --metadata=osconfig-log-level=debug 标志的 instances add-metadata 命令

gcloud compute instances add-metadata VM_NAME \
    --metadata=osconfig-log-level=debug

VM_NAME 替换为虚拟机名称。

REST

如需了解如何设置实例元数据,请按照设置实例元数据的 API 说明进行操作。

必须在元数据属性中设置以下键值对:

键:osconfig-log-level
值:debug

查看调试日志

启用调试日志记录后,OS Config 代理会将日志条目写入 Cloud Logging 和串行端口控制台。

在虚拟机上启用调试日志记录后,OS Config 代理大约需要 10 分钟才能开始在 Cloud Logging 中写入调试消息。 您可以通过重启代理或重新启动虚拟机来缩短等待时间。如需详细了解 Cloud Logging,请参阅查看 Cloud Logging 日志

如需查看调试日志,您可以使用以下选项:

  • Cloud Logging:使用 Google Cloud 控制台或 Google Cloud CLI
  • 串行端口控制台

控制台

  1. 前往 Google Cloud 控制台中的 Logging > 日志浏览器(日志浏览器)页面:

    转到日志浏览器

  2. 如果需要,请在页面顶部选择一个现有 Google Cloud 项目,或者创建一个新项目。

  3. 资源下拉列表中,选择虚拟机实例。此时将显示可用虚拟机 (instance_id) 列表。

  4. 点击要查看的虚拟机。

  5. 点击添加

  6. 日志名称下拉列表中,选择 OSConfigAgent

  7. 点击添加

  8. 您的查询应类似于以下内容:

    resource.type="gce_instance" resource.labels.instance_id="INSTANCE_ID"
    logName="projects/PROJECT_ID/logs/OSConfigAgent"
    
  9. 点击运行查询

gcloud

运行 gcloud logging read 命令

 gcloud logging read "resource.type=gce_instance AND logName=projects/PROJECT_ID/logs/OSConfigAgent"
 

PROJECT_ID 替换为您的项目 ID。

串行端口

如需从串行端口控制台查看调试日志信息,请参阅查看串行端口输出

常见错误

身份验证问题

要使虚拟机管理器正常工作,您必须满足以下条件:

  • 具备一个附加的服务账号。虚拟机管理器使用此服务账号签署对 API 服务的请求。
  • 确保附加的服务账号具有 roles/logging.logWriter 角色,可将日志写入 Logging API。
  • Google Cloud OS Config Service Agent。虚拟机管理器在启动修补作业时创建此服务代理,并为其授予 Cloud OS Config Service Agent 角色。如需创建操作系统政策,则无需配置此服务代理。

如果您使用虚拟机管理器,但没有附加的服务账号或 Google Cloud OS Config Service Agent,则您在处理修补作业时可能会看到以下错误:

Service account permissions are missing. Verify that the service account has the correct permissions and try again.
OSConfigAgent Error main.go:88: error getting token from metadata: metadata: GCE metadata "instance/service-accounts/default/identity?audience=osconfig.googleapis.com&format=full" not defined
message: "Error running OPERATION_NAME: error calling OPERATION_NAME: code: "PermissionDenied", message: "The caller does not have permission", details: []"

身份验证问题也可能会导致虚拟机实例无法显示在补丁信息中心上。

如需解决这些问题,请尝试以下一项或多项操作:

  • 验证是否所有虚拟机都具有附加的服务账号
  • 确保为 Google Cloud OS Config Service Agent 设置了 Cloud OS Config Service Agent 角色 (roles/osconfig.serviceAgent)。

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member='serviceAccount:service-PROJECT_NUMBER@gcp-sa-osconfig.iam.gserviceaccount.com' \
      --role='roles/osconfig.serviceAgent'
    

    替换以下内容:

    • PROJECT_ID:您的项目 ID
    • PROJECT_NUMBER:您的项目编号

从补丁程序更新中排除软件包时出错

如果在修补作业中排除软件包时,指定的软件包名称中含有通配符或特殊字符,则 OS Patch Management 可能会忽略列表并更新所有软件包。

如需解决此问题,请 更新 OS Config 代理到版本 20220829.00,并使用正斜杠 (/) 来封装软件包名称。

在下面的示例中,OS Patch Management 会排除软件包名称中含有前缀 google-yum 软件包。

      gcloud compute os-config patch-jobs execute --instance-filter-all
--yum-excludes=/google-.*/

后续步骤