La corrección está integrada en el TP (Ver los recuadros verdes)
Lo que vas a aprender en este TP
- Iniciar OpenSearch
- Declarar los tipos
- Buscar y agregar
Introducción #
Lo que vas a aprender en esta sección
- Iniciar OpenSearch
- Declarar los tipos
- Buscar y agregar
Contexto. Tu equipo quiere un motor de búsqueda de logs con licencia Apache 2.0. Evalúas OpenSearch con una maqueta.
Requisitos: Docker Compose, 4 GB de memoria libre · Duración estimada: 45 min
Un nodo y su consola.Puesta en marcha #
Pasos guiados, con su corrección.
1. Iniciar la pila
¿Por qué? Sin una contraseña fuerte, OpenSearch no arranca.
Escribe.envy el Compose, ajustavm.max_map_county comprueba el estado del clúster.Ver la corrección
OPENSEARCH_INITIAL_ADMIN_PASSWORD=Str0ng!Passw0rd-2026services: 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] volumes: os-data:sudo sysctl -w vm.max_map_count=262144 docker compose up -d curl -sk -u 'admin:Str0ng!Passw0rd-2026' -H 'Content-Type: application/json' https://localhost:9200/_cat/health?v2. Declarar una plantilla de índice
¿Por qué? El tipo de un campo no cambia tras la primera escritura.
Crea una plantilla paralogs-app-*.Ver la corrección
curl -sk -u 'admin:Str0ng!Passw0rd-2026' -H 'Content-Type: application/json' -X PUT https://localhost:9200/_index_template/logs_app -d '{ "index_patterns": ["logs-app-*"], "template": { "settings": {"number_of_shards": 1, "number_of_replicas": 0}, "mappings": {"properties": { "@timestamp": {"type": "date"}, "level": {"type": "keyword"}, "service": {"type": "keyword"}, "message": {"type": "text"}, "duree_ms": {"type": "integer"} }} } }'3. Indexar por lotes
¿Por qué?
Indexa tres documentos y lee el campo_bulkes la vía normal de los datos.errorsde la respuesta.Ver la corrección
cat > lot.ndjson <<'EOF' {"index":{"_index":"logs-app-000001"}} {"@timestamp":"2026-11-04T10:00:00Z","level":"ERROR","service":"paiement","message":"timeout vers la banque utilisateur=alice","duree_ms":3100} {"index":{"_index":"logs-app-000001"}} {"@timestamp":"2026-11-04T10:00:01Z","level":"INFO","service":"paiement","message":"paiement accepté","duree_ms":120} {"index":{"_index":"logs-app-000001"}} {"@timestamp":"2026-11-04T10:00:02Z","level":"INFO","service":"panier","message":"article ajouté","duree_ms":40} EOF curl -sk -u 'admin:Str0ng!Passw0rd-2026' -H 'Content-Type: application/x-ndjson' \ -X POST 'https://localhost:9200/_bulk?refresh=true' --data-binary @lot.ndjson4. Buscar y agregar
¿Por qué?
Busca «banque» en el serviciofilteres más rápido quemustcuando la puntuación no importa.paiementy calcula el p95 de la duración por servicio.Ver la corrección
curl -sk -u 'admin:Str0ng!Passw0rd-2026' -H 'Content-Type: application/json' -X POST 'https://localhost:9200/logs-app-*/_search' -d '{ "query": {"bool": { "must": [{"match": {"message": "banque"}}], "filter": [{"term": {"service": "paiement"}}] }} }'curl -sk -u 'admin:Str0ng!Passw0rd-2026' -H 'Content-Type: application/json' -X POST 'https://localhost:9200/logs-app-*/_search' -d '{ "size": 0, "aggs": {"par_service": { "terms": {"field": "service"}, "aggs": {"p95": {"percentiles": {"field": "duree_ms", "percents": [95]}}} }} }'5. Probar PPL y la consola
¿Por qué? PPL es muy legible para explorar logs.
Cuenta los documentos por nivel en PPL y búscalos en Discover, enhttp://localhost:5601.Ver la corrección
curl -sk -u 'admin:Str0ng!Passw0rd-2026' -H 'Content-Type: application/json' -X POST https://localhost:9200/_plugins/_ppl \ -d '{"query":"source=logs-app-* | where service=\"paiement\" | stats count() by level"}' curl -sk -u 'admin:Str0ng!Passw0rd-2026' -H 'Content-Type: application/json' -X POST https://localhost:9200/_plugins/_sql \ -d '{"query":"SELECT service, COUNT(*) n FROM logs-app-000001 GROUP BY service"}'
Nivel de dificultad : ●○○○○ (1/5)
Mi seguimiento
Inicia sesión para seguir tu progreso y tomar notas. Iniciar sesión
Artículos recomendados
Installer OpenSearch et OpenSearch Dashboards
Installer OpenSearch avec Docker Compose ou l'archive : mot de passe initial, vm.max_map_count, c...
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 ...
OpenSearch Dashboards, alertes et observabilité
Explorer ses données dans OpenSearch Dashboards, créer des moniteurs d'alerte et découvrir Trace ...
OpenSearch : concepts, architecture et différences avec Elasticsearch
Comprendre OpenSearch : origine du projet, licence, différences avec Elasticsearch, index, shards...
OpenSearch en production : ISM, sauvegardes, sécurité et bonnes pratiques
Automatiser le cycle de vie avec ISM, sauvegarder par snapshots, gérer les rôles et dimensionner ...
Alimenter OpenSearch : pipelines d'ingestion et Data Prepper
Transformer les données avec les pipelines d'ingestion, collecter avec Data Prepper, recevoir l'O...
Query DSL et agrégations avancées Elasticsearch, avec ES|QL
Écrire des requêtes Elasticsearch avancées : bool, filter et score, nested, function_score et per...
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...
Les bases de données managées OVHcloud (Public Cloud Databases)
Utiliser les bases de données managées du Public Cloud OVHcloud : PostgreSQL, MySQL, MongoDB, Val...