Logs Datadog
Cherchez, traitez et archivez les logs en maîtrisant les coûts.
Prérequis
Datadog Pup doit déjà être installé. Voir Setup Pup si ce n'est pas le cas.
Ordre d'exécution des commandes (économe en tokens)
Pour les commandes limitées à un scope, utilisez cet ordre :
- Vérifiez d'abord le contexte (résultats antérieurs, conversation, valeurs sauvegardé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.
- Ensuite, exécutez la commande cible.
- Évitez les commandes spéculatives susceptibles d'échouer.
Démarrage rapide
pup auth login
Chercher dans les logs
# Recherche basique
pup logs search --query="status:error" --from="1h"
# Avec filtres
pup logs search --query="service:api status:error" --from="1h" --limit 100
# Sortie JSON
pup logs search --query="@http.status_code:>=500" --from="1h"
Syntaxe de recherche
| Requête | Signification |
|---|---|
error |
Recherche textuelle complète |
status:error |
Tag égal à |
@http.status_code:500 |
Attribut égal à |
@http.status_code:>=400 |
Plage numérique |
service:api AND env:prod |
Booléen |
@message:*timeout* |
Wildcard |
API de configuration
Commandes de configuration des logs disponibles dans pup 0.42.0 :
# Lister les archives de logs
pup logs archives list
# Lister les requêtes de restriction des logs
pup logs restriction-queries list
# Lister les destinations de logs personnalisées
pup logs custom-destinations list
Processeurs courants
{
"name": "API Logs",
"filter": {"query": "service:api"},
"processors": [
{
"type": "grok-parser",
"name": "Parse nginx",
"source": "message",
"grok": {"match_rules": "%{IPORHOST:client_ip} %{DATA:method} %{DATA:path} %{NUMBER:status}"}
},
{
"type": "status-remapper",
"name": "Set severity",
"sources": ["level", "severity"]
},
{
"type": "attribute-remapper",
"name": "Remap user_id",
"sources": ["user_id"],
"target": "usr.id"
}
]
}
⚠️ Filtres d'exclusion (maîtrise des coûts)
Indexez uniquement ce qui compte :
{
"name": "Drop debug logs",
"filter": {"query": "status:debug"},
"is_enabled": true
}
Exclusions à haut volume
# Trouver les sources de logs les plus bruyantes
pup logs search --query="*" --from="1h" | jq 'group_by(.service) | map({service: .[0].service, count: length}) | sort_by(-.count)[:10]'
| Exclure | Requête |
|---|---|
| Health checks | @http.url:"/health" OR @http.url:"/ready" |
| Debug logs | status:debug |
| Assets statiques | @http.url:*.css OR @http.url:*.js |
| Heartbeats | @message:*heartbeat* |
Archives
Stockez les logs à bas coût pour la conformité :
# Lister les archives
pup logs archives list
# Configuration d'archive (exemple S3)
{
"name": "compliance-archive",
"query": "*",
"destination": {
"type": "s3",
"bucket": "my-logs-archive",
"path": "/datadog"
},
"rehydration_tags": ["team:platform"]
}
Réhydrater (restaurer)
# Aucune commande `pup logs rehydrate` dans pup 0.42.0.
# Utilisez l'interface Datadog ou l'API pour les workflows de réhydratation.
Métriques basées sur les logs
Créez des métriques à partir de logs (moins cher que l'indexation) :
# Lister les métriques basées sur les logs
pup logs metrics list
# Obtenir une métrique par ID
pup logs metrics get api.errors.count
⚠️ Avertissement cardinalité : Groupez uniquement par valeurs bornées.
Données sensibles
Règles de nettoyage
{
"type": "hash-remapper",
"name": "Hash emails",
"sources": ["email", "@user.email"]
}
À ne jamais logger
# Dans votre app - nettoyez avant d'envoyer
import re
def sanitize_log(message: str) -> str:
# Supprimer les cartes de crédit
message = re.sub(r'\b\d{4}[-\s]?\d{4}[-\s]?\d{4}[-\s]?\d{4}\b', '[REDACTED]', message)
# Supprimer les numéros de sécurité sociale
message = re.sub(r'\b\d{3}-\d{2}-\d{4}\b', '[REDACTED]', message)
return message
Dépannage
| Problème | Solution |
|---|---|
| Logs n'apparaissent pas | Vérifiez l'agent, les filtres de pipeline |
| Coûts élevés | Ajoutez des filtres d'exclusion |
| Recherche lente | Réduisez la plage horaire, utilisez les indexes |
| Attributs manquants | Vérifiez le grok parser |