Project Oxygen & Ideo-LabIDEO LAB Dashboard 2026

🐶 DataDog – La Plateforme d'Observabilité Unifiée

Guide complet IDEO-Lab : 3 Piliers (Metrics, Traces, Logs), Agent, APM, RUM & Dashboards.

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 (Quoi/Détail).

Metrics Traces (APM) Logs
1.3 Moyen

Installation : L'Agent

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

Agent API Key
2.1 Moyen

Architecture de l'Agent

datadog.yaml, conf.d/, Autodiscovery (Docker/K8s).

datadog.yaml Autodiscovery
2.2 Avancé

Concept N°1 : Tagging

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

Tagging Corrélation
2.3 Moyen

Concept N°2 : Intégrations

postgres.d/conf.yaml. (AWS, NGINX, Kafka...).

Intégrations conf.d
3.1 Facile

Pilier 1 : Metrics (Infra)

CPU, Mem, Disk, Network. (Host Map, Container Map).

Infrastructure CPU/Mem
3.2 Moyen

Metrics (Custom)

StatsD (DogStatsD), API. (statsd.increment('page.views')).

DogStatsD Custom Metrics
3.3 Facile

Visualisation : Dashboards

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

Dashboards Widgets
4.1 Moyen

Pilier 2 : Log Management

Collecte (Agent, API). logs_enabled: true. (JSON/Grok Parsing).

Log Management Parsing
4.2 Facile

Logs (Search & Analytics)

service:api-users status:error "payment failed".

Log Search Facets
4.3 Moyen

Logs (Patterns & Corrélation)

Regroupe User {id} login. (Corrélation trace_id).

Log Patterns trace_id
5.1 Moyen

Pilier 3 : APM (Traces)

Application Performance Monitoring. (Auto-instrumentation).

APM Instrumentation
5.2 Moyen

APM (Installation)

dd-trace-py (Python), dd-java-agent.jar (Java).

dd-trace javaagent
5.3 Avancé

Traces & Spans (Distribué)

Trace (Requête), Span (Opération). (Flame Graph / Waterfall).

Trace Span
6.1 Moyen

Produit : RUM

Real User Monitoring (Frontend). @datadog/browser-rum.

RUM Frontend
6.2 Avancé

Produit : Security

SIEM (Logs), CSPM (Cloud), CWS (Host), ASM (App).

Security SIEM
6.3 Moyen

Produit : Monitors (Alerting)

IF avg(cpu) > 90% for 5m THEN @slack. (Alertes).

Monitors Alerting
7.1 Avancé

🏗️ Projet Fictif (E-commerce)

Architecture complète (RUM, APM, Logs, Infra) tagguée.

Projet Architecture
7.2 Facile

Liens Utiles & Formation

datadoghq.com (Docs), Datadog University (Gratuit).

Documentation Datadog University
7.3 Facile

Cheat-sheet

Commandes Agent (status, configcheck), DogStatsD.

cheat Agent CLI
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
(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 Installation : L'Agent DataDog

L'Agent DataDog est le collecteur (écrit en Go) que l'on installe sur **chaque** machine (Host, VM, Kuberenetes Node, Container).

Il collecte les Métriques (Host, Intégrations), les Logs (Tailing), et les Traces (APM) et les envoie (via HTTPS) à l'API DataDog (SaaS).

L'installation (DD_API_KEY) est fournie dans l'interface DataDog.

Linux (Ubuntu/Debian)
# (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)
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" \
   gcr.io/datadoghq/agent:latest
Kubernetes (K8s)

L'installation se fait via **Helm Chart** (recommandé) ou un manifest.

L'agent est déployé en tant que DaemonSet (un pod d'agent par Nœud du cluster) pour la collecte des métriques/logs des Nœuds et des Pods (via Autodiscovery).

# (Ajouter le repo Helm)
helm repo add datadog https://helm.datadoghq.com

# (Installer)
helm install datadog-agent \
    --set datadog.apiKey="VOTRE_API_KEY" \
    --set datadog.site="datadoghq.eu" \
    datadog/datadog
2.1 Architecture de l'Agent

La configuration de l'Agent se trouve (sous Linux) dans /etc/datadog-agent/.

Fichier / DossierDescription
datadog.yamlConfiguration **principale** (API Key, Site, Tags (env, service), APM, Logs).
conf.d/Dossier des **Intégrations**. (Un dossier par techno, ex: postgres.d/).
conf.d/auto_conf/(K8s/Docker) Configuration "Autodiscovery" via les labels des containers.
logs.d/ (Legacy)(Legacy) Configuration de la collecte de logs (maintenant dans datadog.yaml ou conf.d/).
2.2 Concept N°1 : 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.

