Acheminer les alertes de surveillance Datadog vers Google Cloud avec Eventarc (partie 2)

1. Introduction

cb762f29e9183a3f.png 3c7ca8629bc25d9c.png 1c05e3d0c2bd2b45.png

Eventarc facilite la connexion des services Google Cloud à des événements provenant de différentes sources. Il vous permet de créer des architectures basées sur des événements dans lesquelles des microservices sont faiblement couplés et distribués. Il se charge également de l'ingestion, de la diffusion, de la sécurité, de l'autorisation et de la gestion des erreurs des événements pour vous, ce qui améliore l'agilité des développeurs et la résilience des applications.

Datadog est une plate-forme de surveillance et de sécurité pour les applications cloud. Il rassemble les traces, les métriques et les journaux de bout en bout pour rendre vos applications, votre infrastructure et vos services tiers observables.

Workflows est une plate-forme d'orchestration entièrement gérée qui exécute les services dans un ordre que vous définissez appelé "workflow". Ces workflows peuvent combiner des services hébergés sur Cloud Run ou Cloud Functions, des services Google Cloud tels que Cloud Vision AI et BigQuery, et n'importe quelle API HTTP.

Dans le premier atelier de programmation, vous avez appris à acheminer les alertes de surveillance Datadog vers Google Cloud avec Eventarc. Dans ce deuxième atelier de programmation, vous allez apprendre à répondre aux alertes de surveillance Datadog avec Workflows. Plus précisément, vous allez créer deux machines virtuelles Compute Engine et les surveiller avec un moniteur Datadog. Une fois l'une des VM supprimée, vous recevrez une alerte de Datadog concernant Workflows via Eventarc. Workflows recrée ensuite la VM supprimée pour ramener le nombre de VM en cours d'exécution à deux.

Points abordés

  • Activer l'intégration de Datadog à Google Cloud
  • Créer un workflow pour vérifier et créer des VM Compute Engine
  • Connecter des alertes de surveillance Datadog à Workflows avec Eventarc
  • Créer une surveillance Datadog et une alerte sur les suppressions de VM

2. Préparation

