1. 简介
Eventarc 让您可以轻松地将 Google Cloud 服务与各种来源的事件相连接。您可以用它来构建事件驱动型架构,其中微服务是松散耦合和分布式的。它还负责事件提取、传送、安全性、授权和错误处理,从而提高开发者的敏捷性和应用弹性。
Datadog 是一个适用于云应用的监控和安全平台。它汇集了端到端跟踪记录、指标和日志,可让您的应用、基础架构和第三方服务可观测。
Workflows 是一个全代管式编排平台,可按照您定义的顺序(称为工作流)执行服务。这些工作流可以结合使用托管在 Cloud Run 或 Cloud Functions 上的服务、Google Cloud 服务(例如 Cloud Vision AI 和 BigQuery)以及任何基于 HTTP 的 API。
在第一个 Codelab 中,您学习了如何使用 Eventarc 将 Datadog 监控提醒路由到 Google Cloud。在第二个 Codelab 中,您将学习如何使用 Workflows 响应 Datadog 监控提醒。具体而言,您将创建 2 个 Compute Engine 虚拟机,并使用 Datadog 监控器监控它们。删除其中一个虚拟机后,您会收到 Datadog 通过 Eventarc 发送到 Workflows 的提醒。接着,Workflows 会重新创建已删除的虚拟机,将正在运行的虚拟机数量恢复为 2 个。
学习内容
- 如何启用 Datadog 的 Google Cloud 集成。
- 如何创建工作流以检查和创建 Compute Engine 虚拟机。
- 如何使用 Eventarc 将 Datadog 监控提醒与 Workflows 相关联。
- 如何创建 Datadog 监控并在虚拟机删除时发出提醒。
2. 设置和要求
自定进度的环境设置
- 登录 Google Cloud 控制台,然后创建一个新项目或重复使用现有项目。如果您还没有 Gmail 或 Google Workspace 账号,则必须创建一个。
- 项目名称是此项目参与者的显示名称。它是 Google API 尚未使用的字符串,您可以随时对其进行更新。
- 项目 ID 在所有 Google Cloud 项目中必须是唯一的,并且不可变(一经设置便无法更改)。Cloud Console 会自动生成一个唯一字符串;通常情况下,您无需关注该字符串。在大多数 Codelab 中,您都需要引用项目 ID(它通常标识为
PROJECT_ID
),因此如果您不喜欢某个 ID,请再生成一个随机 ID,还可以尝试自己创建一个,并确认是否可用。然后,项目创建后,ID 会处于“冻结”状态。 - 第三个值是一些 API 使用的项目编号。如需详细了解所有这三个值,请参阅文档。
- 接下来,您需要在 Cloud Console 中启用结算功能,才能使用 Cloud 资源/API。运行此 Codelab 应该不会产生太多的费用(如果有费用的话)。要关闭资源以避免产生超出本教程范围的费用,请按照此 Codelab 末尾提供的任何“清理”说明操作。Google Cloud 的新用户符合参与 $300 USD 免费试用计划的条件。
启动 Cloud Shell
虽然可以通过笔记本电脑对 Google Cloud 进行远程操作,但在此 Codelab 中,您将使用 Google Cloud Shell,这是一个在云端运行的命令行环境。
在 Google Cloud 控制台 中,点击右上角工具栏中的 Cloud Shell 图标:
预配和连接到环境应该只需要片刻时间。完成后,您应该会看到如下内容:
这个虚拟机已加载了您需要的所有开发工具。它提供了一个持久的 5GB 主目录,并且在 Google Cloud 中运行,大大增强了网络性能和身份验证功能。只需一个浏览器,即可完成本实验中的所有工作。
设置 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 \ workflows.googleapis.com \ workflowexecutions.googleapis.com
3. 验证 Datadog 频道
确保您在第一个 Codelab 中创建的 Datadog 渠道处于活动状态。在 Cloud Shell 中,运行以下命令以检索该渠道的详细信息:
CHANNEL_NAME=datadog-channel 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: ACTIVE uid: 183d3323-8cas-4e95-8d72-7d8c8b27cf9e updateTime: '2022-03-09T09:53:48.290217299Z'
您还可以在 Google Cloud 控制台中查看渠道状态:
通道状态应为 ACTIVE
。如果没有,请返回第一个 Codelab,并按照步骤使用 Datadog 创建和激活频道。
4. 启用 Datadog 的 Google Cloud 集成
如需使用 Datadog 监控项目,您需要启用 Datadog 所需的 API,创建一个服务账号,并将该服务账号关联到 Datadog。
为 Datadog 启用 API
gcloud services enable compute.googleapis.com \ cloudasset.googleapis.com \ monitoring.googleapis.com
创建服务账号
Datadog 的 Google Cloud 集成使用服务账号调用 Cloud Logging API,以从 Compute Engine 实例收集节点级指标。
为 Datadog 创建服务账号:
DATADOG_SA_NAME=datadog-service-account gcloud iam service-accounts create $DATADOG_SA_NAME \ --display-name "Datadog Service Account"
通过授予以下 IAM 角色,使 Datadog 服务账号可以收集指标、标记、事件和用户标签:
DATADOG_SA_EMAIL=$DATADOG_SA_NAME@$PROJECT_ID.iam.gserviceaccount.com gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$DATADOG_SA_EMAIL \ --role roles/cloudasset.viewer gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$DATADOG_SA_EMAIL \ --role roles/compute.viewer gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$DATADOG_SA_EMAIL \ --role roles/monitoring.viewer
创建并下载服务账号密钥。您需要该密钥文件才能完成与 Datadog 的集成。
在您的 Cloud Shell 主目录中创建服务账号密钥文件:
gcloud iam service-accounts keys create ~/key.json \ --iam-account $DATADOG_SA_EMAIL
在 Cloud Shell 中,点击 More ⁝
,然后选择 Download File
。在 File path
字段中,输入 key.json
。如需下载密钥文件,请点击 Download
。
将服务账号连接到 Datadog
在您的 Datadog 账号中,前往 Integrations
部分,然后搜索 Google Cloud
集成功能块:
将鼠标悬停在 Google Cloud Platform
上即可转到 Install
页面:
在 Upload Private Key File
部分中上传服务账号密钥,然后点击 Install Integration
以安装集成:
完成集成后,Datadog 会自动在 Dashboards
下创建多个与 Google Cloud 相关的信息中心:
5. 创建 Compute Engine 虚拟机
接下来,创建一些 Compute Engine 虚拟机 (VM)。您将使用 Datadog 监控工具监控这些虚拟机,并使用 Google Cloud 中的工作流响应 Datadog 提醒。
创建 2 个 Compute Engine 虚拟机:
gcloud compute instances create instance-1 instance-2 --zone us-central1-a
大约一分钟后,您就可以在 Cloud 控制台中看到创建并运行的虚拟机。一段时间(通常是 10 分钟)后,您应该还会在 Datadog 的 Dashboards
下的 Google Compute Engine
信息中心中看到这些虚拟机:
6. 创建工作流
现在您有 2 个虚拟机正在运行,请创建一个工作流来响应 Datadog 监控程序的提醒。该工作流可以根据您的需要非常复杂,但在本例中,工作流将检查正在运行的虚拟机实例数,如果数量低于 2,则会创建新的虚拟机实例,以确保始终有 2 个虚拟机在运行。
创建一个包含以下内容的 workflow-datadog2.yaml
文件:
main: params: [event] steps: - init: assign: - projectId: ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")} - zone: "us-central1-a" - minInstanceCount: 2 - namePattern: "datadog-instance-##" - listInstances: call: googleapis.compute.v1.instances.list args: project: ${projectId} zone: ${zone} result: listResult - getInstanceCount: steps: - initInstanceCount: assign: - instanceCount: 0 - setInstanceCount: switch: - condition: ${"items" in listResult} steps: - stepA: assign: - instanceCount: ${len(listResult.items)} - findDiffInstanceCount: steps: - assignDiffInstanceCount: assign: - diffInstanceCount: ${minInstanceCount - instanceCount} - logDiffInstanceCount: call: sys.log args: data: ${"instanceCount->" + string(instanceCount) + " diffInstanceCount->" + string(diffInstanceCount)} - endEarlyIfNeeded: switch: - condition: ${diffInstanceCount < 1} next: returnResult - bulkInsert: call: googleapis.compute.v1.instances.bulkInsert args: project: ${projectId} zone: ${zone} body: count: ${diffInstanceCount} namePattern: ${namePattern} instanceProperties: machineType: "e2-micro" disks: - autoDelete: true boot: true initializeParams: sourceImage: projects/debian-cloud/global/images/debian-10-buster-v20220310 networkInterfaces: - network: "global/networks/default" result: bulkInsertResult - returnResult: return: ${bulkInsertResult}
请注意,工作流程是接收事件作为参数。此事件来自通过 Eventarc 进行 Datadog 监控。收到事件后,工作流会检查正在运行的实例数,并根据需要创建新的虚拟机实例。
部署工作流:
WORKFLOW_NAME=workflow-datadog2 gcloud workflows deploy $WORKFLOW_NAME \ --source workflow-datadog2.yaml \ --location $REGION
工作流已部署,但尚未运行。收到 Datadog 提醒时,该事件将由 Eventarc 触发器执行。
7. 创建 Eventarc 触发器
现在,您可以使用 Eventarc 触发器将来自 Datadog 提供程序的事件连接到 Workflows。您将使用在第一个 Codelab 中设置的渠道和服务账号。
使用 Datadog 渠道、事件类型以及工作流目的地创建触发器:
PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)') gcloud eventarc triggers create datadog-trigger2 \ --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-trigger2 TYPE: datadog.v1.alert DESTINATION: Workflows: workflow-datadog2 ACTIVE: Yes
8. 创建 Datadog 监控
现在,您将创建一个 Datadog 监控,并将其连接到 Eventarc。
监控器会检查正在运行的 Compute Engine 虚拟机数量,并在数量低于 2 时发出提醒。
如需在 Datadog 中创建监控,请登录 Datadog。将鼠标悬停在主菜单中的 Monitors
上,然后点击子菜单中的 New Monitor
。监控类型有很多种。选择 Metric
监控类型。
在 New Monitor
页面中,创建一个具有以下内容的监控:
- 选择检测方法:
Threshold
。 - 定义指标:从(所有)
sum by
(所有)gcp.gce.instance.is_running
- 设置提醒条件:
- 当指标在过去
5 minutes
内below
达到阈值at least once
时触发 - 提醒阈值:
< 2
- 通知您的团队:
@eventarc_<your-project-id>_<your-region>_<your-channel-name>
- 监控名称示例:
Compute Engine instances < 2
现在,点击底部的 Create
以创建监控工具。
9. 测试监控和触发器
为了测试 Datadog 监控程序、Eventarc 触发器以及最终的工作流,您需要删除其中一个虚拟机:
gcloud compute instances delete instance-2 --zone us-central1-a
几秒钟后,您应该会在 Google Cloud 控制台中看到该实例被删除。
此项更改需要一定的延迟才能显示在 Datadog 中。一段时间(通常是 10 分钟)后,您应该会在 Datadog 中看到监控器,以检测此问题并在 Manage Monitors
部分下发出提醒:
Datadog 监控提醒后,您应该会看到该提醒通过 Eventarc 转至 Workflows。如果您检查 Workflows 的日志,应该会看到 Workflows 检查当前实例数和预期实例数之间的差异:
2022-03-28 09:30:53.371 BST instanceCount->1 diffInstanceCount->1
它会创建前缀为 datadog-instance-##
的新虚拟机实例来响应该提醒。
最终,您的项目仍然有 2 个虚拟机,一个是最初创建的,另一个是在 Datadog 提醒出现后由 Workflows 创建的!
10. 恭喜
恭喜,您已完成此 Codelab!
所学内容
- 如何启用 Datadog 的 Google Cloud 集成。
- 如何创建工作流以检查和创建 Compute Engine 虚拟机。
- 如何使用 Eventarc 将 Datadog 监控提醒与 Workflows 相关联。
- 如何创建 Datadog 监控并在虚拟机删除时发出提醒。