Comment envoyer des alertes Datadog dans Discord ?

J’en parlais dans un article précédent mais je suis assez fan de Datadog ! Logs, métriques, moniteurs, tableaux de bords et j’en passe, Datadog est plutôt bien fourni et permet vraiment de gérer intégralement son monitoring. Qui dit monitoring, dit monitorer ! (ou “surveiller” si toi pas comprendre la langue de Mary Poppins @@LUL) Un des outils important de Datadog est sa fonction “Monitor” qui permet de créer des alertes en fonction de seuils, variations ou autres critères de déclenchement. Ces alertes peuvent être envoyées par mail, sur slack ou d’autres applications.

Depuis le COVID, quelques sociétés se sont mises au télétravail avec plus ou moins de succès (on vous voit @@KJ). Parmi les gros changements qu’a apportés le télétravail, il y a eu l’arrivée massive de la visio : Meet, Zoom, Livestorm ou même Discord.

Pour beaucoup de travailleurs du sexe de la tech @@OUCH, ces outils sont devenus monnaie courante. Certaines sociétés en ont d’ailleurs profité pour (parfois) changer leurs outils de communication pour privilégier un Discord plutôt qu’un Slack, notamment pour des raisons de tarification 💸. Et c’est là que tu vois le loup arriver ! Discord c’est bien, c’est pratique mais c’est pas aussi bien interconnecté qu’un slack @@SAD notamment quand il s’agit d’envoyer des notifications Datadog sur Discord (c’est le sujet de l’article @@RS, ça va j’accouche ! Pas besoin de t’énerver ! @@OOPS)

Voyons-donc comment envoyer les alertes de nos moniteurs Datadog, directement dans Discord !

Spoiler : Si tu connais déjà les webhooks, que t’es une diva du dév’ ou tout autre Apollon de la tech, tu peux directement voir la solution au dernier chapitre

Les webhooks

Si tu es développeur, tu as forcément entendu parler des webhooks. Un webhook c’est un système qui permet d’envoyer (ou recevoir) des évènements à/depuis une application tierce, en général au travers d’un appel HTTP. L’idée derrière le webhook c’est de pouvoir avertir facilement un service tier d’un nouvel évènement sans avoir à se soucier de la pile technique distante. En gros, le webhook va effectuer un call HTTP avec le contenu de la notification dans le corps de la requête HTTP.

Dans notre cas, Datadog doit notifier Discord d’une nouvelle alerte. Ca se présente ainsi :

Pour se faire, il va nous falloir :

  • Un webhook Datadog qui envoie la notification
  • Un webhook Discord qui reçoit la notification

Créer le webhook coté Discord

Pour créer un webhook sur discord, il faut :

  • Se rendre sur les paramètres d’un salon textuel
  • Puis aller dans Intégrations > Webhooks > Nouveau Webhook
  • Copier l’URL du webhook

En créant ce webhook, Discord nous donne la possibilité de poster des messages dans notre salon #test en appelant l’URL du webhook.

Créer le webhook Datadog

Maintenant que notre webhook Discord est opérationnel, occupons-nous de créer le webhook coté Datadog.

Le champ Payload est ce qui sera envoyé à chaque fois qu’une nouvelle alerte sera déclenchée. Comme je l’expliquais plus haut, l’intérêt du webhook est de faire en sorte de pouvoir communiquer facilement de service-à-service mais en aucun cas avec un format d’échange unique ! Chaque site/service à sa logique donc les payloads diffèrent en fonction du service qu’on souhaite atteindre.

Mé komen kon fé pou ke Discord komprene Datadog ?

Format du webhook

En temps normal quand un service intègre des webhooks, il est souvent proposé de choisir le service distant afin d’auto-formater le payload en conséquence (ou de mieux interpréter le payload qui sera reçu). C’est par exemple le cas avec Discord qui intègre très bien les notifications Github, comment ? Tout simplement en ajoutant /github à la fin de l’URL du webhook discord. Ca marche aussi pour Slack en ajoutant /slack. Malheureusement Discord n’intègre pas ce type de “tips” pour Datadog. Il faut donc formater notre payload Datadog pour qu’il soit conforme aux spécifications Discord et avec les bonnes valeurs.

Deux références sont nécessaires :

Avec ces informations on peut désormais ajouter un payload qui ressemble à quelque chose du style :

{
  "username": "Datadog",
  "avatar_url": "https://i.postimg.cc/q7gJ7MKm/datadog.png",
  "embeds": [
    {
      "author": {
        "name": "$ALERT_TITLE"
      },
      "title": "$EVENT_TITLE",
      "url": "$LINK",
      "description": "$EVENT_MSG",
      "color": 14036294
    }
  ]
}

Vous pouvez paramétrer votre payload en fonction du style de rendu que vous voulez, par exemple ajouter des catégories dans l’embed, n’envoyer que le texte de l’alerte, ou que le lien etc

Valider votre webhook Datadog avec le payload modifié, puis rendez-vous sur votre Monitor et ajouter @webhook-<nom du webhook> dans “Notify your team” ou dans “Say what’s happening”, that’s it !

Aperçu d'un test de notification

J’espère que ce petit tips vous aura aidé @@KJ @@BEER


Passionné d'informatique, de développement web & applicatif depuis plus de 10 ans. Je partage mon quotidien de tech !