La correction est intégrée au TP (Voir les encadrés de couleur vert)
Ce que vous allez apprendre dans ce TP
- Créer et simuler un pipeline
- Déployer Data Prepper
- Typer correctement les champs
Introduction #
Ce que vous allez apprendre dans cette section
- Créer et simuler un pipeline
- Déployer Data Prepper
- Typer correctement les champs
Contexte. Vos logs arrivent mal structurés. Vous les normalisez d'abord dans le cluster, puis avec un collecteur dédié.
Prérequis : le TP précédent · Durée estimée : 45 min
Des données propres et bien typées.Mise en place #
Étapes guidées, avec leur correction.
1. Créer et simuler un pipeline
Pourquoi ?
Créez le pipeline, puis testez-le sans rien indexer._simulateévite d'abîmer des données.Voir la correction
curl -sk -u 'admin:Str0ng!Passw0rd-2026' -H 'Content-Type: application/json' -X PUT https://localhost:9200/_ingest/pipeline/logs_nettoyage -d '{ "description": "Normalise le niveau et extrait l utilisateur", "processors": [ {"lowercase": {"field": "level"}}, {"set": {"field": "environnement", "value": "prod"}}, {"grok": {"field": "message", "patterns": ["utilisateur=%{WORD:utilisateur}"], "ignore_failure": true}} ] }' # Essayer sans rien indexer curl -sk -u 'admin:Str0ng!Passw0rd-2026' -H 'Content-Type: application/json' -X POST https://localhost:9200/_ingest/pipeline/logs_nettoyage/_simulate \ -d '{"docs":[{"_source":{"level":"ERROR","message":"refus utilisateur=alice"}}]}'2. L'appliquer
Pourquoi ? Le pipeline se choisit à l'écriture.
Réindexez le lot du TP précédent avec le pipeline, et retrouvez le document de l'utilisateuralice.Voir la correction
curl -sk -u 'admin:Str0ng!Passw0rd-2026' -H 'Content-Type: application/x-ndjson' \ -X POST 'https://localhost:9200/_bulk?pipeline=logs_nettoyage&refresh=true' --data-binary @lot.ndjson curl -sk -u 'admin:Str0ng!Passw0rd-2026' -H 'Content-Type: application/json' -X POST 'https://localhost:9200/logs-app-*/_search' -d '{"query":{"term":{"utilisateur.keyword":"alice"}}}'3. Préparer le typage
Pourquoi ? Sans modèle,
Créez le modèle declientipserait du texte et la recherche par réseau échouerait.web-logs.Voir la correction
curl -sk -u 'admin:Str0ng!Passw0rd-2026' -H 'Content-Type: application/json' -X PUT https://localhost:9200/_index_template/web_logs -d '{ "index_patterns": ["web-logs*"], "template": { "settings": {"number_of_shards": 1, "number_of_replicas": 0}, "mappings": {"properties": { "@timestamp": {"type": "date"}, "clientip": {"type": "ip"}, "verb": {"type": "keyword"}, "request": {"type": "keyword"}, "response": {"type": "integer"}, "bytes": {"type": "integer"} }} } }'4. Déployer Data Prepper
Pourquoi ? Le traitement sort du cluster et décharge ses nœuds.
Écrivezpipelines.yaml, ajoutez le service et démarrez-le.Voir la correction
log-pipeline: source: http: ssl: false port: 2021 path: /log/ingest processor: - grok: match: log: ['%{COMMONAPACHELOG}'] - date: match: - key: timestamp patterns: ["dd/MMM/yyyy:HH:mm:ss Z"] destination: "@timestamp" - convert_type: key: response type: integer - delete_entries: with_keys: ["log"] sink: - opensearch: hosts: ["https://opensearch:9200"] insecure: true username: admin password: "Str0ng!Passw0rd-2026" index: web-logs flush_timeout: 5000services: opensearch: image: opensearchproject/opensearch:3 environment: discovery.type: single-node OPENSEARCH_INITIAL_ADMIN_PASSWORD: ${OPENSEARCH_INITIAL_ADMIN_PASSWORD} OPENSEARCH_JAVA_OPTS: -Xms1g -Xmx1g path.repo: /usr/share/opensearch/data/snapshots ports: - "9200:9200" volumes: - os-data:/usr/share/opensearch/data dashboards: image: opensearchproject/opensearch-dashboards:3 environment: OPENSEARCH_HOSTS: '["https://opensearch:9200"]' ports: - "5601:5601" depends_on: [opensearch] data-prepper: image: opensearchproject/data-prepper:2 ports: - "2021:2021" volumes: - ./pipelines.yaml:/usr/share/data-prepper/pipelines/pipelines.yaml:ro depends_on: [opensearch] volumes: os-data:docker compose up -d5. Envoyer et vérifier
Pourquoi ? La recherche par réseau prouve que le type
Envoyez deux lignes de log, attendez quelques secondes, puis cherchez les adresses deipest bien en place.10.0.0.0/8.Voir la correction
curl -s -X POST -H 'Content-Type: application/json' http://localhost:2021/log/ingest -d '[ {"log":"127.0.0.1 - frank [04/Nov/2026:10:00:00 +0100] \"GET /index.html HTTP/1.1\" 200 2326"}, {"log":"10.0.0.8 - alice [04/Nov/2026:10:00:01 +0100] \"GET /admin HTTP/1.1\" 403 120"} ]'sleep 10 curl -sk -u 'admin:Str0ng!Passw0rd-2026' -H 'Content-Type: application/json' -X POST https://localhost:9200/web-logs/_search -d '{"query":{"term":{"clientip":"10.0.0.0/8"}}}' curl -sk -u 'admin:Str0ng!Passw0rd-2026' -H 'Content-Type: application/json' https://localhost:9200/web-logs/_mapping
Niveau de difficulté : ●●○○○ (2/5)
Mon suivi
Connectez-vous pour suivre votre progression et prendre des notes. Se connecter
Articles recommandés
Alimenter OpenSearch : pipelines d'ingestion et Data Prepper
Transformer les données avec les pipelines d'ingestion, collecter avec Data Prepper, recevoir l'O...
OpenSearch : concepts, architecture et différences avec Elasticsearch
Comprendre OpenSearch : origine du projet, licence, différences avec Elasticsearch, index, shards...
Ingestion Elasticsearch : Bulk API, ingest pipelines, enrich et reindex
Ingérer et transformer des données dans Elasticsearch : Bulk API, ingest pipelines et processeurs...
Data streams et templates Elasticsearch : component templates, index templates et séries temporelles
Gérer les données horodatées avec les data streams : index templates et component templates, conv...
Métriques Dynatrace : Data Explorer, sélecteurs de métriques, API et tableaux de bord
Exploiter les métriques dans Dynatrace : métriques intégrées et personnalisées, Data Explorer, sy...
Index Lifecycle Management (ILM) : data tiers, rollover et rétention
Automatiser le cycle de vie des index avec ILM : data tiers hot, warm, cold et frozen, rollover p...
Fluent Bit : parsers et filters, structurer et transformer les logs
Structurer et transformer les logs dans Fluent Bit : parsers (json, regex, logfmt, ltsv), parsers...
Grafana Alloy et les logs : collecter et envoyer vers Loki
Découvrez comment configurer Grafana Alloy pour lire des fichiers de logs, journald ou des flux r...
Logs Datadog avancés : index, filtres d'exclusion, Flex Logs, archives et Sensitive Data Scanner
Maîtriser coût et conformité des logs Datadog : pipelines et processeurs, index et rétention, fil...