Google Cloud 的 Agent for SAP 问题排查指南

本指南介绍了如何解决 Google Cloud 的 Agent for SAP 3.5 版(最新版)的问题。

如需了解 SAP 的问题排查和支持信息,请参阅以下 SAP 说明:

日志记录

检查特定于您的操作系统的目录中的日志。

如需查看 Google Cloud 的 Agent for SAP 的日志,请转到以下路径:

Linux

/var/log/google-cloud-sap-agent.log

Windows

C:\Program Files\Google\google-cloud-sap-agent\logs\google-cloud-sap-agent.log

如果您启用了 Google Cloud 的 Agent for SAP 的 Backint 功能,请查看以下日志:

  • SAP HANA backup.log 文件,其中包含有关 SAP HANA 备份和恢复操作的信息。
  • SAP HANA backint.log 文件,其中包含对代理的 Backint 功能和其他外部备份工具所使用的备份接口的调用。
  • Google Cloud 的 Agent for SAP 的 Backint 日志文件:/var/log/google-cloud-sap-agent/backint.log。此文件包含有关 Backint 功能启用时间和相关操作事件的信息,并介绍了 Cloud Storage 的通信错误和相关配置或权限问题。
  • Cloud Logging 中的 Google Cloud 日志,可能包含与 Google Cloud 的 Agent for SAP 使用的服务账号相关的错误。如需查看这些日志,请在 Google Cloud 控制台中转到 Logs Explorer 页面。

常见问题

以下部分介绍了与使用 Google Cloud 的 SAP for Agent 相关的常见问题及其原因和解决方法。

问题:IAM 权限不足

问题:Google Cloud 的 Agent for SAP 日志显示 IAM 权限不足错误。

原因:代理使用的服务账号没有访问 Cloud Monitoring API 所需的 IAM 权限,或者如果您使用的是代理的 Backint 功能,则没有足够权限访问 Cloud Storage 存储桶。

解决方法:要解决此问题,请执行以下步骤:

  1. Google Cloud 控制台的“虚拟机实例详情”页面上,记下虚拟机服务账号的名称。例如:sap-example@example-project-123456.iam.gserviceaccount.com

  2. 转到 IAM 和管理页面,确保所述服务账号包含以下 IAM 角色:

    功能 所需 IAM 角色
    SAP Host Agent 指标收集
    Process Monitoring 指标收集
    Workload Manager 评估指标收集
    SAP HANA 监控指标收集
    适用于 SAP HANA 的基于 Backint 的备份和恢复
    • Storage Object Admin (roles/storage.objectAdmin)
    • Cloud KMS CryptoKey Encrypter/Decrypter (roles/cloudkms.cryptoKeyEncrypterDecrypter)(如果您已使用客户管理的加密密钥来加密 Cloud Storage 中的 SAP HANA 备份)。如需了解此功能,请参阅备份的加密选项

    如需了解详情,请参阅所需的 Cloud Storage 权限

如需详细了解 Google Cloud 的 Agent for SAP 所需的身份验证,请参阅身份验证和访问权限

如需确认 Cloud Monitoring 代理所需的权限,请参阅以下 Monitoring 文档:

问题:虚拟机服务账号的访问权限范围不正确

问题:如果您限制主机虚拟机实例的访问权限范围,则 Google Cloud 的 Agent for SAP 日志可能会显示 IAM 权限不足错误。

原因:Google Cloud 的 Agent for SAP 要求主机虚拟机实例具有最小 Cloud API 访问权限范围。当服务账号没有所需的访问权限范围时,会发生此错误。

解决方法访问权限范围是为虚拟机实例指定权限的传统方法。Compute Engine 建议将虚拟机实例配置为允许对所有 Cloud API 的所有访问权限范围,并且仅使用虚拟机服务账号的 IAM 权限来控制对 Google Cloud 资源的访问。

如需解决此问题,最佳实践是对虚拟机实例设置所有 cloud-platform 访问权限范围,然后使用 IAM 角色安全地限制服务账号的 API 访问权限。例如:

  • https://www.googleapis.com/auth/cloud-platform

如果您限制了虚拟机实例的访问权限范围,则必须确保主机虚拟机实例具有以下访问权限范围:

  • https://www.googleapis.com/auth/source.read_write
  • https://www.googleapis.com/auth/compute
  • https://www.googleapis.com/auth/servicecontrol
  • https://www.googleapis.com/auth/service.management.readonly
  • https://www.googleapis.com/auth/logging.admin
  • https://www.googleapis.com/auth/monitoring
  • https://www.googleapis.com/auth/trace.append
  • https://www.googleapis.com/auth/devstorage.full_control

