生成 AlloyDB Omni 诊断转储文件

选择文档版本:

生成包含系统状态和诊断日志的 AlloyDB Omni 调试转储,以排查部署中的意外问题。调试日志提供有关 AlloyDB Omni 状态的关键诊断信息,可帮助您或 Cloud Customer Care 团队分析与运行 AlloyDB Omni 堆栈的各种服务相关的故障或问题。使用 Ansible 角色或独立工具收集这些文件。

控制 alloydbctl 和 Ansible 的编排器级诊断日志,以调整详细程度进行问题排查,或将自动脚本的输出静音。这些日志对于诊断集群引导、管理或一般操作期间的问题至关重要。

收集和转储调试信息

您可以使用 Ansible 角色或调试转储工具来收集和转储调试信息。

使用 Ansible 收集调试信息

google.alloydbomni_orchestrator.dump_debug Ansible 角色会自动在部署规范中定义的所有 AlloyDB Omni 节点上执行收集过程。它会收集并整合以下信息:

  • Systemd 状态:所有 AlloyDB Omni 服务的当前状态。
  • Journal 日志:系统日志,支持基于时间的过滤。

生成调试信息转储

  1. 在控制节点上创建 Ansible playbook(例如 dump_debug.yml)。将以下内容添加到 playbook 中:

    - name: Collect AlloyDB Omni Debug Dump
      hosts: all
      become: true
      gather_facts: true
      vars:
        ansible_user: ANSIBLE_USER
        ansible_ssh_private_key_file: PATH_TO_PRIVATE_SSH_KEY
        # Optional: Customize dump behavior
        dump_debug_binary_path: "BINARY_PATH"
        dump_debug_collection_type: "COLLECTION_TYPE"
        dump_debug_local_dest: ""ANSIBLE_DESTINATION""
        dump_debug_tag: ""TAG_NAME""
        dump_debug_journal_spec: "JOURNAL_SPEC"
      roles:
        - role: google.alloydbomni_orchestrator.dump_debug
    

    替换以下内容:

    • ANSIBLE_USER:Ansible 登录时使用的用户。
    • PATH_TO_PRIVATE_SSH_KEY:SSH 私钥文件的路径。
    • BINARY_PATH:可选。远程节点上二进制文件的路径。 默认值为 /usr/local/bin。
    • COLLECTION_TYPE:可选。集合类型(status、logs、config 或 all)。默认值为 all。
    • ANSIBLE_DESTINATION:可选。Ansible 控制节点上的目标位置。默认值为 /tmp/debug_dump。
    • TAG_NAME:可选。自定义标识符。如果标记已存在,则会添加后缀(例如 _1)。默认为系统时间戳。
    • JOURNAL_SPEC:可选。支持 journalctl 标志(例如 "--since '1 hour ago'")。默认值为 -n 1000。
  2. 使用 ansible-playbook 命令运行 playbook,并将 deployment_spec.yaml 指定为清单。

    # standard execution
    ansible-playbook dump_debug.yml -i PATH_TO_DEPLOYMENT_SPEC

    或者,使用您选择的自定义标记和日志规范运行 playbook。

    ansible-playbook dump_debug.yml -i PATH_TO_DEPLOYMENT_SPEC \
    -e 'dump_debug_tag=TAG_NAME' \
    -e 'dump_debug_journal_spec: "JOURNAL_SPEC"'

    替换以下内容:

    • PATH_TO_DEPLOYMENT_SPEC:部署规范 YAML 文件的路径。
    • TAG_NAME:可选。自定义标识符。如果标记已存在,则会添加后缀(例如 _1)。默认为系统时间戳。
    • JOURNAL_SPEC:可选。支持 journalctl 标志(例如 "--since '1 hour ago'")。默认值为 -n 1000。

使用调试转储工具收集调试信息

您可以使用 alloydbomni_dump 工具生成转储文件。此工具包含在 AlloyDB Omni 编排器软件包中。

生成转储文件

在要调试的 AlloyDB Omni 集群节点上运行以下脚本。

sudo /usr/local/bin/alloydbomni_dump \
   -k SSH_KEY \
   -u USER \
   -d PATH_TO_DEPLOYMENT_SPEC \
   -o OUTPUT_DIRECTORY \
   [options]

替换以下内容:

  • SSH_KEY:用户的 SSH 私钥的路径。
  • USER:用于通过 SSH 访问集群节点的用户名。
  • PATH_TO_DEPLOYMENT_SPEC:部署规范 YAML 文件的路径。
  • OUTPUT_DIRECTORY:用于保存生成的转储文件的本地目录。

