Présentation
Les webhooks vous permettent de :
- Vous connecter à vos services.
- Être informé lorsqu’une alerte de métrique se déclenche pour un service.
Configuration
Accédez au carré d’intégration Webhooks et saisissez l’URL et le nom du webhook que vous souhaitez utiliser.
Utilisation
Pour utiliser votre webhook, ajoutez @webhook-<NOM_WEBHOOK>
dans le texte de l’alerte de métrique qui déclenchera le webhook. Une requête POST sera envoyée à l’URL que vous avez spécifiée avec le contenu suivant au format JSON. Toutes les requêtes individuelles expirent au bout de 15 secondes. Datadog n’effectue une nouvelle tentative qu’en cas d’erreur interne (message de notification incorrect) ou en cas de réception d’une réponse 5XX de la part de l’endpoint du webhook. Si un échec de connexion se produit, 5 nouvelles tentatives sont effectuées.
Remarque : les en-têtes personnalisés doivent être au format JSON.
Pour ajouter vos propres champs personnalisés à la requête, vous pouvez également spécifier votre propre charge utile dans le champ Payload. Si vous souhaitez encoder votre charge utile pour une URL, cochez la case Encode as form et indiquez votre charge utile au format JSON. Utilisez les variables de la section suivante.
Variables
- $AGGREG_KEY
- ID permettant d’agréger des événements connexes.
Exemple : 9bd4ac313a4d1e8fae2482df7b77628
- $ALERT_CYCLE_KEY
- ID permettant d’associer des événements depuis le déclenchement d’une alerte jusqu’à sa résolution.
- $ALERT_ID
- ID de l’alerte.
Exemple : 1234
- $ALERT_METRIC
- Nom de la métrique s’il s’agit d’une alerte.
Exemple : system.load.1
- $ALERT_PRIORITY
- Priorité du monitor envoyant l’alerte.
Exemple : P1
, P2
- $ALERT_QUERY
- Requête du monitor qui a déclenché le webhook.
- $ALERT_SCOPE
- Liste des tags déclenchant l’alerte séparés par des virgules.
Exemple : availability-zone:us-east-1a, role:computing-node
- $ALERT_STATUS
- Résumé du statut d’alerte.
Exemple : system.load.1 over host:my-host was > 0 at least once during the last 1m
Remarque : pour ajouter cette variable dans des charges utiles de webhook depuis des alertes de monitor de log, vous devez ajouter manuellement $ALERT_STATUS
au carré de l’intégration Webhook. - $ALERT_TITLE
- Titre de l’alerte.
Exemple : error
, warning
, success
, info
- $ALERT_TRANSITION
- Type de notification de l’alerte.
Exemple : Recovered
, Triggered
/Re-Triggered
, No Data
/Re-No Data
, Warn
/Re-Warn
, Renotify
- $ALERT_TYPE
- Type de l’alerte.
- $DATE
- Date (epoch) à laquelle l’événement s’est produit.
Exemple : 1406662672000
- $EMAIL
- Adresse e-mail de l’utilisateur publiant l’événement qui a déclenché le webhook.
- $EVENT_MSG
- Texte de l’événement.
Exemple : @webhook-url Sending to the webhook
- $EVENT_TITLE
- Titre de l’événement.
Exemple : [Triggered] [Memory Alert]
- $EVENT_TYPE
- Type de l’événement.
Exemple : metric_alert_monitor
, event_alert
ou service_check
. - $HOSTNAME
- Hostname du serveur associé à l’événement (le cas échéant).
- $ID
- ID de l’événement.
Exemple : 1234567
- $INCIDENT_ATTACHMENTS
- Liste d’objets JSON comportant les pièces jointes de l’incident, notamment les analyses post-mortem et les documents associés.
Exemple : [{"attachment_type": "postmortem", "attachment": {"url": "https://app.datadoghq.com/notebook/123","title": "Postmortem IR-1"}}]
- $INCIDENT_COMMANDER
- Objet JSON comportant le handle, l’uuid, le nom, l’adresse e-mail et l’icône du responsable de l’incident.
- $INCIDENT_CUSTOMER_IMPACT
- Objet JSON comportant le statut de l’impact client, la durée et la portée de l’incident.
Exemple : {"customer_impacted": true, "customer_impact_duration": 300 ,"customer_impact_scope": "scope here"}
- $INCIDENT_FIELDS
- Objet JSON mappant chaque champ de l’incident à sa valeur respective.
Exemple : {"state": "active", "datacenter": ["eu1", "us1"]}
- $INCIDENT_PUBLIC_ID
- ID public de l’incident associé.
Exemple : 123
- $INCIDENT_TITLE
- Titre de l’incident.
- $INCIDENT_SEVERITY
- Gravité de l’incident
- $INCIDENT_STATUS
- Statut de l’incident
- $INCIDENT_URL
- URL de l’incident.
Exemple : https://app.datadoghq.com/incidents/1
- $INCIDENT_MSG
- Message de la notification de l’incident.
- $LAST_UPDATED
- Date de la dernière mise à jour de l’événement.
- $LINK
- URL de l’événement.
Exemple : https://app.datadoghq.com/event/jump_to?event_id=123456
- $LOGS_SAMPLE
- Échantillon de logs provenant d’alertes de log monitor.
- $METRIC_NAMESPACE
- Espace de nommage de la métrique s’il s’agit d’une alerte.
- $ORG_ID
- ID de votre organisation.
Exemple : 11023
- $ORG_NAME
- Nom de votre organisation.
Exemple : Datadog
- $PRIORITY
- Priorité de l’événement.
Exemple : normal
or low
- $SECURITY_RULE_NAME
- Nom de la règle de sécurité.
- $SECURITY_SIGNAL_ID
- Identifiant unique du signal.
Exemple : AAAAA-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- $SECURITY_SIGNAL_SEVERITY
- Gravité du signal de sécurité.
Exemple : medium
- $SECURITY_SIGNAL_TITLE
- Titre du signal de sécurité.
- $SECURITY_SIGNAL_MSG
- Message du signal de sécurité.
- $SECURITY_SIGNAL_ATTRIBUTES
- Attributs du signal de sécurité.
Exemple : {"network":{"client":{"ip":"1.2.3.4"}}, "service": ["agent"]}
- $SECURITY_RULE_ID
- ID de la règle de sécurité.
Exemple : aaa-aaa-aaa
- $SECURITY_RULE_QUERY
- Requête(s) associée(s) à la règle de sécurité.
Exemple : ["@evt.name:authentication"]
- $SECURITY_RULE_GROUP_BY_FIELDS
- Groupe de sécurité en fonction des paires key/value.
Exemple : {"@usr.name":"john.doe@your_domain.com"}
- $SECURITY_RULE_TYPE
- Type de règle de sécurité.
Exemple : log_detection
- $SNAPSHOT
- URL de l’image si l’événement contient un snapshot.
Exemple : https://p.datadoghq.com/path-to-snapshot
- $SYNTHETICS_TEST_NAME
- Nom du test Synthetic.
- $SYNTHETICS_FIRST_FAILING_STEP_NAME
- Nom de la première étape qui échoue du test Synthetic.
- $SYNTHETICS_SUMMARY
- Synthèse des informations sur le test Synthetic.
Exemple :
{
"result_id": "1871796423670117676",
"test_type": "browser",
"test_name": "Nom du test",
"date": "Nov 05, 2021, 09:49AM UTC",
"test_url": "https://app.datadoghq.com/synthetics/edit/apc-ki3-jwx",
"result_url": "https://app.datadoghq.com/synthetics/details/anc-ki2-jwx?resultId=1871796423670117676",
"location": "Frankfurt (AWS)",
"browser": "Chrome",
"device": "Laptop Large"
"failing_steps": [
{
"error_message": "Erreur : le contenu de l'élément devrait inclure une valeur donnée.",
"name": "Span test #title content",
"is_critical": true,
"number": "3.1"
}
],
}
- $TAGS
- Liste des tags associés à l’événement séparés par des virgules.
Exemple : monitor, name:myService, role:computing-node
- $TAGS[key]
- Valeur du tag
key
tag. S’il n’y a pas de tag key
, ou s’il ne possède aucune valeur, cette expression renvoie une chaîne vide.
Exemple : si $TAGS
inclut role:computing-node
, alors $TAGS[role]
renvoie computing-node
. - $TEXT_ONLY_MSG
- Texte de l’événement sans mise en forme markdown.
- $USER
- Utilisateur publiant l’événement qui a déclenché le webhook.
Exemple : rudy
- $USERNAME
- Nom de l’utilisateur publiant l’événement qui a déclenché le webhook.
Authentification
Si vous souhaitez envoyer vos webhooks vers un service nécessitant une authentification, vous pouvez utiliser l’authentification HTTP standard en remplaçant votre URL https://mon.service.example.com
par https://<NOMUTILISATEUR>:<MOTDEPASSE>@mon.service.example.com
.
Multiples webhooks
Dans une alerte de monitor, si au moins 2 endpoints de webhook sont notifiés, une file d’attente de webhooks est alors créée pour chaque service. Cela signifie que si vous communiquez avec Pagerduty et Slack (par exemple), une nouvelle tentative sur le webhook Slack n’affectera pas le webhook Pagerduty.
Néanmoins, dans le contexte Pagerduty, certains événements passent toujours avant les autres. En particulier, une charge utile « Acknowledge » passe toujours avant « Resolution ». De cette manière, si un ping « Acknowledge » échoue, le ping « Resolution » sera mis en attente conformément à la logique de nouvelle tentative.
Exemples
Envoi de SMS par Twilio
Utilisez l’URL :
https://<ID_COMPTE>:<TOKEN_AUTH>@api.twilio.com/2010-04-01/Accounts/<ID_COMPTE>/Messages.json
et comme charge utile :
{
"To": "+1347XXXXXXX",
"From": "+1347XXXXXX",
"Body": "$EVENT_TITLE \n Graphique correspondant : $SNAPSHOT"
}
Assurez-vous de remplacer To
par votre numéro de téléphone et From
par le numéro que Twilio vous a attribué. Cochez la case Encode as form.
Créer un ticket dans Jira
Utilisez l’URL :
https://<NOM_UTILISATEUR_JIRA>:<MOTDEPASSE_JIRA>@<VOTRE_DOMAINE>.atlassian.net/rest/api/2/issue
et comme charge utile :
{
"fields": {
"project": {
"key": "VOTRE-CLÉ-PROJET"
},
"issuetype": {
"name": "Task"
},
"description": "Une erreur s'est produite. Consultez le graphique $SNAPSHOT ainsi que l'événement $LINK",
"summary": "$EVENT_TITLE"
}
}
Ne cochez pas la case « Encode as form ».