Project Oxygen & Ideo-LabIDEO LAB Dashboard 2026

🐶 DataDog – Le Guide Ultime de l'Observabilité

Deep Dive : Agent, 3 Piliers (Metrics, Traces, Logs), RUM, Sécurité & Projet Pratique.

1.1 Facile

Vue d'ensemble

Plateforme SaaS d'Observabilité. "Single pane of glass".

SaaS Observabilité
1.2 Moyen

Les 3 Piliers (M-T-L)

Métriques (Quoi), Traces (Où/Pourquoi), Logs (Détail).

Metrics Traces Logs
1.3 Moyen

L'Agent (Architecture)

Le collecteur (Go). (Host, DogStatsD, APM, Logs, AutoDiscovery).

Agent Collecteur
1.4 Moyen

Installation : L'Agent

DD_API_KEY. One-liner (Linux), Docker, Kubernetes (Helm).

Agent Install Docker Kubernetes
2.1 Moyen

Agent (Dépannage CLI)

status, configcheck, flare, check.

Agent CLI status
2.2 Avancé

Concept Clé : Tagging

Le "pivot". env:prod, service:api-users. (Corrélation M-T-L).

Tagging Corrélation
2.3 Moyen

Agent (Configuration)

datadog.yaml (Host) vs Variables d'Env (Docker/K8s).

datadog.yaml DD_ENV
2.4 Avancé

Agent (Autodiscovery)

Dynamique. Labels (Docker) & Annotations (K8s).

Autodiscovery Labels
3.1 Moyen

Pilier 1 : Types de Métriques

Gauge, Count, Rate, Histogram (p95), Set (Uniques).

Metrics Gauge Histogram
3.2 Moyen

Métriques (Intégrations)

conf.d/. Ex: postgres.d/conf.yaml, nginx.d/conf.yaml.

Intégrations conf.d
3.3 Moyen

Métriques (Custom)

StatsD (DogStatsD) (UDP: 8125). statsd.increment('page.views').

DogStatsD Custom Metrics
3.4 Facile

Visualisation : Dashboards

Timeboards vs Screenboards. (Widgets : Timeseries, Query Value).

Dashboards Widgets
4.1 Moyen

Querying (Requêtes)

