使用 App Engine 设置服务器端代码植入

本指南介绍了如何完成以下操作:

  • 在 Google Cloud Platform (GCP) App Engine 上配置代码植入服务器。
  • 升级代码植入服务器以处理实时流量。
  • 增加或减少运行 Google 跟踪代码管理器容器的服务器数量。
  • 在配置服务器后及时更新代码植入服务器的版本。

前提条件

  1. 您需要有一个 GCP 账号。如果没有,请创建一个新的 GCP 账号。
  2. 您需要有一个 GCP 结算账号。如果没有,请创建一个 GCP 结算账号(需要拥有 Billing Account Creator 角色)。
  3. 您需要拥有 Project Creator 和 Billing Account User 角色。详细了解如何添加角色。

1. 预配服务器

若要在 App Engine 实例上创建新的代码植入服务器,您需要执行以下操作:

  • 在跟踪代码管理器中创建新的服务器容器
  • 创建新的 Google Cloud 项目 (GCP)
  • 预配新的 App Engine 代码植入服务器
  • 将新代码植入服务器的网址添加到跟踪代码管理器服务器容器中

创建 Google 跟踪代码管理器服务器容器

  1. 打开 Google 跟踪代码管理器。

  2. 在账号行中,依次点击溢出菜单 > 创建容器。

  3. 创建一个新的服务器容器。

  4. 点击“手动配置代码植入服务器”单选按钮。记下容器配置,您需要用它来配置服务器。

创建一个新的 GCP 项目

如需为代码植入服务器创建一个新的 GCP 项目,请执行以下操作:

  1. 打开 Google Cloud 控制台。

  2. 创建一个新的 GCP 项目。

  3. 为您的项目命名。为方便起见,建议您使用容器 ID 进行命名。此名称仅在 GCP 内使用。

  4. 记下 GCP 项目 ID,因为您需要用它来创建代码植入服务器。

配置一个新的代码植入服务器

如要创建代码植入服务器,请执行以下操作:

  1. 打开 Cloud Shell。

  2. 在 Cloud Shell 中设置 GCP 项目。将 project ID 替换为您之前记下的 GCP 项目 ID:

    gcloud config set project project ID
    
  3. 按照 Shell 脚本的指示,创建代码植入服务器。将部署类型设置为 testing。

    bash -c "$(curl -fsSL https://googletagmanager.com/static/serverjs/setup.sh)"
    

将代码植入服务器网址添加到跟踪代码管理器

  1. 打开 Google 跟踪代码管理器。

  2. 在管理 > 容器设置中,点击添加网址。如果您不知道服务器的网址,请在 Cloud Shell 中运行以下命令:

    gcloud app browse
    

    结果:您已设置代码植入服务器且为其采用了 testing 配置。现已可以对服务器端代码植入进行测试。

服务器的初始配置 (testing)

测试配置适用于通过发送少量测试流量并使用跟踪代码管理器中的“预览”功能对产品进行探索。在标准环境中,该配置是 App Engine F1 实例类,大多数情况下不会产生任何费用。

2. 在生产环境中使用 App Engine

在 production 配置中,每个服务器每月的费用约为 40 美元。在柔性环境中,每个服务器都是一个 App Engine 实例,具有 1 个 vCPU、0.5 GB 的内存及容量为 10 GB 的磁盘。

如需了解 App Engine 的计费方式以及如何配置结算提醒,请参阅管理 App Engine 费用。强烈建议您设置结算提醒。

建议您运行至少 3 个服务器,以降低服务器中断时数据丢失的风险。不过,您可以选择减少(或增加)运行的服务器数量。如果在 3-6 个服务器(默认值)的数量范围内自动扩缩,预计每秒可处理 50-200 个请求。性能因代码的数量及代码的用途而异。

