dd-logs

Par datadog-labs · agent-skills

Gestion des logs – recherche, archives, métriques et contrôle des coûts.

npx skills add https://github.com/datadog-labs/agent-skills --skill dd-logs

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 :

  1. Vérifiez d'abord le contexte (résultats antérieurs, conversation, valeurs sauvegardées).
  2. Si une valeur requise manque, exécutez d'abord une commande de découverte.
  3. Si c'est toujours ambigu, demandez à l'utilisateur de confirmer.
  4. Ensuite, exécutez la commande cible.
  5. É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

Références/Documentation

Skills similaires