Configuration de l'environnement au rythme de chacun

  1. Connectez-vous à la console Google Cloud, puis créez un projet ou réutilisez un projet existant. (Si vous ne possédez pas encore de compte Gmail ou Google Workspace, vous devez en créer un.)

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Le nom du projet est le nom à afficher pour les participants au projet. Il s'agit d'une chaîne de caractères qui n'est pas utilisée par les API Google, et que vous pouvez modifier à tout moment.
  • L'ID du projet doit être unique sur l'ensemble des projets Google Cloud et doit être immuable (vous ne pouvez pas le modifier une fois que vous l'avez défini). Cloud Console génère automatiquement une chaîne unique dont la composition importe peu, en général. Dans la plupart des ateliers de programmation, vous devrez référencer l'ID du projet (généralement identifié comme PROJECT_ID), donc s'il ne vous convient pas, générez-en un autre au hasard ou définissez le vôtre, puis vérifiez s'il est disponible. Il est ensuite "gelé" une fois le projet créé.
  • La troisième valeur est le numéro de projet, utilisé par certaines API. Pour en savoir plus sur ces trois valeurs, consultez la documentation.
  1. Vous devez ensuite activer la facturation dans Cloud Console afin d'utiliser les ressources/API Cloud. L'exécution de cet atelier de programmation est très peu coûteuse, voire sans frais. Pour arrêter les ressources afin d'éviter qu'elles ne vous soient facturées après ce tutoriel, suivez les instructions de nettoyage indiquées à la fin de l'atelier. Les nouveaux utilisateurs de Google Cloud peuvent participer au programme d'essai gratuit pour bénéficier d'un crédit de 300 $.

Démarrer Cloud Shell

Bien que Google Cloud puisse être utilisé à distance depuis votre ordinateur portable, nous allons nous servir de Google Cloud Shell pour cet atelier de programmation, un environnement de ligne de commande exécuté dans le cloud.

Dans la console Google Cloud, cliquez sur l'icône Cloud Shell dans la barre d'outils supérieure :

55efc1aaa7a4d3ad.png

Le provisionnement et la connexion à l'environnement prennent quelques instants seulement. Une fois l'opération terminée, le résultat devrait ressembler à ceci :

7ffe5cbb04455448.png

Cette machine virtuelle contient tous les outils de développement nécessaires. Elle comprend un répertoire d'accueil persistant de 5 Go et s'exécute sur Google Cloud, ce qui améliore nettement les performances du réseau et l'authentification. Vous pouvez réaliser toutes les activités de cet atelier dans un simple navigateur.

Configurer gcloud

Dans Cloud Shell, définissez l'ID de votre projet et enregistrez-le en tant que variable PROJECT_ID.

Définissez également une variable REGION sur us-central1. Il s'agit de la région dans laquelle vous créerez des ressources ultérieurement.

PROJECT_ID=[YOUR-PROJECT-ID]
REGION=us-central1
gcloud config set core/project $PROJECT_ID

Activer les API

Activez tous les services nécessaires :

gcloud services enable \
  workflows.googleapis.com \
  workflowexecutions.googleapis.com

3. Vérifier le canal Datadog

Assurez-vous que le canal Datadog que vous avez créé dans le premier atelier de programmation est actif. Dans Cloud Shell, exécutez la commande suivante pour récupérer les détails du canal:

CHANNEL_NAME=datadog-channel
gcloud eventarc channels describe $CHANNEL_NAME --location $REGION

La sortie devrait ressembler à ce qui suit :

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'

Vous pouvez également consulter l'état du canal dans la console Google Cloud:

8399d528ccbd4c20.png

L'état du canal doit être ACTIVE. Si ce n'est pas le cas, revenez au premier atelier de programmation et suivez les étapes pour créer et activer un canal avec Datadog.

4. Activer l'intégration de Datadog à Google Cloud

Pour surveiller un projet à l'aide de Datadog, vous devez activer les API nécessaires à Datadog, créer un compte de service et connecter celui-ci à Datadog.

Activer des API pour Datadog

gcloud services enable compute.googleapis.com \
  cloudasset.googleapis.com \
  monitoring.googleapis.com

Créer un compte de service

L'intégration Google Cloud de Datadog utilise un compte de service pour appeler l'API Cloud Logging afin de collecter des métriques au niveau du nœud à partir de vos instances Compute Engine.

Créez un compte de service pour Datadog:

DATADOG_SA_NAME=datadog-service-account

gcloud iam service-accounts create $DATADOG_SA_NAME \
    --display-name "Datadog Service Account"

Autorisez le compte de service Datadog à collecter des métriques, des tags, des événements et des étiquettes utilisateur en attribuant les rôles IAM suivants:

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

Créez et téléchargez une clé de compte de service. Vous avez besoin du fichier de clé pour terminer l'intégration avec Datadog.

Créez un fichier de clé de compte de service dans votre répertoire d'accueil Cloud Shell:

gcloud iam service-accounts keys create ~/key.json \
  --iam-account $DATADOG_SA_EMAIL

Dans Cloud Shell, cliquez sur More ⁝, puis sélectionnez Download File. Dans le champ File path, saisissez key.json. Pour télécharger le fichier de clé, cliquez sur Download.

Connecter le compte de service à Datadog

Dans votre compte Datadog, accédez à la section Integrations et recherchez la tuile d'intégration Google Cloud:

cf1ffa6547fba3e4.png

Passez la souris sur Google Cloud Platform pour accéder à la page Install:

31b365a31bc50cc8.png

Installez l'intégration en important la clé de compte de service dans la section Upload Private Key File, puis en cliquant sur Install Integration:

92e475e4da7f826.png

Une fois l'intégration terminée, Datadog crée automatiquement plusieurs tableaux de bord associés à Google Cloud sous Dashboards:

66fdf2d26e4710d.png

5. Créer des VM Compute Engine

Créez ensuite des machines virtuelles (VM) Compute Engine. Vous allez surveiller ces VM à l'aide d'un moniteur Datadog et répondre aux alertes Datadog avec un workflow dans Google Cloud.

Créez deux VM Compute Engine:

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

Les VM créées et exécutées en l'espace d'une minute doivent s'afficher dans la console Cloud. Après un certain temps (généralement 10 minutes), vous devriez également voir ces VM dans Datadog dans le tableau de bord Google Compute Engine, sous Dashboards:

78a51374c1d0c11e.png

6. Créer un workflow

Maintenant que vous avez deux VM en cours d'exécution, créez un workflow qui répondra aux alertes d'un moniteur Datadog. Le workflow peut être aussi sophistiqué que vous le souhaitez, mais dans ce cas, il vérifie le nombre d'instances de VM en cours d'exécution. S'il est inférieur à 2, il crée des instances de VM pour s'assurer que deux VM sont en cours d'exécution en permanence.

Créez un fichier workflow-datadog2.yaml avec le contenu suivant :

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}