如要配置代码植入服务器,请执行以下操作:

  1. 打开 Google Cloud Platform Cloud Shell。
  2. 在 Cloud Shell 中设置 Cloud Platform 项目。将 project ID 替换为您之前记下的 GCP 项目 ID:
    gcloud config set project project ID
  3. 如需为生产环境重新配置代码植入服务器,请运行下方的设置脚本,并执行以下任务:
    bash -c "$(curl -fsSL https://googletagmanager.com/static/serverjs/setup.sh)"
    1. 将部署类型更改为 production。
    2. 设置更多服务器以处理生产流量。建议至少使用 3 个服务器。

可选:停用日志记录

请求日志记录

默认情况下,App Engine 会记录收到的每个请求的相关信息(例如请求路径、查询参数等)。如果代码植入服务器每月处理大量请求(例如超过 100 万个),则这些日志消息可能会产生高昂的日志记录费用。若要减少或削减日志记录费用,我们建议您停用 App Engine 请求日志记录。

如需停用 App Engine 请求日志记录,请执行以下操作:

  1. 在 Google Cloud Platform 中,打开日志路由器。确保您正在查看的项目与您的容器 ID 一致:
    GCP 项目选择器的屏幕截图,其中显示了一个示例跟踪代码管理器容器 ID。
  2. 对于类型,请选择Cloud Logging 存储桶,名称则选择 _Default 行,再选择溢出菜单,然后点击修改接收器。
  3. 在接收器目标位置下,选择日志存储桶 _Default。
  4. 在选择要包含在接收器中的日志下另起一行。将以下规则添加到现有包含过滤器中:

    NOT LOG_ID("appengine.googleapis.com/nginx.request") AND NOT
    LOG_ID("appengine.googleapis.com/request_log")
    
  5. 如果还要停用来自负载均衡器的日志记录,请另起一行并在现有包含过滤器中输入以下规则:

    NOT LOG_ID("requests")
    
  6. 更新接收器以应用所做的更改。现在,App Engine 请求将从日志记录中排除。

  7. 确认 Logs Explorer 日志中未显示任何新请求。

控制台日志记录

容器中的代码植入服务器、客户端或代码可能会将消息记录到控制台中,而这可能产生日志记录费用。若要减少或削减日志记录费用,您可以停用不需要的控制台日志消息。

识别不需要的控制台日志:

  1. 在 GCP 中,打开 Logs Explorer。
  2. 查找源自您的代码的所有不需要的日志消息。例如:

    代码可能会发送以下日志:

    const logToConsole = require('logToConsole');
    
    logToConsole('Custom message: ' + data.param1);
    logToConsole('An important message to keep around!');
    data.gtmOnSuccess()
    

    在 textPayload 字段中查找相应的日志消息:
    GCP Logs Explorer 的屏幕截图,其中显示了示例日志。

若要停用控制台日志消息,请执行以下操作:

  1. 在 Google Cloud Platform 中,打开日志路由器。确保您正在查看的项目与您的容器 ID 一致:
    GCP 项目选择器的屏幕截图,其中显示了一个示例跟踪代码管理器容器 ID。
  2. 对于类型,请选择Cloud Logging 存储桶,名称则选择 _Default 行,再选择溢出菜单,然后点击修改接收器。
  3. 在接收器目标位置下,选择日志存储桶 _Default。
  4. 在选择要包含在接收器中的日志下另起一行。将以下规则添加到现有包含过滤器中:

    NOT textPayload:"Custom message:"
    

    对于控制台日志,请将 Custom message: 文本替换为您要停用的控制台日志中的子字符串。如需详细了解过滤器,请使用日志记录查询语言。

  5. 更新接收器以应用所做的更改。匹配的 logToConsole 消息应从日志记录中排除。

  6. 确认 Logs Explorer 中未显示新的控制台日志消息。

3. 将部署映射到自定义网域

默认的服务器端代码植入部署托管在 App Engine 网域上。建议您修改这项部署以使用您网站的子网域。

将您网站的子网域映射到代码植入服务器。

4. 将服务器网址添加到 Google 跟踪代码管理器

