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 ) 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 ). 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 , 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 notamment quand il s’agit d’envoyer des notifications Datadog sur Discord (c’est le sujet de l’article , ça va j’accouche ! Pas besoin de t’énerver ! )

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Ă©


CTO le jour, codeur la nuit, je partage mon quotidien de tech et d'autres trucs qui me passionnent.