Notez que le workflow reçoit un événement en tant que paramètre. Cet événement proviendra de la surveillance Datadog via Eventarc. Une fois l'événement reçu, le workflow vérifie le nombre d'instances en cours d'exécution et crée des instances de VM si nécessaire.

Déployez le workflow :

WORKFLOW_NAME=workflow-datadog2
gcloud workflows deploy $WORKFLOW_NAME \
  --source workflow-datadog2.yaml \
  --location $REGION

Le workflow est déployé, mais il n'est pas encore en cours d'exécution. Elle sera exécutée par un déclencheur Eventarc lorsqu'une alerte Datadog sera reçue.

7. Créer un déclencheur Eventarc

Vous êtes maintenant prêt à connecter les événements du fournisseur Datadog à Workflows à l'aide d'un déclencheur Eventarc. Vous utiliserez le canal et le compte de service que vous avez configurés dans le premier atelier de programmation.

Créez un déclencheur avec le canal Datadog, le type d'événement et une destination de workflow:

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

Vous pouvez répertorier les déclencheurs pour vérifier que le déclencheur que vous venez de créer est actif:

gcloud eventarc triggers list --location $REGION

NAME: datadog-trigger2
TYPE: datadog.v1.alert
DESTINATION: Workflows: workflow-datadog2
ACTIVE: Yes

8. Créer une surveillance Datadog

Vous allez maintenant créer une surveillance Datadog et la connecter à Eventarc.

Le moniteur vérifie le nombre de VM Compute Engine en cours d'exécution et envoie une alerte s'il est inférieur à 2.

Pour créer une surveillance dans Datadog, connectez-vous à Datadog. Pointez sur Monitors dans le menu principal, puis cliquez sur New Monitor dans le sous-menu. Il existe de nombreux types de surveillance. Sélectionnez le type de surveillance Metric.

Sur la page New Monitor, créez une surveillance avec les éléments suivants:

  1. Choisissez la méthode de détection: Threshold.
  2. Définir la métrique "gcp.gce.instance.is_running" de (partout) sum by (tous)
  3. Définissez les conditions d'alerte:
  4. Déclencher lorsque la métrique est below au seuil at least once au cours de la dernière période de 5 minutes
  5. Seuil d'alerte: < 2
  6. Prévenir votre équipe: @eventarc_<your-project-id>_<your-region>_<your-channel-name>
  7. Exemple de nom de moniteur: Compute Engine instances < 2

Appuyez maintenant sur Create en bas pour créer le moniteur.

9. Tester la surveillance et le déclencheur

Pour tester la surveillance Datadog, le déclencheur Eventarc, puis le workflow, vous devez supprimer l'une des VM:

gcloud compute instances delete instance-2 --zone us-central1-a

Après quelques secondes, l'instance doit être supprimée dans la console Google Cloud.

Il y a un peu de latence pour que cette modification s'affiche dans Datadog. Après un certain temps (généralement 10 minutes), le moniteur doit s'afficher dans Datadog pour détecter et alerter dans la section Manage Monitors:

50f93d560b6c1973.png

Une fois que Datadog a surveillé les alertes, celle-ci doit être transmise à Workflows via Eventarc. Si vous consultez les journaux de Workflows, vous devriez constater que Workflows vérifie la différence entre le nombre actuel d'instances et le nombre attendu d'instances:

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

Il répond à cette alerte en créant une instance de VM avec le préfixe datadog-instance-##.

Au bout du compte, vous aurez toujours deux VM dans votre projet : l'une que vous avez créée initialement et l'autre par Workflows après l'alerte Datadog.

11e42028e7142690.png

10. Félicitations

Félicitations, vous avez terminé cet atelier de programmation.

Points abordés

  • Activer l'intégration de Datadog à Google Cloud
  • Créer un workflow pour vérifier et créer des VM Compute Engine
  • Connecter des alertes de surveillance Datadog à Workflows avec Eventarc
  • Créer une surveillance Datadog et une alerte sur les suppressions de VM