您已配置服务器,接下来需要确保 Google 跟踪代码管理器知道其应使用您的服务器。

  1. 打开 Google 跟踪代码管理器。

  2. 点击要指向代码植入服务器的服务器容器。

  3. 在管理标签页 > 容器设置中打开服务器容器的设置。

  4. 点击添加网址,然后粘贴您的服务器的网址。

  5. 点击保存,然后返回到您的工作区。

5. 验证

设置好代码植入服务器后,请确保其可按预期运行。在跟踪代码管理器工作区中,点击预览按钮。如果预览页面成功加载,表示所有设置都正确无误。

预览多个网址

如果您将多个网域映射到了单个代码植入服务器,请确保将每个网址都添加到容器设置中。

如果您提供了多个网址,则所有路径(域名后面的字符串)必须相同。

正常运行 无法正常运行
网址 1:example.com/abc
网址 2:example2.com/abc
网址 1:example.com/abc
网址 2:example2.com/def

如果您添加了多个网址,可通过预览按钮旁边的图标选择要预览的网址。

更新代码植入服务器的版本

新发布的代码植入服务器更新可修复安全漏洞且包含新功能。当跟踪代码管理器通知您进行更新时,建议至少对代码植入服务器的主要版本进行更新(例如,从版本 1.xx 升级到版本 2.xx)。

如需更新代码植入服务器,请使用您之前所用的设置重新运行设置脚本。现有设置属于默认设置。

如需更新代码植入服务器,请执行以下操作:

  1. 打开 Google Cloud Platform Cloud Shell。
  2. 在 Cloud Shell 中设置 Cloud Platform 项目。将 project ID 替换为您之前记下的 GCP 项目 ID:
    gcloud config set project project ID
  3. 使用您之前所用的设置运行设置脚本。现有设置属于默认设置。
    bash -c "$(curl -fsSL https://googletagmanager.com/static/serverjs/setup.sh)"

如需验证更新是否成功,请执行下列操作:

  1. 在服务器容器中,点击预览按钮启动新的调试会话,并在单独的标签页上发送请求。
  2. 在“摘要”中,选择控制台标签页,确保没有提示您更新代码植入服务器的消息。

跟踪代码管理器可能会显示要求您更新代码植入服务器的信息,最长持续到服务器成功更新后一天。不过,预览页面会显示与代码植入服务器版本相关的最新消息。

排查生产部署超时问题

运行设置脚本以创建或重新配置代码植入服务器时,相应脚本可能会超时。出现这种情况的原因有多种,最常见的两种为:

  1. 服务账号的权限有误 - Compute Engine 和 App Engine 服务账号负责部署并维护生产环境。默认情况下,系统已分别为二者预先配置了所需权限。但在某些情况下,组织的政策可能会导致所配置的权限有误。

    1. 转到 Google Cloud 控制台左侧导航栏中的 IAM 和管理页面。
    2. 查找 Compute Engine 服务账号 <project_number>-compute@developer.gserviceaccount.com 及 App Engine 服务账号 <project_name>@appspot.gserviceaccount.com。
    3. 两个服务账号都必须具有 Editor 角色。如果其中一个账号没有 Editor 角色,请更新相应角色,具体操作为:依次点击相应账号右侧的铅笔图标 > 现有角色的下拉菜单,向上滚动到顶部,然后依次点击 Project > Editor。
  2. 配额不足 - 生产环境的部署会消耗 Compute Engine 配额。如果项目没有足够的配额,尝试配置资源时可能会遇到部署超时。

    1. 转到 Google Cloud 控制台左侧导航栏中的 IAM 和管理页面,然后点击左侧导航栏中的配额标签页。
    2. 在页面顶部附近,点击过滤表格文本框,然后输入 Compute Engine API。点击出现的唯一结果。
    3. 验证是否所有配额都在限额范围内或都有绿色对勾标记。
    4. 找到并点击 CPU。验证当前使用量以及所部署的实例数是否仍低于部署区域的限额。