使用 Eventarc 将 Datadog 监控提醒路由到 Google Cloud(第 1 部分)

1. 简介

cb762f29e9183a3f.png 3c7ca8629bc25d9c.png

借助 Eventarc,您可以轻松地将 Google Cloud 服务与来自各种来源的事件相关联。它可让您构建微服务松散耦合且分布式的事件驱动型架构。它还会为您处理事件提取、传送、安全、授权和错误处理,从而提高开发者的敏捷性和应用弹性。

Datadog 是一个云应用监控和安全平台。它将端到端跟踪记录、指标和日志整合在一起,让您的应用、基础设施和第三方服务可观测。

在此第一个 Codelab 中,您将学习如何使用 Eventarc 将简单的 Datadog 监控提醒路由到 Google Cloud。

学习内容

  • 如何发现 Datadog 提供商。
  • 如何为 Datadog 提供方设置渠道。
  • 如何创建用于记录事件的工作流。
  • 如何使用渠道创建 Eventarc 触发器。
  • 如何创建 Datadog 监控器。
  • 如何测试 Datadog 监控器、Eventarc 触发器和工作流。

2. 设置和要求

自定进度的环境设置

  1. 登录 Google Cloud 控制台,然后创建一个新项目或重复使用现有项目。如果您还没有 Gmail 或 Google Workspace 账号,则必须创建一个。

b35bf95b8bf3d5d8.pnga99b7ace416376c4.pngbd84a6d3004737c5.png

  • 项目名称是此项目参与者的显示名称。它是 Google API 尚未使用的字符串。您可以随时更新。
  • 项目 ID 在所有 Google Cloud 项目中必须是唯一的,并且不可变(一经设置便无法更改)。Cloud 控制台会自动生成一个唯一字符串;通常情况下,您无需关注该字符串。在大多数 Codelab 中,您都需要引用项目 ID(通常用 PROJECT_ID 标识)。如果您不喜欢生成的 ID,可以再随机生成一个 ID。或者,您也可以尝试自己的项目 ID,看看是否可用。完成此步骤后便无法更改该 ID,并且此 ID 在项目期间会一直保留。
  • 此外,还有第三个值,即部分 API 使用的项目编号,供您参考。如需详细了解所有这三个值,请参阅文档。
  1. 接下来,您需要在 Cloud 控制台中启用结算功能,以便使用 Cloud 资源/API。运行此 Codelab 应该不会产生太多的费用(如果有费用的话)。若要关闭资源以避免产生超出本教程范围的结算费用,您可以删除自己创建的资源或删除整个项目。Google Cloud 的新用户符合参与 $300 USD 免费试用计划的条件。

启动 Cloud Shell

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

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

55efc1aaa7a4d3ad.png

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

7ffe5cbb04455448.png

这个虚拟机已加载了您需要的所有开发工具。它提供了一个持久的 5 GB 主目录,并且在 Google Cloud 中运行,大大增强了网络性能和身份验证功能。您在此 Codelab 中的所有工作都可以在浏览器中完成。您无需安装任何程序。

设置 gcloud

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

此外,还要将 REGION 变量设置为 us-central1。这是您稍后将在其中创建资源的区域。

PROJECT_ID=[YOUR-PROJECT-ID]
REGION=us-central1
gcloud config set core/project $PROJECT_ID

启用 API

启用所有必要的服务:

gcloud services enable \
  eventarc.googleapis.com \
  eventarcpublishing.googleapis.com \
  workflows.googleapis.com \
  workflowexecutions.googleapis.com

3. 发现 Datadog 提供程序

Eventarc 提供方是服务或实体,可直接将事件发送到 Google Cloud,然后路由到项目。第三方提供商(例如 Datadog)是通过 Eventarc 与 Google Cloud 集成的非 Google Cloud 提供商。

在 Cloud Shell 中,运行以下命令以查看 Google Cloud 和第三方提供商的列表:

gcloud eventarc providers list

下表列出了 Google Cloud 和第三方提供商以及它们的服务覆盖范围:

NAME: storage.googleapis.com
LOCATION: asia

NAME: cloudaudit.googleapis.com
LOCATION: asia

NAME: pubsub.googleapis.com
LOCATION: asia

...

您可以使用以下命令将列表范围缩小到第三方提供商:

gcloud eventarc providers list --filter='eventTypes.type!~^google*'

您应该会在列表中看到 Datadog:

NAME: datadog
LOCATION: us-central1

您还可以描述 Datadog 提供方,以查看其支持的事件:

gcloud eventarc providers describe datadog --location $REGION

displayName: Datadog
eventTypes:
- type: datadog.v1.alert
name: projects/project-id/locations/us-central1/providers/datadog

4. 设置频道

您需要设置渠道才能将项目与提供商集成。这包括创建渠道、检索渠道详细信息并将这些详细信息发送给提供方。提供方初始化与渠道的连接后,便可以开始向您的项目发送事件。

创建频道

您可以使用 gcloud 为 Datadog 提供商创建渠道:

CHANNEL_NAME=datadog-channel
gcloud eventarc channels create $CHANNEL_NAME \
   --provider datadog \
   --location $REGION

您还可以通过 Google Cloud 控制台中 Eventarc 页面的“渠道”部分创建渠道:

d03a7173b25e5ea6.png

检索渠道详情

创建渠道后,从 gcloud 中检索渠道的详细信息:

gcloud eventarc channels describe $CHANNEL_NAME --location $REGION

输出应类似如下所示:

activationToken: so5g4Kdasda7y2MSasdaGn8njB2
createTime: '2022-03-09T09:53:42.428978603Z'
name: projects/project-id/locations/us-central1/channels/datadog-channel
provider: projects/project-id/locations/us-central1/providers/datadog
pubsubTopic: projects/project-id/topics/eventarc-channel-us-central1-datadog-channel-077
state: PENDING
uid: 183d3323-8cas-4e95-8d72-7d8c8b27cf9e
updateTime: '2022-03-09T09:53:48.290217299Z'

同样,您也可以在 Google Cloud 控制台中查看渠道:

80d8b2b6a46cb4c5.png

渠道状态表示渠道的状态。可以是下列选项之一:

  • PENDING - 渠道已成功创建,并且有可用于与提供方建立连接的激活令牌。如需将频道的状态从 PENDING 更改为 ACTIVE,必须将令牌提供给提供方,并在频道创建后的 24 小时内使用该令牌连接频道。
  • ACTIVE - 频道已成功与提供商相关联。ACTIVE 渠道已准备好接收和路由来自提供方的事件。
  • INACTIVE - 相应渠道无法接收事件,也无法重新激活。提供商已与此渠道断开连接,或者渠道激活令牌已过期,且提供商未连接。如需重新与提供商建立连接,您必须为该提供商创建新频道。

激活令牌是有时间限制的一次性令牌,用于在提供方和订阅方项目之间创建连接。只有在渠道创建过程中选择的特定提供商可以使用该令牌。令牌在频道创建后 24 小时内有效。24 小时后,频道会变为 INACTIVE。

向提供商发送渠道详细信息

您需要将以下渠道详细信息发送给 Datadog 提供商:

  • 频道名称(例如,projects/project-id/locations/us-central1/channels/datadog-channel)
  • 激活令牌(例如 so5g4Kdasda7y2MSasdaGn8njB2)

登录 Datadog,前往集成页面,并确保已安装 Google Eventarc 集成:

9736bd517e1fa19a.png

在 Google Eventarc 的配置部分中,输入完整的频道名称和激活令牌:

a17f522075cdd92e.png

现在,您应该会在渠道列表中看到该渠道,几秒钟后,您还应该会在 Google Cloud 控制台中看到该渠道变为有效状态:

8399d528ccbd4c20.png

现在,您可以使用频道了!

5. 创建工作流

您需要在 Google Cloud 中设置一个目标来接收来自提供方的事件。Eventarc 支持多种事件目的地,例如 Cloud Run、Workflows、Kubernetes 服务。在这种情况下,部署一个工作流来简单地记录收到的事件。