支持的指令

  • -k:SSH 私钥的必需路径。
  • -u:所需的服务账号用户名。
  • -d:部署规范 YAML 文件的路径(必需)。
  • -o:最终 tar 文件的必需输出目录。
  • -t:可选的自定义代码标识符。
  • -c:可选集合类型(status、logs、config、all)。
  • -s:可选日志大小和时间规范(例如 -s "--since \"30 minutes ago\"")。

执行示例

alloydbomni_dump -k /home/user/ssh-key \
  -u sa_12345 -d /tmp/deployment_spec.yaml \
  -o /tmp/debug_dump -s "--since \"2 hours ago\""

获取编排器诊断日志

您可以获取由 alloydbctl 和 Ansible 编排器生成的诊断日志。这样,您就可以提高详细程度以进行问题排查,或将输出静音以运行自动化脚本。日志记录对于诊断集群引导、管理或常规操作期间的问题至关重要。

获取 alloydbctl 调试日志

alloydbctl 工具支持通过命令行参数来控制日志级别和输出目标位置。日志级别决定了要记录的消息的严重级别,而日志目标位置则指定了这些日志的写入位置。

alloydbctl [command] ... [{-l|--log_level} <LEVEL>] [{-f|--log_file} <FILE>]

日志级别(-l / --log_level)

您可以使用以下日志级别。日志级别不区分大小写(例如,DEBUG 和 debug 的处理方式相同)。

  • NOTSET(默认):不记录日志。
  • DEBUG:记录详细信息,通常仅在诊断问题时有用。记录 RPC 请求和响应。
  • INFO:确认一切正常。
  • WARNING:表示发生了意外情况(例如“磁盘可用空间不足”),但软件仍在运行。
  • 错误:由于存在更严重的问题,软件无法执行某些功能。
  • CRITICAL:严重错误,表示程序本身可能无法继续运行。

日志目标位置(-f / --log_file)

您可以选择以下日志目标位置:

  • 文件路径:如果提供(例如 -f /tmp/alloydbctl.log),日志将写入指定的文件。
  • 标准输出:如果未提供,日志会输出到控制台 (stdout)。

示例

以下示例使用 alloydbctl 应用部署和资源规范,同时启用 DEBUG 级别日志记录。日志(包括详细信息和 RPC 请求/响应)会写入文件 /tmp/alloydbctl_debug.log,而不是标准输出。

alloydbctl apply -d deployment_spec.yaml -r resource_spec.yaml -l DEBUG -f /tmp/alloydbctl_debug.log

获取 Ansible 调试日志

Ansible Orchestrator 会根据 Ansible 任务和 Ansible 模块生成日志。您可以传递标准 Ansible 命令行参数,以更改任务和模块的日志记录行为。如需了解详情,请参阅 ansible-playbook 文档。

Ansible 模块的日志级别

默认情况下,日志会发送到运行 playbook 的控制台。

如需设置 log_level 配置设置,请运行以下命令:

ansible-playbook -i inventory.yaml bootstrap.yaml \
  -e resource_spec=resource_spec.yaml \
  -e log_level=DEBUG

您还可以使用以下标准 Ansible 详细程度标志来控制输出详细程度:

  • -v:基本详细程度(INFO 级日志)。
  • -vv 或更高级别:提高详细程度(DEBUG 级别日志)。

例如:

ansible-playbook -i inventory.yaml bootstrap.yaml \
  -e resource_spec=resource_spec.yaml \
  -vv

Ansible 模块的日志路径

默认情况下,系统不会捕获日志,必须配置日志级别才能在日志文件中捕获日志。

如需将 Ansible 输出保存到日志文件,请运行以下命令来设置 log_path 配置:

ansible-playbook -i inventory.yaml bootstrap.yaml \
  -e resource_spec=resource_spec.yaml \
  -e log_file=/tmp/ansible-module.log

重置失败的 systemd 实例

如果调试转储显示过时、失败的服务实例,请在受影响的集群节点上运行以下命令来清除这些实例:

sudo systemctl reset-failed

如需重置特定的 systemd 服务,请指定服务实例名称:

sudo systemctl reset-failed INSTANCE_NAME

将 INSTANCE_NAME 替换为 systemd 服务实例的名称,例如 alloydbomni18@abc.service。