提醒:Pub/Sub 主题出现基于日志的错误

1. 简介

上次更新时间:2023 年 6 月 21 日

针对可用性发出基于日志的错误的提醒

基于日志的提醒可用于通过监控日志中的特定事件或模式来确定应用的可用性*。*通过在服务中断或其他面向用户的问题收到提醒后,您可以采取相应措施,最大限度地降低对用户和客户的影响。

尽管拨测提供可用性的一般概况,但更为准确的做法是,使用来自日志的错误消息作为更具体的不可用类型的指标,并了解遇到问题的用户比例。

错误可能由多种原因引起,从用户错误到系统维护、升级,甚至是系统外部因素(如恶劣天气)。提醒的关键不是尝试预测所有可能的原因,而是选择一些关键症状,作为问题排查的起点。

将 Pub/Sub 主题用作提醒通知渠道

Pub/Sub 主题可用作 Google Cloud Monitoring 通知渠道,以向 Pub/Sub 订阅发送提醒。这样,您就可以将 Cloud Monitoring 提醒与其他系统(包括第三方通知服务)集成。

如需将 Pub/Sub 主题用作通知渠道,您首先需要创建一个 Pub/Sub 主题和一个 Pub/Sub 订阅。然后,您需要创建一个使用 Pub/Sub 主题作为目标位置的 Cloud Monitoring 通知渠道。

触发提醒时,Cloud Monitoring 会向 Pub/Sub 主题发送消息。然后,Pub/Sub 订阅的订阅者可以处理该消息并采取适当的操作。

构建内容

在此 Codelab 中,您将部署一个应用,创建一个 Pub/Sub 主题,并创建一个基于日志的提醒,用于检查应用的特定部分是否存在错误,并将 Pub/Sub 主题用作通知渠道。

学习内容

  • 如何创建 Pub/Sub 主题
  • 如何创建基于日志的提醒

此 Codelab 主要介绍如何创建错误提醒。对于不相关的概念和应用代码,我们仅会略作介绍,只是为了方便您复制和粘贴。

所需条件

  • 有权执行以下操作的 Google Cloud 账号:
  • 部署 Cloud Run 应用
  • 创建 Pub/Sub 主题
  • 创建提醒

2. 准备工作

选择或创建 Google Cloud 项目

如需选择现有项目,请使用下拉菜单:

b35bf95b8bf3d5d8.png

如需在 Google Cloud 中创建新项目,您可以按照以下步骤操作:

  1. 前往 Google Cloud Platform Console
  2. 点击 Create Project 按钮。
  3. 为您的项目输入名称。
  4. 为您的项目选择结算账号。
  5. 点击创建按钮。

系统将创建您的项目,并将您转到项目信息中心。接下来,您就可以开始使用 Google Cloud 服务了。

以下是有关每个步骤的一些其他详细信息:

  • 名称:项目的名称在组织中必须是唯一的。
  • 结算账号:您可以使用现有结算账号,也可以创建新账号。
  • 创建:输入所有所需信息后,点击创建按钮创建项目。

如需了解详情,请参阅有关创建项目的 Google Cloud 文档

3. 部署 API 应用

示例应用或 API 是关于什么的?

我们的应用是一个简单的 Inventory API 应用,公开了 REST API 端点,其中包含一些操作,可用于列出商品目录商品并获取具体的商品库存数量。

部署 API 并假设其托管在 https://<somehost> 后,我们即可按如下方式访问 API 端点:

https://<somehost>/inventory

系统将列出所有具有现有库存水平的产品项。

https://<somehost>/inventory/{productid}

这将为该商品提供一个记录,其中包含商品 ID 和现有库存水平。

返回的响应数据采用 JSON 格式。

注意:此 API 应用仅用于演示目的,不代表安全可靠的 API 实现。它旨在为我们提供一个快速应用,用于探索实验的主要用途,即 Google Cloud 运维套件。

示例数据和 API 请求/响应

为简单起见,应用并非由后端的数据库提供支持。其中包含 3 个示例产品 ID 及其现有库存水平。

产品 ID

现货库存水平

I-1

10

I-2

20

I-3

30

示例 API 请求和响应如下所示:

API 请求

API 响应

https://&lt;somehost&gt;/inventory

[ { &quot;I-1&quot;: 10, &quot;I-2&quot;: 20, &quot;I-3&quot;: 30 }]

