Направляйте оповещения мониторинга Datadog в Google Cloud с помощью Eventarc (часть 2)

1. Введение

cb762f29e9183a3f.png3c7ca8629bc25d9c.png1c05e3d0c2bd2b45.png

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. Настройка и требования

Настройка среды для самостоятельного обучения

  1. Войдите в консоль Google Cloud и создайте новый проект или используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

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

Запустить Cloud Shell

Хотя Google Cloud можно управлять удаленно с ноутбука, в этом практическом занятии вы будете использовать Google Cloud Shell — среду командной строки, работающую в облаке.

В консоли Google Cloud нажмите на значок Cloud Shell на панели инструментов в правом верхнем углу:

55efc1aaa7a4d3ad.png

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

7ffe5cbb04455448.png

Эта виртуальная машина оснащена всеми необходимыми инструментами разработки. Она предоставляет постоянный домашний каталог размером 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:

8399d528ccbd4c20.png

Состояние канала должно быть 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 :

cf1ffa6547fba3e4.png

Наведите курсор на Google Cloud Platform , чтобы перейти на страницу Install :

31b365a31bc50cc8.png

Для установки интеграции загрузите ключ учетной записи службы в разделе Upload Private Key File , а затем нажмите « Install Integration .

92e475e4da7f826.png

После завершения интеграции Datadog автоматически создаст ряд панелей мониторинга, связанных с Google Cloud, в разделе Dashboards :

66fdf2d26e4710d.png

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 :

78a51374c1d0c11e.png

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 создайте монитор со следующими характеристиками:

  1. Выберите метод обнаружения: Threshold .
  2. Определите метрику: gcp.gce.instance.is_running из (везде) sum by (всему)
  3. Установить условия оповещения:
  4. Срабатывает, если показатель at least once за последние 5 minutes опускается below порогового значения.
  5. Порог срабатывания оповещения: < 2
  6. Уведомите свою команду: @eventarc_<your-project-id>_<your-region>_<your-channel-name>
  7. Пример имени монитора: 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 :

50f93d560b6c1973.png

После того, как монитор Datadog выдаст оповещение, вы должны увидеть, как это оповещение поступает в рабочие процессы через Eventarc. Если вы проверите журналы рабочих процессов, вы увидите, что они проверяют разницу между текущим количеством экземпляров и ожидаемым количеством экземпляров:

2022-03-28 09:30:53.371 BST instanceCount->1 diffInstanceCount->1

В ответ на это оповещение система создает новый экземпляр виртуальной машины с префиксом datadog-instance-## .

В итоге у вас в проекте всё равно останется 2 виртуальные машины: одна, созданная вами изначально, и другая, созданная Workflows после оповещения Datadog!

11e42028e7142690.png

10. Поздравляем!

Поздравляем, вы завершили практическое занятие!

Что мы рассмотрели

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