La corrección está integrada en el TP (Ver los recuadros verdes)
Lo que vas a aprender en este TP
- Crear y simular un pipeline
- Desplegar Data Prepper
- Tipar bien los campos
Introducción #
Lo que vas a aprender en esta sección
- Crear y simular un pipeline
- Desplegar Data Prepper
- Tipar bien los campos
Contexto. Tus logs llegan mal estructurados. Los normalizas primero en el clúster y después con un colector dedicado.
Requisitos: la práctica anterior · Duración estimada: 45 min
Datos limpios y bien tipados.Puesta en marcha #
Pasos guiados, con su corrección.
1. Crear y simular un pipeline
¿Por qué?
Crea el pipeline y pruébalo sin indexar nada._simulateevita estropear datos.Ver la corrección
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. Aplicarlo
¿Por qué? El pipeline se elige al escribir.
Reindexa el lote de la práctica anterior con el pipeline y busca el documento del usuarioalice.Ver la corrección
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. Preparar los tipos
¿Por qué? Sin plantilla,
Crea la plantilla declientipsería texto y la búsqueda por red fallaría.web-logs.Ver la corrección
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. Desplegar Data Prepper
¿Por qué? El procesamiento sale del clúster y descarga sus nodos.
Escribepipelines.yaml, añade el servicio e inícialo.Ver la corrección
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. Enviar y comprobar
¿Por qué? La búsqueda por red demuestra que el tipo
Envía dos líneas de log, espera unos segundos y busca las direcciones deipestá en su sitio.10.0.0.0/8.Ver la corrección
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
Nivel de dificultad : ●●○○○ (2/5)
Mi seguimiento
Inicia sesión para seguir tu progreso y tomar notas. Iniciar sesión
Artículos recomendados
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...
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...
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...
Kibana avancé : data views, Lens, dashboards, alerting et reporting
Exploiter Kibana en profondeur : data views et champs runtime, Discover, Lens et formules, dashbo...
Les Data Sources dans Grafana : Connectez et unifiez vos données
Apprenez à étendre les capacités de Grafana via les Data Sources. Découvrez les plugins essentiel...
Fluent Bit : les outputs (sorties), routage et fiabilité de l'envoi
Envoyer les données de Fluent Bit : routage par Match et Match_Regex, sorties Loki, Elasticsearch...
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...
Indexer et chercher dans OpenSearch : mapping, DSL, PPL et SQL
Déclarer un modèle d'index, indexer avec bulk, chercher avec le Query DSL, agréger et interroger ...