如果您已启用 Process Monitoring 指标或 SAP HANA 监控指标的收集,则主机虚拟机实例的访问权限范围还必须具有将指标数据发布到 Google Cloud 项目的写入权限:

  • https://www.googleapis.com/auth/monitoring.write

如需更改访问权限范围,您需要停止虚拟机实例,进行更改,然后重启虚拟机实例。如需查看相关说明,请参阅 Compute Engine 文档。您无需针对此问题对 IAM 角色的权限进行任何更改。

问题:SAP Host Agent 缺失或不正确

问题:Google Cloud 的 Agent for SAP 日志显示 SAP Host Agent 缺失或不正确错误。

原因:未安装 SAP Host Agent 或 SAP Host Agent 所需的最低级别的补丁。为了使 Google Cloud 的 Agent for SAP 正常运行,SAP 系统必须安装 SAP Host Agent,并保持 Host Agent 所需的最低补丁级别。

解决方法:如需解决此问题,请安装所需的 SAP Host Agent 版本。如需了解如何安装 SAP Host Agent,请参阅 SAP 文档

如需了解 SAP Host Agent 的版本要求,请参阅以下 SAP 说明:

问题:Google Cloud 的 Agent for SAP 安装失败

问题:在您运行软件包管理系统安装命令(例如 yumzyppergooget)时,代理安装失败,或者您看到以下错误消息:Package matching google-cloud-sap-agent-VERSION_NUMBER already installed. Checking for update.

原因:代理安装失败,原因如下:

  • 您要将代理降级到非最新版本,并且您的计算实例运行的是旧版 RHEL for SAP,例如 7.9 版。
  • 托管代理的计算实例是在没有外部 IP 地址的情况下创建的。

解决方法:如需解决此问题,请根据您的具体情况执行以下任一操作:

  • 如果您想将代理实例降级到非最新版本,并且您的计算实例在较旧版本的 RHEL for SAP(例如 7.9 版)上运行,请运行以下命令:

    RHEL

    sudo tee /etc/yum.repos.d/google-cloud-sap-agent.repo << EOM
    [google-cloud-sap-agent]
    name=Google Cloud Agent for SAP
    baseurl=https://packages.cloud.google.com/yum/repos/google-cloud-sap-agent-el$(cat /etc/redhat-release | cut -d . -f 1 | tr -d -c 0-9)-x86_64
    enabled=1
    gpgcheck=1
    repo_gpgcheck=0
    gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
    EOM
    sudo yum downgrade google-cloud-sap-agent-VERSION_NUMBER.x86_64

    SLES15

    sudo zypper addrepo --refresh https://packages.cloud.google.com/yum/repos/google-cloud-sap-agent-sles15-x86_64 google-cloud-sap-agent
    sudo zypper install google-cloud-sap-agent-VERSION_NUMBER.x86_64

    SLES 12

    sudo zypper addrepo --refresh https://packages.cloud.google.com/yum/repos/google-cloud-sap-agent-sles12-x86_64 google-cloud-sap-agent
    sudo zypper install google-cloud-sap-agent-VERSION_NUMBER.x86_64

    VERSION_NUMBER 替换为您要安装的代理的版本号,例如 3.1-606637668。如需了解您可以安装的代理版本,请参阅列出代理的所有可用版本

  • 如果托管代理的计算实例没有外部 IP 地址,请设置 NAT 网关,以授予主机服务器对互联网的出站访问权限。如需了解如何设置 NAT 网关,请参阅你的 SAP 系统对应的部署指南。例如,对于 SAP NetWeaver,请参阅:

问题:收集 SAP HANA 监控指标失败

问题:在从适用于 SAP HANA 的监控代理升级时,安装 Google Cloud's Agent for SAP 后,您会看到类似于以下内容的错误消息:

tls: failed to verify certificate: x509: certificate relies on legacy Common Name field, use SANs instead

原因:Google Cloud's Agent for SAP 无法开始收集 SAP HANA 监控指标,因为目标 SAP HANA 实例使用通过通用名称 (CN) 指定的 SSL 证书。