avg:metric{tags} by {group}. (Anatomie d'une requête).

Query avg: by {}
4.2 Moyen

Pilier 2 : APM (Intro)

Application Performance Monitoring. Traces (Requête) & Spans (Opération).

APM Traces Spans
4.3 Moyen

APM (Instrumentation)

Auto-instrumentation (dd-trace-run, javaagent).

dd-trace javaagent
4.4 Avancé

APM (Spans Custom)

@tracer.wrap(). Instrumenter la logique métier (ex: validate_cart).

@tracer.wrap Custom Spans
5.1 Moyen

Pilier 3 : Logs (Collecte)

logs_enabled: true. (File, TCP, Docker/K8s stdout).

Log Management stdout
5.2 Moyen

Logs (Parsing & Facets)

Pipelines (Grok vs JSON). Attributs vs Facets (Indexés).

Parsing Grok Facets
5.3 Facile

Logs (Search & Patterns)

service:api status:error "payment failed". (Patterns User {id}).

Log Search Log Patterns
5.4 Avancé

Corrélation (M-T-L)

Le "Saint Graal". Pivot (trace_id) de Traces <-> Logs. (APM -> Métriques).

Corrélation trace_id
6.1 Moyen

Produit : RUM (Frontend)

Real User Monitoring. @datadog/browser-rum. (Core Web Vitals).

RUM Frontend
6.2 Avancé

Produit : Sécurité

SIEM (Logs), CSPM (Cloud), CWS (Host), ASM (APM/Traces).

Security SIEM ASM
6.3 Moyen

Produit : Monitors (Alerting)

IF avg(cpu) > 90% THEN @slack. (Seuils, Anomalies).

Monitors Alerting
6.4 Avancé

Projet : L'Enquête (Full Stack)

Scénario : "Le checkout est lent". (Pivoter RUM -> APM -> Logs -> Metrics).

Projet Full Stack
1.1 Vue d'ensemble : La Plateforme d'Observabilité SaaS

DataDog est une plateforme **SaaS (Software as a Service)** de **monitoring et d'observabilité** pour les applications cloud modernes.

Son objectif principal est de fournir un **"Single Pane of Glass"** (un tableau de bord unifié) où les équipes (Dev, Ops, Securité) peuvent voir la santé complète de leur système.

Il unifie ce qu'on appelle les **3 Piliers de l'Observabilité** (voir 1.2).

1.2 Les 3 Piliers de l'Observabilité (M-T-L)

Avant DataDog, les entreprises utilisaient des outils "en silo" (ex: Prometheus pour les Métriques, ELK/Splunk pour les Logs, Jaeger pour les Traces). La force de DataDog est de **corréler** les 3 piliers grâce aux **Tags** (voir 2.2).

PilierProduit DataDogQuestionExemple
Metrics (Métriques)Infrastructure, Custom MetricsQuoi ? (Le symptôme)"Le CPU est à 95%."
Traces (Traçabilité)APM (Application Monitoring)Où / Pourquoi ? (La cause)"Le CPU est haut car la fonction checkout_api est lente."
Logs (Journaux)Log ManagementDétails (Quoi ?)"Erreur: Payment failed for user_id: 123."
Diagramme : Corrélation (Le Workflow de Dépannage)
(ALERTE: CPU > 90%)
      | (Métrique)
      ▼
(Dashboard: Service "API-Payment")
      | (Trace / APM)
      ▼
(Flame Graph: Endpoint "/charge")
      | (Trace / APM)
      ▼
(Span: "validate_payment" (5 sec))
      | (Log / Trace Corrélation)
      ▼
(Log: "ERROR: Timeout API Banque X")
1.3 L'Agent DataDog (Architecture)

L'Agent DataDog est le "collecteur" (un binaire léger écrit en Go) que vous installez sur **chaque** machine (Host, VM, Nœud K8s) ou en tant que "sidecar" (conteneur).

Il n'effectue **aucun** calcul (zéro agrégation). C'est un "agent de transfert" (forwarder) dont le seul rôle est de :

  • Collecter les 3 piliers (Métriques, Traces, Logs).
  • Tagger ces données (voir 2.2).
  • Envoyer (flush) ces données (via HTTPS/TLS) à l'endpoint de votre organisation DataDog (ex: api.datadoghq.eu).
Diagramme : Architecture de l'Agent (Simplifié)
(Votre Machine Hôte: VM, Nœud K8s)
+-----------------------------------------------------------+
| +-------------------------------------------------------+ |
| | Agent DataDog (Binaire 'datadog-agent')               | |
| +-------------------------------------------------------+ |
| | 1. Collecteur (Host) | 2. DogStatsD  | 3. APM Agent     | |
| | (CPU, Mem, Disk...)  | (Port 8125/UDP) | (Port 8126/TCP)  | |
| +----------------------+---------------+----------------+ |
| | 4. Collecteur (Logs) | 5. Intégrations (conf.d)       | |
| | (Tail /var/log/...)  | (Ex: postgres.d, nginx.d)      | |
| +----------------------+--------------------------------+ |
| | 6. Autodiscovery (Docker/K8s)                         | |
| +-------------------------------------------------------+ |
|             | (HTTPS / DD_API_KEY)                      |
|             ▼                                           |
| +-------------------------------------------------------+ |
| | DataDog SaaS Platform (Cloud)                         | |
+-----------------------------------------------------------+
1.4 Installation Détaillée de l'Agent

L'installation dépend de votre infrastructure. DD_API_KEY et DD_SITE (ex: datadoghq.eu) sont requis.

Linux (Ubuntu/Debian)

Installe l'Agent en tant que service systemd.

# (La commande "one-liner" fournie par DataDog)
DD_AGENT_MAJOR_VERSION=7 DD_API_KEY="VOTRE_API_KEY" DD_SITE="datadoghq.eu" \
bash -c "$(curl -L https://s3.amazonaws.com/dd-agent/install_script.sh)"

# (Démarre l'agent)
sudo systemctl start datadog-agent
Docker (Container)

L'Agent doit monter des volumes de l'Hôte pour voir les métriques (/proc) et les autres conteneurs (docker.sock).

docker run -d --name datadog-agent \
   --cgroupns host \
   -v /var/run/docker.sock:/var/run/docker.sock:ro \
   -v /proc/:/host/proc/:ro \
   -v /sys/fs/cgroup/:/host/sys/fs/cgroup:ro \
   -e DD_API_KEY="VOTRE_API_KEY" \
   -e DD_SITE="datadoghq.eu" \
   -e DD_APM_ENABLED="true" \
   -e DD_LOGS_ENABLED="true" \
   -e DD_LOGS_CONFIG_CONTAINER_COLLECT_ALL="true" \
   gcr.io/datadoghq/agent:latest
Kubernetes (Helm Chart)

La méthode standard. Déploie l'Agent en DaemonSet (1 pod/nœud).

# 1. Ajouter le repo Helm
helm repo add datadog https://helm.datadoghq.com
helm repo update

# 2. Installer
helm install datadog-agent datadog/datadog \
    --set datadog.apiKey="VOTRE_API_KEY" \
    --set datadog.site="datadoghq.eu" \
    --set datadog.clusterName="mon-cluster-prod" \
    --set logs.enabled="true" \
    --set logs.containerCollectAll="true" \
    --set apm.enabled="true"
2.1 Agent (Dépannage CLI)

Commandes vitales (sur l'hôte/pod de l'Agent) pour vérifier que la collecte fonctionne.

Commande (CLI)Description
datadog-agent statusÉtat de l'Agent et de tous les "Checks" (Intégrations). (Le N°1).
datadog-agent configcheckMontre la configuration "chargée" (fusion de .yaml et Autodiscovery).
datadog-agent flareCrée une archive ZIP (logs, configs) à envoyer au Support DataDog.
datadog-agent check <nom_check>Force l'exécution d'un check (ex: datadog-agent check postgres) et affiche les métriques.
Exemple Console (datadog-agent status)
$ sudo datadog-agent status
[...]
Checks
======
  nginx (nginx.d/conf.yaml)
  -------------------------
    Instance ID: nginx: [...] [OK]
    Metrics: 7, Events: 0, Service Checks: 1

  postgres (postgres.d/conf.yaml)
  -------------------------------
    Instance ID: postgres: [...] [ERROR]
    Error: "Connection error: ..."
    (-> ERREUR: L'agent ne peut pas se connecter à Postgres)
            
2.2 Concept Clé : Tagging (Le "Pivot")

Les **Tags** (key:value) sont le concept le plus important. C'est le "ciment" qui lie les Métriques, Traces et Logs.

DataDog unifie les données grâce à 3 tags (réservés) :

  • env : L'environnement (ex: env:prod, env:staging).
  • service : Le microservice (ex: service:api-payment, service:frontend).
  • version : La version de l'application (ex: version:1.5.2).

Si une Métrique (cpu.load), une Trace (http.request) et un Log (error) partagent le tag service:api-payment, DataDog peut les corréler automatiquement.

2.3 Agent (Configuration datadog.yaml)

La configuration principale (/etc/datadog-agent/datadog.yaml) définit les paramètres globaux (Clé API, Site, Tags, APM, Logs).

Exemple (datadog.yaml)
# Fichier: /etc/datadog-agent/datadog.yaml

# 1. Clés (requis)
api_key: VOTRE_CLE_API_32_CHAR
site: datadoghq.eu

# 2. TAGGING GLOBAL (Le plus important !)
# Ces tags seront ajoutés à TOUTES les données (CPU, Logs, Traces)
tags:
  - env:production
  - region:eu-west-1
  - project:ecommerce

# 3. Activation APM (Traces)
apm_config:
  enabled: true
  # (Les traces hériteront des tags 'env', 'region', 'project')

# 4. Activation Logs
logs_enabled: true
    
2.4 Agent (Autodiscovery - Docker/K8s)

En environnement dynamique (Kubernetes), on utilise l'Autodiscovery. L'Agent écoute l'API K8s/Docker et applique des configurations basées sur les Annotations (K8s) ou Labels (Docker) des conteneurs.

Exemple (Annotation K8s Deployment.yaml)
# (deployment-nginx.yaml)
apiVersion: apps/v1
kind: Deployment
spec:
  template:
    metadata:
      annotations:
        # (Instructions pour l'Agent DataDog (Autodiscovery))
        
        # 1. Logs: Applique ces tags aux logs 'stdout' de ce pod
        "ad.datadoghq.com/nginx.logs": |
          [
            {
              "source": "nginx",
              "service": "frontend-web"
            }
          ]
        
        # 2. Métriques: Applique ce "check" d'intégration à ce pod
        "ad.datadoghq.com/nginx.checks": |
          {
            "nginx": {
              "instances": [
                {
                  "nginx_status_url": "http://%%host%%/nginx_status/"
                }
              ]
            }
          }
    spec:
      containers:
      - name: nginx
        image: nginx:latest
3.1 Pilier 1 : Types de Métriques

Comprendre les 4 types de métriques est essentiel pour savoir *comment* les interroger.

TypeDescriptionExempleType d'agrégation
GAUGE (Jauge)Une valeur ponctuelle. Le "snapshot" d'un état.system.mem.used (4.5 GB)avg, max, min, last
COUNT (Compteur)Un compteur qui ne fait qu'augmenter (incrémental).nginx.requests.total (5,001,000)sum (Total sur la période)
RATE (Taux)(Un COUNT calculé "par seconde"). DataDog le calcule.nginx.requests.per.second (50 req/s)avg, max (Taux moyen, Taux max)
HISTOGRAMUne distribution statistique d'une valeur.api.response.latency_msp95, p99, avg, max, count
3.2 Métriques (Intégrations - conf.d)

Une "Intégration" est un "check" (script) que l'Agent exécute pour collecter des métriques/logs spécifiques à une technologie (ex: NGINX, Postgres, Redis, Kafka...).

On les configure dans /etc/datadog-agent/conf.d/[nom_integration].d/conf.yaml (ou via Autodiscovery, voir 2.4).

Exemple (postgres.d/conf.yaml)
# Fichier: /etc/datadog-agent/conf.d/postgres.d/conf.yaml
init_config:

instances:
  - host: my-db-instance.rds.amazonaws.com # Endpoint de la DB
    port: 5432
    username: datadog
    password: "VOTRE_PASSWORD_SECURISE"
    dbm: true # (Active Database Monitoring)
    
    # (Tags cruciaux)
    tags:
      - env:production
      - service:postgres-primary
      - db:shop-db
3.3 Métriques (Custom - DogStatsD)

DogStatsD (basé sur StatsD) est le service (inclus dans l'Agent) qui écoute (sur un port UDP, 8125) les métriques custom (applicatives/business) de vos applications.

Exemple (Python)
# (Nécessite: pip install datadog)
from datadog import initialize, statsd

initialize() # (Se connecte à l'Agent local: localhost:8125)

# --- Cas d'usage : Un utilisateur finalise un paiement ---

tags = ["env:prod", "payment_provider:stripe"]

# 1. COUNT (Incrémente)
statsd.increment(
    "ecommerce.order.completed",
    tags=tags
)

# 2. HISTOGRAM (Distribution)
statsd.histogram(
    "ecommerce.payment.value",
    cart_value, # (ex: 45.50)
    tags=tags
)

# 3. SET (Compte les utilisateurs uniques)
statsd.set(
    "ecommerce.users.active",
    user_id,
    tags=tags
)
3.4 Visualisation : Dashboards

Les Dashboards sont l'interface "drag-and-drop" pour visualiser les métriques (et logs/traces).

  • Timeboards (Défaut) : Axe X = Temps. (Pour l'investigation).
  • Screenboards : Grille libre (layout fixe). (Pour les "Status Boards", ex: TV).
Widgets Principaux
  • Timeseries : Le graphique linéaire (le plus utilisé).
  • Query Value : Un seul chiffre (ex: "CPU Actuel").
  • Top List : Classement (ex: "Top 5 hosts par CPU").
  • Heat Map : Distribution (ex: "Latence p95 par service").
  • Host Map : Visualisation de votre infrastructure (1 carré = 1 host).
  • Log Stream : Affiche les logs (filtrés) en direct.
4.1 Querying (Requêtage des Métriques)

La syntaxe de requête des widgets est standardisée.

Diagramme : Anatomie d'une Requête
  avg:system.cpu.user{env:prod, service:api-users} by {host}
  \__/ \_____________/ \_________________________/    \______/
    |         |                   |                     |
    |         |                   |                     |
 1. Aggregator  2. Metric Name      3. Filter (Scope)     4. Group By (Dimension)
 (avg, sum,    (Ce qu'on mesure)   (WHERE)               (GROUP BY)
  max, min,
  p95, ...)
    
Exemples de Requêtes
# 1. CPU Moyen (Global) (1 ligne)
avg:system.cpu.user{env:prod}

# 2. CPU Moyen par Host (N lignes)
avg:system.cpu.user{env:prod} by {host}

# 3. Latence p99 (Histogram) du paiement Stripe
p99:ecommerce.payment.latency_ms{payment_provider:stripe} by {region}

# 4. (Fonctions)
# (Moyenne mobile (smoothing) sur la latence p95)
smooth(p95:trace.http.request.latency{service:api-payment})

# (Alerte si le taux d'erreur (roll-up) est > 5%)
sum:trace.http.request.errors{service:api-payment}.as_count() / \
sum:trace.http.request.hits{service:api-payment}.as_count() > 0.05
4.2 Pilier 2 : APM (Traces & Spans)

L'APM (Application Performance Monitoring) est le processus qui suit une requête **à travers** votre application et **à travers** les microservices (Tracing Distribué).

  • Trace : L'ensemble du "voyage" d'une requête (ex: GET /api/checkout).
  • Span : Une "unité de travail" (une opération) **à l'intérieur** d'une Trace (ex: db.query, http.request).
Diagramme : Anatomie d'une Trace Distribuée
(Trace ID: 123)
+--- Service: Frontend (Span A: 1100ms)
|    |
|    +---- [Span B: Appel API /api/users (1000ms)] -------------------------------+
|    |                                                                         |
|    |                                Service: API-Users (Span C: 950ms)     |
|    |                                |                                      |
|    |                                +--- [Span D: Auth Check (500ms)] -----+
|    |                                |                                   |
|    |                                |    Service: DB-Auth (Span E: 450ms)|
|    |                                |                                   |
|    |                                +-----------------------------------+
|    |                                |                                      |
|    |                                +--- [Span F: Business Logic (400ms)]
|    |                                |                                      |
|    |                                +--------------------------------------+
|    |                                                                         |
|    +-------------------------------------------------------------------------+
4.3 APM (Auto-Instrumentation)

L'APM (Tracing) nécessite : 1. L'Agent (local) (DD_APM_ENABLED=true). 2. La bibliothèque (lib) de tracing dans votre app.

Cette lib utilise l'**Auto-Instrumentation** : elle "monkey-patche" les bibliothèques courantes (Flask, Django, requests, Redis...) pour qu'elles émettent des Spans.

Python (dd-trace-py)
# 1. Installer
pip install dd-trace

# 2. Configurer (Tags unifiés)
export DD_ENV="production"
export DD_SERVICE="api-users"
export DD_VERSION="1.2.0"

# 3. Lancer (Ex: app Flask)
# (dd-trace-run patche automatiquement Flask, requests, ...)
dd-trace-run gunicorn myapp:app
Java (dd-java-agent.jar)
# Lancer l'application .jar
java -javaagent:./dd-java-agent.jar \
     -Ddd.env="production" \
     -Ddd.service="api-payments" \
     -Ddd.version="1.2.0" \
     -jar /path/to/my-app.jar
Node.js (dd-trace)
# 1. Installer
npm install dd-trace

# 2. Initialiser (index.js - TOUT EN HAUT)
const tracer = require('dd-trace');
tracer.init({
    env: 'production',
    service: 'api-frontend'
});

// (Reste du code... ex: require('express'))
const express = require('express');
4.4 APM (Spans Custom)

L'auto-instrumentation (4.3) ne voit pas votre **logique métier**. (Où sont passées les 450ms entre le début de la requête et l'appel DB ?). On utilise Spans Custom (via décorateur) pour profiler la logique métier.

Exemple (Python - Décorateur @tracer.wrap())
from ddtrace import tracer

# 1. Instrumentation Custom
@tracer.wrap(
    name="ecommerce.validation",  // (Nom du Span)
    service="api-checkout"        // (Tag 'service')
)
def validate_cart(cart):
    
    # 2. Récupérer le Span (optionnel)
    span = tracer.current_span()
    
    # 3. Ajouter des Tags Custom (CRUCIAL)
    # (Permet de rechercher/filtrer les traces)
    span.set_tag("cart.id", cart.id)
    span.set_tag("user.id", cart.user_id)
    
    try:
        # (Logique métier...)
        if cart.value > 10000:
            span.set_tag("cart.review_required", True)
        
    except Exception as e:
        # 4. Reporter les erreurs
        span.set_tag("error", True)
        span.set_exc_info(type(e), e, e.__traceback__)
        raise
        
    return True
5.1 Pilier 3 : Logs (Collecte)

Activer la collecte de logs (logs_enabled: true dans datadog.yaml) et définir les sources.

Méthode de CollecteDescriptionCas d'usage
File (Tailing)L'Agent "surveille" (tail) un fichier (ex: /var/log/nginx.log).Serveurs "legacy" (VMs).
Docker/K8s (stdout)(Standard Moderne) L'Agent collecte automatiquement les flux stdout/stderr de TOUS les conteneurs (via Autodiscovery).Microservices, Kubernetes.
TCP / UDPL'Agent ouvre un port (ex: 10518) et écoute les logs (ex: Syslog, Handlers applicatifs).Routeurs, Firewalls, Applications (Python/Java logging).
5.2 Logs (Parsing, Pipelines & Facets)

La Règle d'Or : Loguez en JSON ! Si vous loguez en JSON, DataDog parse automatiquement les attributs. Si vous loguez en texte brut (ex: NGINX), DataDog doit utiliser un "Pipeline de Parsing" (Grok) pour extraire les attributs (plus lent, coûteux).

Diagramme : Pipeline de Log (Simplifié)
(Log Brut Reçu)
"10.1.2.3 - - [10/Oct/2025:13:55:36] "GET /api/v1/user" 200"

      |
      ▼
+------------------------------------------------+
| Pipeline (Matching 'source:nginx')             |
+------------------------------------------------+
| 1. Parser (Grok)                               |
| (Extrait "GET", "/api/v1/user", 200)           |
|      |                                         |
|      ▼                                         |
| 2. Remapper (Attributs)                        |
| ('http.status_code' = 200)                     |
| ('http.method' = "GET")                        |
|      |                                         |
|      ▼                                         |
| 3. Create Facets (Indexation)                  |
| (Rendre '@http.status_code' filtrable)         |
+------------------------------------------------+

Attribut vs Facet : Un Attribut (ex: user.id) est stocké. Une Facet (ex: @user.id) est un attribut que vous avez "promu" (indexé) pour permettre le filtrage et l'agrégation.

5.3 Logs (Search & Patterns)

L'interface "Log Explorer" permet de rechercher et de filtrer (via les "Facets") tous les logs.

Syntaxe de Recherche
# 1. Full-text
"payment failed"

# 2. Facets (Tags)
status:error service:api-payment

# 3. Facets (Attributs parsés)
# (Nécessite Facet sur 'http.status_code')
env:prod @http.status_code:[500 TO 599]

# 4. (Recherche + Facets)
env:prod service:api-users "user_id:123"

# 5. (Wildcards)
@http.url_path:"/api/v1/users/*/profile"

Patterns (Modèles) : DataDog regroupe automatiquement les logs similaires (ex: User {id} failed login [Count: 1M]) pour réduire le bruit.

5.4 Corrélation (M-T-L) - Le "Saint Graal"

C'est la fonctionnalité la plus puissante. L'APM (dd-trace) **injecte** le trace_id et span_id dans vos logs (s'ils sont en JSON, ou si DD_LOGS_INJECTION=true).

Exemple (Log Python JSON)
{
  "timestamp": "2024-10-27T10:30:05Z",
  "level": "ERROR",
  "message": "Payment failed for user 123",
  "service": "api-payment",
  
  // (Injecté par dd-trace)
  "dd": {
    "trace_id": "4567890123456",
    "span_id": "9876543210987"
  }
}

Résultat :
1. (Vue "Trace" -> "Logs") : Vous regardez un Flame Graph (Trace APM) d'une requête /checkout lente. L'onglet "Logs" vous montre uniquement les logs de *cette requête précise*.
2. (Vue "Log" -> "Trace") : Vous trouvez ce Log d'erreur. Vous cliquez sur le trace_id. DataDog vous amène au Flame Graph complet, vous montrant ce qui s'est passé *avant* et *après* l'erreur.

6.1 Produit : RUM (Real User Monitoring)

Le RUM est l'APM du **Frontend** (Navigateur). On l'installe via npm install @datadog/browser-rum ou un <script> (voir Partie 5).

Il capture :

  • Core Web Vitals : LCP, FID, CLS (performance perçue).
  • Ressources : Temps de chargement (JS, CSS, Images, fetch/XHR).
  • Erreurs JS : (ex: TypeError: 'price' of undefined).
  • Actions Utilisateur : (ex: "Clic sur #btn-checkout").
  • Session Replay : Enregistrement (vidéo) de la session utilisateur.

Corrélation RUM <-> APM : Le RUM injecte les headers x-datadog-trace-id dans les appels fetch/XHR. L'APM (backend) les reçoit et continue la Trace. (Voir Projet 6.4).

6.2 Produit : Security Platform (DevSecOps)

DataDog analyse les M-T-L pour la sécurité.

ProduitPilier utiliséDescription
SIEMLogsDétecte les menaces (ex: "Brute force login") en analysant les logs (Infra, Auth...).
CSPMMetrics (API Cloud)Cloud Security Posture. (Ex: "Bucket S3 ouvert au public").
CWSMetrics (Agent)Cloud Workload Security. (Ex: "Fichier /etc/passwd modifié").
ASMTraces (APM)Application Security. (Ex: "Détection d'injection SQL" dans une trace APM).
6.3 Produit : Monitors (Alerting)

Un Monitor est une règle (ex: seuil, anomalie) qui se déclenche (Alert, Warn) et envoie une notification (ex: Slack, PagerDuty, E-mail).

Exemples de Monitors
  • Métrique (Seuil) : avg(last_5m):system.cpu.user{env:prod} > 90
  • Métrique (Anomalie) : anomaly(last_1h):nginx.requests.total{service:web} > 3 (Détection (ML) de pic inhabituel).
  • Log (Count) : logs("status:error service:api-payment").index("payment_failed").count() > 10
  • APM (Latence) : avg(last_10m):trace.http.request.p95{env:prod,service:frontend} > 2000ms
  • RUM (Erreur JS) : rum("error").count_by("error.message").rollup("10m") > 100
6.4 🏗️ Projet : L'Enquête (Full Stack)

Scénario : "Les clients se plaignent que le checkout est lent !" (Alerte RUM > 8 secondes)

1. RUM (Frontend) - "Où est la latence ?"

On filtre sur l'action RUM click on #btn-checkout. On voit que 99% du temps (7950ms) est passé en "Backend (Réseau)" sur la requête POST /api/checkout.
Pivot : On clique sur "View Trace".

2. APM (Backend) - "Où est le goulot d'étranglement ?"

On voit le Flame Graph de la trace. Le span flask.request (7950ms) contient un span custom ecommerce.validation (7500ms), qui contient un span postgres.query (7200ms).
Diagnostic : L'INSERT dans la DB prend 7.2 secondes.
Pivot : On clique sur l'onglet "Logs" (corrélés) de cette trace.

3. Logs (Détail) - "Y a-t-il une erreur ?"

Les logs (filtrés sur trace_id) montrent : INFO: Checkout initiated, WARN: Slow query detected (7200ms) for statement: INSERT INTO orders...
Diagnostic : Pas d'erreur, mais une requête INSERT très lente. Hypothèse : Verrou (Lock).
Pivot : On clique sur le tag service:db-postgres-primary (associé au span/log).

4. Métriques (Infra) - "La DB est-elle saine ?"

On arrive au Dashboard de l'Intégration Postgres. On regarde la métrique postgresql.locks (groupée by {lock_mode}) au moment de l'incident.
Cause Racine : On voit un pic massif de access_exclusive_lock.
Action : Un autre service (ex: service:reporting-batch) exécute un TRUNCATE ou VACUUM FULL sur la table orders, bloquant tous les INSERT de l'API de paiement.

7.3 Cheat-sheet (Agent CLI & DogStatsD)
Agent CLI (Dépannage)

(Exécuter en tant que datadog-agent ou docker exec -it datadog-agent ...)

# (État de l'Agent et des "Checks")
datadog-agent status

# (Vérifier la config (YAML))
datadog-agent configcheck

# (Vérifier la config (chargée))
datadog-agent config

# (Relancer un "check" d'intégration)
datadog-agent check postgres
DogStatsD (Python Custom Metrics)
from datadog import statsd

# (Tagging unifié)
tags = [
    "env:prod", 
    "service:mon-service"
]

# Compteur
statsd.increment(
    "ma.metrique.count",
    tags=tags
)

# Histogramme (Latence)
statsd.histogram(
    "ma.metrique.latency_ms",
    value=45,
    tags=tags
)