Configuration (datadog.yaml)
# (Configuration globale des tags pour cet Agent)
tags:
  - env:production
  - region:us-east-1
  - service:backend-api

# (Configuration APM)
apm_config:
  enabled: true
  env: production # (Hérité)
2.3 Concept N°2 : Intégrations

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, AWS).

On les configure dans /etc/datadog-agent/conf.d/[nom_integration].d/conf.yaml.

Exemple (PostgreSQL)
# (Collecte les métriques de connexion,
# le nombre de "slow queries", etc.)
init_config:

instances:
  - host: localhost
    port: 5432
    username: datadog
    password: "VOTRE_PASSWORD"
    dbm: true # (Active Database Monitoring)
    
    # (Ajoute ces tags à TOUTES les métriques)
    tags:
      - service:postgres-main
      - env:production
Exemple (NGINX)
# (Nécessite 'stub_status' activé dans NGINX)
init_config:

instances:
  - nginx_status_url: http://localhost/nginx_status/
  
    # (Tags)
    tags:
      - service:frontend-web
3.1 Pilier 1 : Metrics (Infrastructure)

L'Agent collecte (par défaut) toutes les métriques système (CPU, Mémoire, Disque, Réseau). C'est le "Core" de DataDog.

Types de Métriques :

  • GAUGE : Une valeur ponctuelle (ex: system.cpu.user).
  • COUNT : Un compteur (ex: nginx.requests.total).
  • HISTOGRAM : Mesure la distribution (p95, p99, avg).
3.2 Metrics (Custom - DogStatsD)

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

Exemple (Python)
# (pip install datadog)
from datadog import initialize, statsd

initialize(api_key="...", app_key="...")

# (Métriques business)
# (Type: COUNT)
statsd.increment(
    "ecommerce.order.completed",
    tags=["env:prod", "payment:stripe"]
)

# (Type: GAUGE)
statsd.gauge(
    "ecommerce.cart.value",
    120.50, // (Valeur)
    tags=["env:prod"]
)

# (Type: HISTOGRAM)
statsd.histogram(
    "ecommerce.checkout.time_ms",
    1500, // (Temps en ms)
    tags=["env:prod"]
)
3.3 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'analyse de séries temporelles).
  • Screenboards : Grille libre (layout fixe). (Pour les "Status Boards", ex: TV).
Widgets Courants
  • Timeseries : Graphique (ex: avg:system.cpu.user{env:prod} by {host}).
  • Query Value : Une seule valeur (ex: le p95 des 5 dernières minutes).
  • Heat Map : Distribution (ex: latence par host).
  • IFrame : Intégrer d'autres sites (ex: Grafana).
4.1 Pilier 2 : Log Management

DataDog ingère, parse, et indexe les logs de toute votre stack.

Configuration (datadog.yaml)
# (Activer la collecte de logs)
logs_enabled: true

# (Option 1: Collecte (Tail) de fichiers)
logs_config:
  - type: file
    path: "/var/log/nginx/access.log"
    service: nginx
    source: nginx
    
# (Option 2: Collecte (Socket/Port))
# (Ex: pour Python logging handler)
logs_config:
  - type: tcp
    port: 10518
    service: python-app
    source: python

En conteneurs (K8s/Docker), l'Agent écoute (Autodiscovery) les logs stdout/stderr (Standard Out) des conteneurs.

4.2 Logs (Search & Analytics)

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

Les **Facets** sont des attributs (tags ou JSON) sur lesquels on peut filtrer/grouper (ex: @http.status_code, @user.id).

Syntaxe de Recherche
// 1. Recherche "Full Text"
"payment failed"

// 2. Recherche (Tags/Facets)
// (Statut 500 ET service 'api')
status:error service:api-payment

// 3. (Recherche + Full Text)
env:prod service:api-users "user_id:123"

// 4. (Wildcards)
@http.url_path:"/api/v1/users/*/profile"
4.3 Logs (Patterns & Corrélation)

Patterns (Modèles) : DataDog regroupe automatiquement les logs similaires pour réduire le bruit (ex: 1 million de logs User {id} login sont regroupés en 1 "Pattern").

Corrélation (trace_id) : Si l'APM (voir 5.1) est activé, DataDog **injecte** un trace_id dans les logs. Cela permet de voir **exactement** les logs (ex: 'error') associés à une trace (ex: requête /checkout lente).

5.1 Pilier 3 : APM (Traces)

