使用 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.png

a99b7ace416376c4.png

bd84a6d3004737c5.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 触发器和工作流。