Moniteurs Datadog
Créez, gérez et maintenez des moniteurs pour les alertes.
Prérequis
Cela nécessite pup dans votre chemin. Voir Setup Pup.
Ordre d'exécution des commandes (efficace en tokens)
Pour les commandes avec portée, utilisez cet ordre :
- Vérifiez d'abord le contexte (résultats antérieurs, conversation, valeurs enregistrées).
- Si une valeur requise manque, exécutez d'abord une commande de découverte.
- Si c'est toujours ambigu, demandez à l'utilisateur de confirmer.
- Puis exécutez la commande cible.
- Évitez les commandes spéculatives susceptibles d'échouer.
Démarrage rapide
pup auth login
Opérations courantes
Lister les moniteurs
pup monitors list
pup monitors list --tags "team:platform"
Obtenir un moniteur
pup monitors get <id>
Créer un moniteur
pup monitors create --file monitor.json
Silencer les alertes (Downtime)
# Pas de commandes pup monitors mute/unmute.
# Utilisez des payloads downtime pour silencer les notifications de moniteur.
pup downtime create --file downtime.json
pup downtime cancel <downtime_id>
⚠️ Bonnes pratiques de création de moniteurs
1. Éviter la fatigue d'alerte
| Règle | Pourquoi |
|---|---|
| Pas d'alertes instables | Utilisez last_Xm pas last_1m |
| Seuils significatifs | Basés sur les SLOs, pas sur des suppositions |
| Alertes exploitables | Si aucune action n'est nécessaire, ne pas alerter |
| Inclure un runbook | @runbook-url dans le message |
# WRONG - sera instable constamment
query = "avg(last_1m):avg:system.cpu.user{*} > 50" # ❌ Trop sensible
# CORRECT - alertes stables
query = "avg(last_5m):avg:system.cpu.user{env:prod} by {host} > 80" # ✅ Fenêtre raisonnable
2. Utiliser une portée appropriée
# WRONG - alerte sur tout
query = "avg(last_5m):avg:system.cpu.user{*} > 80" # ❌ Pas de portée
# CORRECT - porté à ce qui compte
query = "avg(last_5m):avg:system.cpu.user{env:prod,service:api} by {host} > 80" # ✅
3. Définir des seuils de récupération
monitor = {
"query": "avg(last_5m):avg:system.cpu.user{env:prod} > 80",
"options": {
"thresholds": {
"critical": 80,
"critical_recovery": 70, # ✅ Prévient l'instabilité
"warning": 60,
"warning_recovery": 50
}
}
}
4. Inclure du contexte dans les messages
message = """
## Alerte CPU élevée
Host : {{host.name}}
Valeur actuelle : {{value}}
Seuil : {{threshold}}
### Runbook
1. Vérifier les processus principaux : `ssh {{host.name}} 'top -bn1 | head -20'`
2. Vérifier les déploiements récents
3. Scaler si nécessaire
@slack-ops @pagerduty-oncall
"""
⚠️ Ne JAMAIS supprimer les moniteurs directement
Utilisez un flux de suppression sécurisé (comme pour les dashboards) :
def safe_mark_monitor_for_deletion(monitor_id: str, client) -> bool:
"""Marquer le moniteur au lieu de le supprimer."""
monitor = client.get_monitor(monitor_id)
name = monitor.get("name", "")
if "[MARKED FOR DELETION]" in name:
print(f"Déjà marqué : {name}")
return False
new_name = f"[MARKED FOR DELETION] {name}"
client.update_monitor(monitor_id, {"name": new_name})
print(f"✓ Marqué : {new_name}")
return True
Types de moniteurs
| Type | Cas d'usage |
|---|---|
metric alert |
CPU, mémoire, métriques personnalisées |
query alert |
Requêtes métriques complexes |
service check |
Statut des vérifications agent |
event alert |
Modèles de flux d'événements |
log alert |
Correspondance de modèle de journal |
composite |
Combiner plusieurs moniteurs |
apm |
Métriques APM |
Auditer les moniteurs
# Trouver les moniteurs sans propriétaires
pup monitors list | jq '.[] | select(.tags | contains(["team:"]) | not) | {id, name}'
# Trouver les moniteurs bruyants (nombre d'alertes élevé)
pup monitors list | jq 'sort_by(.overall_state_modified) | .[:10] | .[] | {id, name, status: .overall_state}'
Downtime vs Silencieux
| Utilisation | Quand |
|---|---|
| Downtime | Toute fenêtre de silence planifiée |
| Édition du moniteur | Changements de comportement de requête/seuil |
# Downtime (préféré)
pup downtime create --file downtime.json
Gestion des défaillances
| Problème | Correction |
|---|---|
| L'alerte ne se déclenche pas | Vérifier que la requête retourne des données, les seuils |
| Trop d'alertes | Augmenter la fenêtre, ajouter un seuil de récupération |
| Alertes sans données | Vérifier la connectivité de l'agent, la métrique existe |
| Erreur d'authentification | pup auth refresh |