https://&lt;somehost&gt;/inventory/I-1

{ &quot;productid&quot;: &quot;I-1&quot;, &quot;qty&quot;: 10}

https://&lt;somehost&gt;/inventory/I-2

{ &quot;productid&quot;: &quot;I-2&quot;, &quot;qty&quot;: 20}

https://&lt;somehost&gt;/inventory/I-200

{ &quot;productid&quot;: I-200, &quot;qty&quot;: -1}

克隆代码库

虽然可以通过笔记本电脑对 Google Cloud 进行远程操作,但在此 Codelab 中,您将使用 Google Cloud Shell,这是一个在云端运行的命令行环境。

在 GCP 控制台中,点击右上角工具栏上的 Cloud Shell 图标:

bce75f34b2c53987.png

预配和连接到环境应该只需要片刻时间。完成后,您应该会看到如下内容:

f6ef2b5f13479f3a.png

这个虚拟机装有您需要的所有开发工具。它提供了一个持久的 5 GB 主目录,并且在 Google Cloud 中运行,大大增强了网络性能和身份验证功能。只需使用浏览器,您就可以完成本实验中的所有工作。

设置 gcloud

在 Cloud Shell 中,设置您的项目 ID 并将其保存为 PROJECT_ID 变量。

PROJECT_ID=[YOUR-PROJECT-ID]

gcloud config set project $PROJECT_ID

现在,执行以下命令:

$ git clone https://github.com/rominirani/cloud-code-sample-repository.git

这将在此文件夹中创建一个名为 cloud-code-sample-repository 的文件夹。

(可选)在 Cloud Shell 上运行应用

您可以按照以下步骤在本地运行应用:

  1. 从终端中,通过以下命令导航到该 API 的 Python 版本:

$ cd cloud-code-sample-repository

