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

1. Введение

cb762f29e9183a3f.png3c7ca8629bc25d9c.png1c05e3d0c2bd2b45.png

Eventarc позволяет легко подключать сервисы Google Cloud к событиям из различных источников. Он позволяет создавать управляемые событиями архитектуры, в которых микросервисы слабо связаны и распределены. Он также позаботится о приеме событий, их доставке, безопасности, авторизации и обработке ошибок, что повышает гибкость разработчиков и устойчивость приложений.

Datadog — это платформа мониторинга и безопасности облачных приложений. Он объединяет сквозные трассировки, метрики и журналы, чтобы сделать ваши приложения, инфраструктуру и сторонние сервисы видимыми.

Рабочие процессы — это полностью управляемая платформа оркестрации, которая выполняет службы в определенном вами порядке, который называется рабочим процессом. Эти рабочие процессы могут сочетать сервисы, размещенные в Cloud Run или Cloud Functions, облачные сервисы Google, такие как Cloud Vision AI и BigQuery, а также любой API на основе HTTP.

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

Что вы узнаете

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

2. Настройка и требования

Самостоятельная настройка среды

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

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

Запустить Cloud Shell

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

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

55efc1aaa7a4d3ad.png

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

7ffe5cbb04455448.png

Эта виртуальная машина оснащена всеми необходимыми инструментами разработки. Он предлагает постоянный домашний каталог объемом 5 ГБ и работает в Google Cloud, что значительно повышает производительность сети и аутентификацию. Всю работу в этой лабораторной работе можно выполнять с помощью простого браузера.

Настройка 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 Console:

8399d528ccbd4c20.png

Состояние канала должно быть ACTIVE . Если нет, вернитесь к первой кодовой лаборатории и следуйте инструкциям по созданию и активации канала с помощью Datadog.

4. Включите интеграцию Datadog с Google Cloud.

Чтобы использовать Datadog для мониторинга проекта, вам необходимо включить API, необходимые для Datadog, создать учетную запись службы и подключить учетную запись службы к 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 (VM). Вы будете отслеживать эти виртуальные машины с помощью монитора Datadog и отвечать на оповещения Datadog с помощью рабочего процесса в Google Cloud.

Создайте две виртуальные машины Compute Engine:

gcloud compute instances create instance-1 instance-2 --zone us-central1-a

Примерно через минуту вы увидите виртуальные машины, созданные и работающие, в облачной консоли. Через некоторое время (обычно 10 минут) вы также должны увидеть эти виртуальные машины в Datadog на панели инструментов Google Compute Engine в разделе Dashboards :

78a51374c1d0c11e.png

6. Создайте рабочий процесс

Теперь, когда у вас работают две виртуальные машины, создайте рабочий процесс, который будет реагировать на оповещения монитора Datadog. Рабочий процесс может быть настолько сложным, насколько вам нравится, но в этом случае рабочий процесс проверит количество работающих экземпляров виртуальных машин, и если оно упадет ниже 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 from (везде) sum by (всему)
  3. Установите условия оповещения:
  4. Запускается, когда показатель below порогового значения at least once за последние 5 minutes
  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 Console.

Это изменение отобразится в Datadog с некоторой задержкой. Через некоторое время (обычно 10 минут) вы должны увидеть монитор в Datadog, чтобы обнаружить его и предупредить об этом в разделе Manage Monitors :

50f93d560b6c1973.png

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

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

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

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

11e42028e7142690.png

10. Поздравления

Поздравляем, вы завершили работу над кодом!

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

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