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

1. Introduction

cb762f29e9183a3f.png 3c7ca8629bc25d9c.png 1c05e3d0c2bd2b45.png

Eventarc permet de connecter facilement les services Google Cloud à des événements provenant de diverses sources. Il vous permet de créer des architectures basées sur des événements dans lesquelles les microservices sont faiblement couplés et distribués. Il gère également l'ingestion, la diffusion, la sécurité, l'autorisation et le traitement des erreurs 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 des traces, des métriques et des 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 des 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, ainsi que toute API HTTP.

Dans le premier atelier de programmation, vous avez appris à router 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 à l'aide d'un moniteur Datadog. Une fois l'une des VM supprimée, vous recevrez une alerte de Datadog à Workflows via Eventarc. Les workflows recréeront ensuite la VM supprimée pour rétablir le nombre de VM en cours d'exécution à deux.

Points abordés

  • Découvrez comment activer l'intégration Google Cloud de Datadog.
  • Découvrez comment créer un workflow pour vérifier et créer des VM Compute Engine.
  • Découvrez comment connecter les alertes de surveillance Datadog à Workflows avec Eventarc.
  • Découvrez comment créer un moniteur Datadog et une alerte en cas de suppression 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 sans frais 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 votre ID de 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 Google Cloud Console :

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 Google Cloud de Datadog

Pour utiliser Datadog afin de surveiller un projet, vous devez activer les API nécessaires pour Datadog, créer un compte de service et associer ce compte à Datadog.

Activer les 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 et collecter des métriques au niveau des nœuds à 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 libellés utilisateur en lui 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 à Datadog.

Créez un fichier de clé de compte de service dans le répertoire d'accueil de 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.

Associer 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

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

31b365a31bc50cc8.png

Installez l'intégration en important la clé du 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 liés à Google Cloud sous Dashboards :

66fdf2d26e4710d.png

5. Créer des VM Compute Engine

Créez ensuite des machines virtuelles (VM) Compute Engine. Vous surveillerez ces VM avec un moniteur Datadog et répondrez 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

Après une minute environ, vous devriez voir les VM créées et en cours d'exécution 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. Dans ce cas, il vérifie le nombre d'instances de VM en cours d'exécution et, s'il est inférieur à 2, il crée de nouvelles instances de VM pour s'assurer qu'il y a toujours deux VM en cours d'exécution.

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 de nouvelles 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 pas encore en cours d'exécution. Il sera exécuté 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 à des workflows avec 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 lister les déclencheurs pour vérifier que celui 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 un moniteur Datadog

Vous allez maintenant créer un moniteur Datadog et l'associer à 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 un moniteur 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 d'écrans. Choisissez le type de moniteur Metric.

Sur la page New Monitor, créez un écran de contrôle avec les éléments suivants :

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

Cliquez ensuite sur Create en bas de l'écran pour créer le moniteur.

9. Tester le moniteur et le déclencheur

Pour tester le moniteur Datadog, le déclencheur Eventarc et, enfin, le workflow, vous allez supprimer l'une des VM :

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

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

Un certain temps peut s'écouler avant que cette modification n'apparaisse dans Datadog. Après un certain temps (généralement 10 minutes), vous devriez voir le moniteur dans Datadog pour détecter et signaler ce problème dans la section Manage Monitors :

50f93d560b6c1973.png

Une fois que le moniteur Datadog émet une alerte, vous devriez la voir s'afficher dans Workflows via Eventarc. Si vous consultez les journaux de Workflows, vous devriez voir que Workflows vérifie la différence entre le nombre d'instances actuel et le nombre d'instances attendu :

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 final, vous aurez toujours deux VM dans votre projet : celle que vous avez créée initialement et celle créée par Workflows après l'alerte Datadog.

11e42028e7142690.png

10. Félicitations

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

Points abordés

  • Découvrez comment activer l'intégration Google Cloud de Datadog.
  • Découvrez comment créer un workflow pour vérifier et créer des VM Compute Engine.
  • Découvrez comment connecter les alertes de surveillance Datadog à Workflows avec Eventarc.
  • Découvrez comment créer un moniteur Datadog et une alerte en cas de suppression de VM.