解决方法:要解决此问题,请按以下步骤操作:

  1. 对于要使用 Google Cloud's Agent for SAP 监控的 SAP HANA 实例,您必须切换为使用主题备用名称 (SAN) SSL 证书,而不是使用通用名称 (CN) 指定的 SSL 证书。

  2. 与主机虚拟机实例或裸金属解决方案服务器建立 SSH 连接。

  3. 打开 Google Cloud 的 Agent for SAP 的配置文件:

    /etc/google-cloud-sap-agent/configuration.json
  4. hana_monitoring_configuration 部分中,将参数 enabled 设置为 true

  5. hana_monitoring_configuration.hana_instances 部分中,对使用 TLS/SSL 协议进行安全通信的每个 SAP HANA 实例执行以下操作:

    1. 指定参数 enable_ssl 并将其值设置为 true

    2. 指定参数 host_name_in_certificate,并将 TLS/SSL 证书中指定的 SAP HANA 主机名设置为其值。

    3. 指定参数 tls_root_ca_file,并将 TLS/SSL 证书的存储路径设置为其值。

  6. 保存配置文件。

  7. 重启 Google Cloud's Agent for SAP,以使新设置生效:

    sudo systemctl restart google-cloud-sap-agent
  8. 验证代理是否正在收集 SAP HANA 监控指标。如需查看相关说明,请参阅查看其他指标

  9. 卸载 SAP HANA 监控代理。

问题:连接遭拒错误

问题:SAP Host Agent 日志显示连接遭拒错误。

原因:Google Cloud 的 Agent for SAP 无法启动,因为端口 18181 不可用。Google Cloud 的 Agent for SAP 监听端口 18181 上的请求。此端口必须可用,代理才能启动。

解决方法:如需解决此问题,请确保端口 18181 可用于 Google Cloud 的 Agent for SAP。如果其他服务正在使用端口 18181,则您可能需要重启该服务,或将其重新配置为使用其他端口。

问题:对于操作系统映像 SLES 15 SP4 for SAP 及更高版本,Google Cloud 的 Agent for SAP 不运行

问题:当您使用 SLES“for SAP”操作系统映像时,系统会为您预安装 Google Cloud 的 Agent for SAP。但是,对于操作系统映像 SLES 15 SP4 for SAP 及更高版本,预安装的 Agent for SAP 不会自行启动。

如需验证代理是否正在运行,请执行以下步骤:

  1. 连接到您的主机虚拟机实例或裸金属解决方案服务器。
  2. 运行以下命令:

    systemctl status google-cloud-sap-agent

    如果代理未在运行,则输出包含 inactive (dead)。例如:

    google-cloud-sap-agent.service - Google Cloud Agent for SAP
     Loaded: loaded (/usr/lib/systemd/system/google-cloud-sap-agent.service; disabled; vendor preset: disabled)
     Active: inactive (dead)
    

原因:由于操作系统打包存在问题,Agent for SAP 无法自行启动。

解决方法:如需解决此问题,请执行以下步骤:

  1. 连接到您的主机虚拟机实例或裸金属解决方案服务器。
  2. 运行以下命令:

    sudo sed -i 's~ /usr/sap~ -/usr/sap~g' /usr/lib/systemd/system/google-cloud-sap-agent.service
    sudo systemctl restart google-cloud-sap-agent
  3. 验证代理正在运行:

    systemctl status google-cloud-sap-agent

    您应该会看到类似于如下内容的输出:

    google-cloud-sap-agent.service - Google Cloud Agent for SAP
      Loaded: loaded (/usr/lib/systemd/system/google-cloud-sap-agent.service; disabled; vendor preset: disabled)
      Active: active (running) since Wed 2023-07-12 03:07:23 UTC; 7s ago
    Main PID: 6117 (google_cloud_sa)
       Tasks: 6
      Memory: 8.8M (max: 1.0G limit: 1.0G available: 1015.1M)
      CGroup: /system.slice/google-cloud-sap-agent.service
               └─ 6117 /usr/bin/google_cloud_sap_agent startdaemon
    

问题:由于缺少对 /usr/sap 目录的执行权限,系统发现失败

问题:在 Google Cloud 的 Agent for SAP 日志中,您看到了一条警告:No execute permission for /usr/sap directory, some of the discovery operations will fail. Please ensure that the root user has execute permission for /usr/sap directory.

原因:根用户没有 /usr/sap/ 目录的执行权限。因此,根用户无法访问位于 /usr/sap 目录中的 SAP 系统配置文件和 SAP 工具。这可能会限制代理发现在主机计算实例上运行的 SAP 系统,从而限制代理功能的预期行为。

解决方法:如需解决此问题,请确保根用户对 /usr/sap/ 目录具有执行权限。为此,请运行以下命令:

chmod +x /usr/sap

问题:吞吐量低

问题:您遇到了吞吐量低于预期的情况。

原因:对于 Google Cloud 的 SAP for Agent 的 Backint 功能,您可能使用 compress 配置参数启用了压缩。

解决方法:要解决此问题,请验证压缩是否未启用。为此,请执行以下步骤:

  1. 使用 SSH 连接到您的 SAP HANA 主机。

  2. 打开您的 Backint 配置文件:

    /usr/sap/SID/SYS/global/hdb/opt/backint/backint-gcs/parameters.json

    SID 替换为您在其中安装 Backint 相关文件的系统的 SID。

  3. 验证 compress 参数是否设置为 false

  4. 进行任何更改后,请保存配置文件。

问题:多流处理错误

问题:在多流处理数据备份时会收到错误。

原因:对于 Google Cloud 的 Agent for SAP 的 Backint 功能,您可能指定了比较多的并行流。

解决方法:要解决此问题,请执行以下步骤:

  1. 使用 SSH 连接到您的 SAP HANA 主机。

  2. 打开您的 Backint 配置文件:

    /usr/sap/SID/SYS/global/hdb/opt/backint/backint-gcs/parameters.json

    SID 替换为您在其中安装 Backint 相关文件的系统的 SID。

  3. 如果您为 parallel_streams 参数设置了值,请将其降低到 1

    如果此操作无法解决该错误,请与 Customer Care 联系。

连接到 Cloud Storage 时遇到的问题

问题:您遇到了 Cloud Storage 存储桶的连接问题。

原因:可能的原因如下:

  • 暂时性连接问题。
  • Google Cloud 的 Agent for SAP 使用的服务账号没有访问 Cloud Storage 所需的权限。
  • 您的配置存在问题。

解决方法:要排查 Cloud Storage 存储桶的连接问题,请检查以下项:

  • 重试失败的备份或恢复,以确保错误不是由于暂时的连接问题导致的。
  • 如果 Google Cloud 的 Agent for SAP 使用虚拟机的服务账号,请确保虚拟机具有所有云范围的访问权限,或者如果您限制访问,请确保虚拟机有权访问 storage.googleapis.com。如需了解详情,请参阅启用对 Cloud API 和元数据服务器的访问权限
  • 如果您创建了用于 Google Cloud 的 Agent for SAP 的服务账号,请确保满足以下条件:
    • 服务账号获得 Storage Object Admin 角色。
    • 如果您使用客户管理的加密密钥来加密 Cloud Storage 中的备份,则服务账号获得 Cloud KMS CryptoKey Encrypter/Decrypter 角色。如需了解详情,请参阅备份的加密
  • 确保您已在 Backint 配置文件 PARAMETERS.json 和 SAP HANA global.ini 文件中正确指定参数。

您可以使用 Google Cloud 的 Agent for SAP 中内置的自行诊断功能测试对 Cloud Storage 存储桶的访问权限。如需了解详情,请参阅自行诊断

基于磁盘快照的备份或恢复操作问题

问题:使用代理的 hanadiskbackuphanadiskrestore 命令为 SAP HANA 执行的备份或恢复操作未成功。

原因:此问题可能是由以下任何原因造成的:

  • 代理遇到错误并退出备份或恢复操作。
  • 由于底层 Google Cloud 服务出现问题,代理创建磁盘快照或将其上传到 Cloud Storage 所花费的时间超过预期时间。
  • 代理崩溃,没有明确的错误或成功消息。
  • 由于操作系统级别出现问题,备份或恢复操作失败。
  • 代理的等待时间超过 SAP HANA 数据库的预期时间,这可能是因为数据库遇到非常繁重的工作负载。

