1. Введение



Eventarc упрощает подключение сервисов Google Cloud к событиям из различных источников. Он позволяет создавать архитектуры, управляемые событиями, в которых микросервисы слабо связаны и распределены. Он также берет на себя обработку событий, их доставку, обеспечение безопасности, авторизацию и обработку ошибок, что повышает гибкость разработчиков и отказоустойчивость приложений.
Datadog — это платформа мониторинга и безопасности для облачных приложений. Она объединяет сквозные трассировки, метрики и журналы, делая ваши приложения, инфраструктуру и сторонние сервисы наблюдаемыми.
Workflows — это полностью управляемая платформа оркестровки, которая выполняет сервисы в порядке, определяемом вами, называемом рабочим процессом. Эти рабочие процессы могут объединять сервисы, размещенные на Cloud Run или Cloud Functions, сервисы Google Cloud, такие как Cloud Vision AI и BigQuery, а также любые API на основе HTTP.
В первом практическом занятии вы научились направлять оповещения мониторинга Datadog в Google Cloud с помощью Eventarc. Во втором практическом занятии вы узнаете, как реагировать на оповещения мониторинга Datadog с помощью Workflows. В частности, вы создадите 2 виртуальные машины Compute Engine и будете отслеживать их с помощью монитора Datadog. После удаления одной из виртуальных машин вы получите оповещение от Datadog в Workflows через Eventarc. В свою очередь, Workflows воссоздаст удаленную виртуальную машину, чтобы количество работающих виртуальных машин снова стало равным 2.
Что вы узнаете
- Как включить интеграцию Datadog с Google Cloud.
- Как создать рабочий процесс для проверки и создания виртуальных машин Compute Engine.
- Как подключить оповещения мониторинга Datadog к рабочим процессам с помощью Eventarc.
- Как создать монитор Datadog и получать оповещения об удалении виртуальных машин.
2. Настройка и требования
Настройка среды для самостоятельного обучения
- Войдите в консоль Google Cloud и создайте новый проект или используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .



- Название проекта — это отображаемое имя участников данного проекта. Это строка символов, не используемая API Google, и вы можете изменить её в любое время.
- Идентификатор проекта должен быть уникальным для всех проектов Google Cloud и неизменяемым (его нельзя изменить после установки). Консоль Cloud автоматически генерирует уникальную строку; обычно вам неважно, какая она. В большинстве практических заданий вам потребуется указать идентификатор проекта (обычно он обозначается как
PROJECT_ID), поэтому, если он вам не нравится, сгенерируйте другой случайный идентификатор или попробуйте свой собственный и посмотрите, доступен ли он. Затем он "замораживается" после создания проекта. - Существует третье значение — номер проекта , который используется некоторыми API. Подробнее обо всех трех значениях можно узнать в документации .
- Далее вам потребуется включить оплату в консоли Cloud, чтобы использовать ресурсы/API Cloud. Выполнение этого практического задания не должно стоить дорого, если вообще что-либо. Чтобы отключить ресурсы и избежать дополнительных расходов после завершения этого урока, следуйте инструкциям по «очистке», приведенным в конце практического задания. Новые пользователи Google Cloud имеют право на бесплатную пробную версию стоимостью 300 долларов США .
Запустить Cloud Shell
Хотя Google Cloud можно управлять удаленно с ноутбука, в этом практическом занятии вы будете использовать Google Cloud Shell — среду командной строки, работающую в облаке.
В консоли Google Cloud нажмите на значок Cloud Shell на панели инструментов в правом верхнем углу:

Подготовка и подключение к среде займут всего несколько минут. После завершения вы должны увидеть что-то подобное:

Эта виртуальная машина оснащена всеми необходимыми инструментами разработки. Она предоставляет постоянный домашний каталог размером 5 ГБ и работает в облаке Google, что значительно повышает производительность сети и аутентификацию. Всю работу в этой лаборатории можно выполнять с помощью обычного браузера.
Настройте gcloud
В Cloud Shell задайте идентификатор проекта и сохраните его в качестве переменной 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.
Убедитесь, что канал 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 . Если это не так, вернитесь к первому практическому заданию и выполните шаги по созданию и активации канала с помощью Datadog.
4. Включите интеграцию Datadog с Google Cloud.
Для использования Datadog в целях мониторинга проекта необходимо включить необходимые для Datadog API, создать учетную запись службы и подключить эту учетную запись к Datadog.
Включите API для Datadog
gcloud services enable compute.googleapis.com \ cloudasset.googleapis.com \ monitoring.googleapis.com
Создайте учетную запись службы
Интеграция Datadog с Google Cloud использует сервисный аккаунт для вызова API Cloud Logging с целью сбора метрик на уровне узлов с ваших экземпляров Compute Engine.
Создайте учетную запись службы для Datadog:
DATADOG_SA_NAME=datadog-service-account
gcloud iam service-accounts create $DATADOG_SA_NAME \
--display-name "Datadog Service Account"
Разрешите учетной записи службы Datadog собирать метрики, теги, события и метки пользователей, предоставив следующие роли IAM:
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 автоматически создаст ряд панелей мониторинга, связанных с Google Cloud, в разделе Dashboards :

5. Создание виртуальных машин Compute Engine.
Далее создайте несколько виртуальных машин Compute Engine (ВМ). Вы будете отслеживать состояние этих ВМ с помощью монитора Datadog и реагировать на оповещения Datadog с помощью рабочего процесса в Google Cloud.
Создайте 2 виртуальные машины Compute Engine:
gcloud compute instances create instance-1 instance-2 --zone us-central1-a
Примерно через минуту в консоли Cloud Console вы увидите созданные и запущенные виртуальные машины. Через некоторое время (обычно 10 минут) вы также увидите эти виртуальные машины в Datadog на панели мониторинга Google Compute Engine в Dashboards :

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}
Обратите внимание, что рабочий процесс получает событие в качестве параметра. Это событие поступает из системы мониторинга Datadog через Eventarc. После получения события рабочий процесс проверяет количество запущенных экземпляров и при необходимости создает новые экземпляры виртуальных машин.
Разверните рабочий процесс:
WORKFLOW_NAME=workflow-datadog2 gcloud workflows deploy $WORKFLOW_NAME \ --source workflow-datadog2.yaml \ --location $REGION
Рабочий процесс развернут, но пока не запущен. Он будет выполнен триггером Eventarc при получении оповещения от Datadog.
7. Создайте триггер Eventarc.
Теперь вы готовы связать события из поставщика Datadog с рабочими процессами с помощью триггера Eventarc. Вы будете использовать канал и учетную запись службы, которые вы настроили в первом практическом задании.
Создайте триггер с каналом 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. - Определите метрику:
gcp.gce.instance.is_runningиз (везде)sum by(всему) - Установить условия оповещения:
- Срабатывает, если показатель
at least onceза последние5 minutesопускаетсяbelowпорогового значения. - Порог срабатывания оповещения:
< 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. Если вы проверите журналы рабочих процессов, вы увидите, что они проверяют разницу между текущим количеством экземпляров и ожидаемым количеством экземпляров:
2022-03-28 09:30:53.371 BST instanceCount->1 diffInstanceCount->1
В ответ на это оповещение система создает новый экземпляр виртуальной машины с префиксом datadog-instance-## .
В итоге у вас в проекте всё равно останется 2 виртуальные машины: одна, созданная вами изначально, и другая, созданная Workflows после оповещения Datadog!

10. Поздравляем!
Поздравляем, вы завершили практическое занятие!
Что мы рассмотрели
- Как включить интеграцию Datadog с Google Cloud.
- Как создать рабочий процесс для проверки и создания виртуальных машин Compute Engine.
- Как подключить оповещения мониторинга Datadog к рабочим процессам с помощью Eventarc.
- Как создать монитор Datadog и получать оповещения об удалении виртуальных машин.