APM (Application Performance Monitoring) est le "profiling" (analyse de performance) de votre code, en production et distribué.

L'APM capture les **Traces** (le cycle de vie d'une requête) et les **Spans** (les opérations dans la requête).

La plupart des intégrations APM (Python, Java, Node.js) utilisent l'**Auto-Instrumentation** : elles "patch_ent" (modifient) automatiquement les bibliothèques courantes (Flask, Django, requests, psycopg2) pour qu'elles envoient des Spans.

5.2 APM (Installation)

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

Python (Auto-Instrumentation)
# 1. Installer la lib
pip install dd-trace

# 2. Exécuter l'application (ex: Gunicorn/Flask)
# (dd-trace-run patche automatiquement Flask, requests, ...)
dd-trace-run gunicorn myapp:app
Java (Auto-Instrumentation)
# (L'Agent Java s'attache à la JVM au démarrage)
java -javaagent:/path/to/dd-java-agent.jar \
     -Ddd.service=mon-app-java \
     -Ddd.env=production \
     -jar mon-app.jar
5.3 Traces & Spans (Distribué)

Trace : La requête entière (ex: GET /api/user/123) (composée de Spans).

Span : Une "unité de travail" dans la trace (ex: db.query, http.request, auth.check).

Distributed Tracing : DataDog propage les "headers" (x-datadog-trace-id) entre les services (ex: Frontend -> API -> DB). Il peut ainsi reconstruire la requête **complète** (Service Map) et l'afficher en "Flame Graph" (waterfall) pour voir qui est lent.

6.1 Produit : RUM (Real User Monitoring)

Le RUM (Monitoring Utilisateur Réel) est l'APM du **Frontend** (Navigateur).

On installe le SDK (JavaScript) dans le <head> de l'application (ou via npm install @datadog/browser-rum).

Il capture :

  • Core Web Vitals : LCP, FID, CLS (performance perçue).
  • Ressources : Temps de chargement (JS, CSS, Images).
  • Erreurs JS : (ex: TypeError: undefined is not a function).
  • Actions Utilisateur : (ex: "Clic sur #bouton-checkout").
6.2 Produit : Security Platform

DataDog utilise les 3 Piliers (M-T-L) pour offrir une plateforme de sécurité (DevSecOps).

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)

L'Observabilité ne sert à rien sans **Alerting**. C'est le rôle des **Monitors**.

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 : avg(last_5m):system.cpu.user{env:prod} > 90 (Seuil).
  • Anomalie : anomaly(last_1h):nginx.requests.total{service:web} > 3 (Détection (ML) de pic inhabituel).
  • Log : logs("status:error service:api-payment").index("payment_failed").count() > 10 (Nb d'erreurs).
  • APM : avg(last_10m):trace.http.request.p95{env:prod,service:frontend} > 2000ms (Latence p95).
7.1 🏗️ Projet Fictif (E-commerce)

Objectif : Monitorer une app E-commerce (React + API Python + DB Postgres) sur Kubernetes, tagguée par env:production.

  1. (Cluster K8s) : Installer l'Agent DataDog (Helm Chart). Il collecte automatiquement les métriques (CPU/Mem) des Nœuds et des Pods.
  2. (App React) : Installer RUM (@datadog/browser-rum).
    • Résultat : On voit la performance (LCP) par pays, et les erreurs JS (ex: "Cannot read property 'price' of undefined").
  3. (API Python) : Installer APM (dd-trace-py).
    • Résultat : On voit les traces (ex: POST /checkout). On voit que la trace est lente (3s). Le Flame Graph montre que le Span db.query prend 2.8s.
  4. (DB Postgres) : Configurer l'Intégration (postgres.d/conf.yaml) (via Autodiscovery K8s).
    • Résultat : On voit les métriques de Postgres. La métrique postgresql.connections est à 100% (max).
  5. (Logs) : L'Agent K8s collecte les stdout des pods API (Python).
    • Résultat : On filtre sur service:api-python status:error. On voit "FATAL: too many connections".

Conclusion (grâce au Tagging unifié) : Le RUM (Frontend) est lent, car l'APM (Backend) est lent, car le Span (DB) est lent, car les Métriques (DB) montrent une saturation, car les Logs (DB) confirment "too many connections".

7.3 Cheat-sheet (Agent CLI & DogStatsD)
Agent CLI (Commandes)

(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

# (Redémarrer)
sudo systemctl restart datadog-agent
DogStatsD (Python)
from datadog import statsd

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

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

# Jauge (Gauge)
statsd.gauge(
    "ma.metrique.gauge",
    value=123.45,
    tags=tags
)

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