解决方法:如需解决此问题,请使用以下信息:

  • 如果是备份操作失败,请执行以下操作:

    1. 验证代理是否正在运行。如果未运行,请重启代理,然后重试备份操作。

    2. 如果代理按预期运行,请检查快照创建的状态:

      gcloud compute snapshots list
        --filter="sourceDisk:projects/PROJECT_ID/zones/ZONE_ID/disks/DISK_NAME"
      

      替换以下内容:

      • PROJECT_ID:在其中部署来源磁盘的 Google Cloud 项目
      • ZONE_ID:在其中部署来源磁盘的 Compute Engine 可用区,例如 us-central1-a
      • DISK_NAME:来源磁盘的名称

      输出状态可以是以下状态之一:CREATINGUPLOADINGREADY

    3. 如果快照创建的状态为 CREATINGUPLOADING,我们建议您等待此操作完成,尤其是当这是您为托管 /hana/data 卷的磁盘创建的第一个快照时。

      如果此操作失败,则代理会自动退出该过程并更新日志。您可以通过运行 hanadiskbackup 命令来重试备份创建。代理会负责完成 SAP HANA 数据库中失败的备份操作,并创建基于快照的新备份。

      如果您将 -confirm-data-snapshot-after-create 参数与 hanadiskbackup 命令搭配使用,并且快照上传操作失败,则需要手动删除 SAP HANA 备份目录中的快照条目,然后重试创建快照。如需删除 SAP HANA 备份目录中的条目,您可以使用 BACKUP CATALOG DELETE 语句。如需了解 -confirm-data-snapshot-after-create 参数,请参阅创建基于磁盘快照的备份中的说明。

    4. 如果快照创建的状态为 READY,但 hanadiskbackup 命令似乎仍在运行,这表示代理正在等待 SAP HANA 完成备份过程中其负责的那一部分。

    5. 如果 hanadiskbackup 命令的运行时间似乎超过预期时间,请执行以下操作,以恢复 SAP HANA 数据库的正常运行:

      1. 取消冻结包含 /hana/data 卷的 XFS 文件系统:

        xfs_freeze -u PATH_TO_HANA_DATA_VOLUME
      2. 从 SAP HANA 数据库中,获取失败存储快照的备份 ID:

        SELECT BACKUP_ID, STATE_NAME, COMMENT FROM M_BACKUP_CATALOG WHERE ENTRY_TYPE_NAME = 'data snapshot' and STATE_NAME = 'prepared'
      3. 在 SAP HANA 中,将失败快照的对应条目更新为未成功:

        BACKUP DATA FOR FULL SYSTEM CLOSE SNAPSHOT BACKUP_ID UNSUCCESSFUL 'Do not use - manually terminated';
        

      BACKUP_ID 替换为上一步中提取的 BACKUP_ID

    6. 如需解决失败备份操作的问题,请通过代理的支持包与客户服务联系。

  • 如果是恢复操作失败,请完成以下步骤:

    1. 验证托管 /hana/data 卷的原始磁盘是否已挂接到主机虚拟机。如果未挂接,请使用 gcloud compute instances attach-disk 命令进行挂接。

    2. 重新扫描卷组和逻辑卷:

      sudo /sbin/dmsetup remove_all
      sudo /sbin/vgscan -v --mknodes
      sudo /sbin/vgchange -ay
      sudo /sbin/lvscan
      sudo mount -av
      
    3. 如果重新扫描失败,请重启主机虚拟机。这会使操作系统重新扫描卷组。

    4. 在 SAP HANA 中,验证 /hana/data 卷是否已生效。

    5. 如果 /hana/data 卷仍未生效,请通过代理的支持包与客户服务联系以解决此问题。

基于 SAP HANA 监控视图的指标缺失

问题:基于 SAP HANA 数据库中的监控视图的 SAP HANA 监控指标缺失,并且您可以在 Google Cloud 的 Agent for SAP 日志中看到以下错误:

{sql: Scan error on column index 0, name \"MEM_USED\": converting NULL to int64 is unsupported"}

原因:您在代理的配置文件中为 hana_monitoring_configuration.hana_instances.user 参数指定的 SAP HANA 数据库用户无权读取 SAP HANA 数据库中的监控视图。因此,代理发送到监控视图的查询不会返回任何数据。

解决方法:如需解决此问题,请在 SAP HANA 数据库中向指定数据库用户授予 CATALOG READ 系统特权或 MONITORING 角色。如需授予此特权,请使用管理员用户(例如 SYSTEM)运行 GRANT 语句。例如:

  • 如需授予 MONITORING 角色,请运行以下命令:

    GRANT MONITORING TO DB_USERNAME
  • 如需授予 CATALOG READ 系统特权,请运行以下命令:

    GRANT CATALOG READ TO DB_USERNAME

    DB_USERNAME 替换为您在代理配置文件中为 hana_monitoring_configuration.hana_instances.user 参数指定的 SAP HANA 数据库用户名。如需了解此配置参数,请参阅配置参数

获取 Google Cloud 的 Agent for SAP 支持

如果您在解决 Google Cloud 的 Agent for SAP 的问题时需要帮助,请收集所需的诊断信息并与 Cloud Customer Care 联系。如需了解详情,请参阅 Google Cloud 的 Agent for SAP 诊断信息