$ cd python-flask-api

  1. 在终端中,输入以下命令(在撰写本文时,Cloud Shell 已安装 Python 3.9.x,我们将使用默认版本。如果您打算在笔记本电脑本地运行,可以使用 Python 3.8+:

$ python app.py

  1. 您可以运行以下命令,以在本地启动 Python 服务器。

1f798fbddfdc2c8e 46edf454cc70c5a6

点击“在端口 8080 上预览”。5. 这将打开一个浏览器窗口。系统会显示 404 错误,这没关系。修改网址,并将其更改为在主机名后面仅包含 /inventory。

例如:在我的机器上类似,如下所示:

https://8080-cs-557561579860-default.cs-asia-southeast1-yelo.cloudshell.dev/inventory

系统随即会显示广告资源项列表,如前所述:

709d57ee2f0137e4

  1. 现在您可以转到终端并按 Ctrl-C 来停止服务器

部署应用

现在,我们会将此 API 应用部署到 Cloud Run。该流程涉及利用 gcloud 命令行客户端运行命令以将代码部署到 Cloud Run

从终端发出以下 gcloud 命令:

$ gcloud run deploy --source .

这会询问您多个问题,其中一些要点如下:

  1. 服务名称 (python-flask-api):采用此默认值,或者选择类似于 my-inventory-api 的名称
  2. 项目 [613162942481] 未启用 API [run.googleapis.com]。要启用并重试(这将需要几分钟)吗?(是/否)?是
  3. 请指定区域:选择 31 (us-west-1)
  4. 项目 [613162942481] 未启用 API [artifactregistry.googleapis.com]。要启用并重试(这将需要几分钟)吗?(是/否)?是
  5. 从源代码部署需要使用 Artifact Registry Docker 代码库来存储构建的容器。系统将在区域 [us-west1] 中创建名为 [cloud-run-source-deploy] 的代码库。
  6. 是否要继续(是/否)?是
  7. 是否允许对 [my-inventory-api] 进行未经身份验证的调用 (y/N)?是

最终,这将启动以下流程:获取源代码,对其进行容器化,将其推送到 Artifact Registry,然后部署 Cloud Run 服务 + 修订版本。请耐心完成该过程(可能需要 3-4 分钟),您应该会看到系统向您显示的服务网址。

运行示例如下所示:

87ba8dbf88e8cfa4

测试应用

现在,我们已将应用部署到 Cloud Run,您可以按如下方式访问 API 应用:

  1. 记下上一步中的服务网址。例如,在我的设置中,它显示为 https://my-inventory-api-bt2r5243dq-uw.a.run.app。将其命名为 <SERVICE_URL>
  2. 打开浏览器并访问以下 3 个 API 端点网址:
  3. <SERVICE_URL>/inventory
  4. <SERVICE_URL>/inventory/I-1
  5. <SERVICE_URL>/inventory/I-100

它应该符合我们在前面的 API 请求和响应示例部分提供的规范。

从 Cloud Run 获取服务详情

我们将 API 服务部署到了 Cloud Run,这是一个无服务器计算环境。我们可以随时通过 Google Cloud 控制台访问 Cloud Run 服务。

从主菜单导航到 Cloud Run。系统将显示您在 Cloud Run 中运行的服务的列表。您应该会看到刚刚部署的服务。根据您选择的名称,您应该会看到如下内容:

2633965c4bc957cc

点击 Service 名称以查看详细信息。示例详情如下所示:

33042ae64322ce07

注意网址,该网址只是一个服务网址,您可以在浏览器中插入该网址,然后访问我们刚刚部署的 Inventory API。查看指标和其他详细信息。

现在,我们从 Google Cloud Operations Suite 开始。

4. 创建 Pub/Sub 主题以接收提醒通知

如需创建 Pub/Sub 主题,您可以在 Google Cloud 控制台中按照以下步骤操作:

  1. 在搜索框中搜索 Pub/Sub,然后导航到 Pub/Sub。935028bd8f6328ef
  2. 如果您尚未进入主题标签页,请点击该标签页。7fd8bf91386a88fd.png
  3. 点击创建主题按钮。cd9d197f9023c41b.png
  4. 为您的主题输入一个容易识别的名称。

173f313b4a3c4934

  1. 点击创建按钮。ca9a02477da21a44.png
  2. 使用复制图标按钮复制主题名称。在下一部分,您将需要用到该文件。

20848252ee83df93

5. 创建针对错误的提醒政策

浏览错误日志

如需查看应用的错误日志,请执行以下操作:

点击日志记录标签页。

系统会显示一个日志界面,您可以在其中专门选择/取消选择各种资源(项目、Google Cloud 资源、服务名称等)以及日志级别,以便根据需要过滤日志消息。

6605b68395185b89

通过提供不属于 I-1、I-2 和 I-3 范围的产品 ID,模拟向 Inventory Service 发出的几项无效请求。例如:不正确的请求:

https://&lt;SERVICE_URL&gt;/inventory/I-999

现在,如果在查询中提供了不正确的商品 ID,我们将搜索由我们的 API 生成的所有警告。

针对错误创建自定义基于日志的提醒政策

假设我们想留意应用的某些部分是否出现了非常具体的错误消息。假设我们在查找商品 ID 时发现错误较多,此问题是许多潜在问题的征兆,包括不良链接、数据库不一致或枚举我们的网站的漫游器。虽然很难或无法想出每个潜在原因,但应用发送此消息一次是我们需要注意的高级别问题。为了收到提醒,我们需要根据错误日志中的数据创建一项政策。

  1. 在查询框中,插入以下查询参数:

resource.type=&quot;cloud_run_revision&quot;

textPayload =~“应用中的警告:收到错误 productid 的商品目录请求”

代码应如下所示:

f672154cfebf0051.png

  1. 点击“运行查询”。系统随即会显示收到的所有请求以及存在此问题的请求。

77c190e3a2fab6bf.png

  1. 如需将上述内容转换为提醒,请点击日志浏览器中查询字段正下方的创建提醒按钮:

4cd3fcf142189376

  1. 这将打开用于创建基于日志的提醒政策的表单。

b82446854bad87fc.png

  1. 对要包含在提醒中的日志执行初始查询:

resource.type="cloud_run_revision"

textPayload =~ "WARNING in app: Received inventory request for incorrect productid"

764227db73ec3de6.png

  1. 设置通知频率和突发事件时长。在此示例中,您可以使用每个变量的最小值:

bb3d96448ec998a1.png

  1. 最后,对于“应该通知哪些人?”部分,选择您之前创建的 Pub/Sub 通知渠道:

3593c48c29d4b76c

  1. 点击保存。要查看和管理提醒政策,请访问提醒页面,然后在“政策”下查看:ca08ea380fb37c91.png

6. 恭喜

恭喜,您已成功将拨测配置为向 Pub/Sub 发送提醒!