使用 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。验证当前使用量以及所部署的实例数是否仍低于部署区域的限额。