创建一个包含以下内容的 workflow-datadog1.yaml 文件:

main:
  params: [event]
  steps:
  - logStep:
      call: sys.log
      args:
        data: ${event}

请注意,工作流正在接收一个事件作为参数。此事件将通过 Eventarc 来自 Datadog 监控。收到事件后,工作流只会记录收到的事件。

部署工作流:

WORKFLOW_NAME=workflow-datadog1
gcloud workflows deploy $WORKFLOW_NAME \
  --source workflow-datadog1.yaml \
  --location $REGION

工作流已部署,但尚未运行。当收到 Datadog 提醒时,它将由 Eventarc 触发器执行。

6. 创建 Eventarc 触发器

现在,您可以使用 Eventarc 触发器将 Datadog 提供方中的事件连接到工作流。

配置服务账号

创建触发器时,您需要具有 eventarc.eventReceiver 角色的服务账号。您可以创建专用服务账号,也可以使用默认的计算服务账号。

为简单起见,请使用默认计算服务账号并授予 eventarc.eventReceiver 角色:

PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')

gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com \
    --role roles/eventarc.eventReceiver

创建触发器

创建具有 Datadog 渠道、事件类型和工作流目的地的触发器:

gcloud eventarc triggers create datadog-trigger1 \
  --location $REGION \
  --destination-workflow $WORKFLOW_NAME \
  --destination-workflow-location $REGION \
  --channel $CHANNEL_NAME \
  --event-filters type=datadog.v1.alert \
  --service-account $PROJECT_NUMBER-compute@developer.gserviceaccount.com

您可以列出触发器,以查看新创建的触发器是否处于有效状态:

gcloud eventarc triggers list --location $REGION

NAME: datadog-trigger1
TYPE: datadog.v1.alert
DESTINATION: Workflows: workflow-datadog1
ACTIVE: Yes

7. 创建 Datadog 监控器

现在,您将创建一个 Datadog 监控器并将其连接到 Eventarc。

它将是一个具有默认值的 Hello World 类型监控器。您将手动触发该脚本,以生成监控提醒,而监控提醒又会在 Google Cloud 中生成 Eventarc 事件。

如需在 Datadog 中创建监控器,请登录 Datadog。将光标悬停在主菜单中的 Monitors 上,然后点击子菜单中的 New Monitor。显示器类型有很多种。选择 Metric 监控器类型。

在 New Monitor 页面中,保留第 1 步和第 2 步的默认设置。

  • 在第 3 步中,将 Alert threshold 设置为 1
  • 在第 4 步中,将 Test monitor for Eventarc 设置为监控器名称,并将 Notify your team 设置为 @eventarc_<your-project-id>_<your-region>_<your-channel-name>

请勿关闭监控器页面,您将在下一步中测试监控器。

8. 测试监控器和触发器

如需测试 Datadog 监控器和 Eventarc 触发器,您需要手动触发监控器。

在监控器创建页面底部,点击 Test Notifications 按钮:

32ccf1cc47b01150.png

然后,点击 Run Test 按钮:

7f2ff70ec673007b.png

这应该会模拟监控器中的状态转换并触发 Eventarc 事件。

检查 workflow-datadog1 工作流。您应该会看到有新的执行:

adf7cd97ca2e8da7.png

查看执行的详细信息。您应该会在工作流的输入中以及日志中看到由监控提醒生成的 Datadog 事件类型 datadog.v1.alert:

dc78fd8460e5fc0e.png

9. 恭喜

恭喜,您已完成此 Codelab!您可以继续学习第二个 Codelab,了解如何使用工作流响应 Datadog 监控提醒。

所学内容

  • 如何发现 Datadog 提供商。
  • 如何为 Datadog 提供方设置渠道。
  • 如何创建用于记录事件的工作流。
  • 如何使用渠道创建 Eventarc 触发器。
  • 如何创建 Datadog 监控器。
  • 如何测试 Datadog 监控器、Eventarc 触发器和工作流。