Skip to content
Learni
View all tutorials
Bases de données

Comment optimiser Elasticsearch en production 2026

18 minADVANCED

Introduction

Elasticsearch est devenu la référence pour la recherche et l'analyse en temps réel. En 2026, les exigences de scalabilité et de latence imposent une maîtrise fine de la configuration cluster, des mappings et des stratégies d'indexation. Ce tutoriel vous guide pas à pas dans la mise en place d'un environnement production robuste, du dimensionnement JVM aux agrégations avancées. Vous apprendrez à éviter les pièges classiques de la mémoire et à optimiser les performances sur des volumes de données de plusieurs téraoctets.

Prérequis

  • Java 21+ et Elasticsearch 8.15+
  • Connaissances solides en Linux et YAML
  • Accès à un cluster de 3 nœuds minimum
  • Outil curl ou client officiel Elasticsearch

Configuration du cluster

elasticsearch.yml
cluster.name: prod-cluster-2026
node.name: ${HOSTNAME}
network.host: 0.0.0.0
discovery.seed_hosts: ["10.0.0.1", "10.0.0.2", "10.0.0.3"]
cluster.initial_master_nodes: ["node-1", "node-2", "node-3"]
indices.memory.index_buffer_size: 30%
thread_pool.write.queue_size: 1000

Ce fichier configure un cluster haute disponibilité avec discovery multicast désactivé et un buffer d'indexation optimisé pour les charges lourdes.

Template d'index avancé

index-template.json
{
  "index_patterns": ["logs-2026-*"],
  "settings": {
    "number_of_shards": 5,
    "number_of_replicas": 1,
    "refresh_interval": "30s"
  },
  "mappings": {
    "properties": {
      "@timestamp": { "type": "date" },
      "message": { "type": "text", "analyzer": "standard" },
      "level": { "type": "keyword" }
    }
  }
}

Le template applique automatiquement 5 shards et un refresh lent pour réduire la pression sur les disques SSD.

Indexation en masse optimisée

bulk-index.sh
curl -X POST "localhost:9200/_bulk?pretty" -H 'Content-Type: application/json' --data-binary @- << EOF
{ "index" : { "_index" : "logs-2026-01" } }
{ "@timestamp": "2026-01-15T10:00:00Z", "message": "Erreur critique", "level": "ERROR" }
{ "index" : { "_index" : "logs-2026-01" } }
{ "@timestamp": "2026-01-15T10:00:01Z", "message": "Requête traitée", "level": "INFO" }
EOF

L'indexation bulk avec 1000 documents par lot réduit le nombre de requêtes et améliore le débit jusqu'à 10x.

Requête avec agrégations

advanced-search.json
{
  "size": 0,
  "query": { "range": { "@timestamp": { "gte": "now-1h" } } },
  "aggs": {
    "errors_per_minute": {
      "date_histogram": { "field": "@timestamp", "calendar_interval": "1m" },
      "aggs": { "error_count": { "filter": { "term": { "level": "ERROR" } } } }
    }
  }
}

Cette agrégation date_histogram calcule le nombre d'erreurs par minute sans ramener tous les documents.

Script de monitoring JVM

monitor.sh
#!/bin/bash
curl -s localhost:9200/_nodes/stats/jvm | jq '.nodes[].jvm.mem.heap_used_percent'

Surveillez en continu le pourcentage de heap utilisé pour déclencher des alertes avant le GC.

Bonnes pratiques

  • Toujours définir explicitement le nombre de shards et replicas
  • Utiliser des index templates pour uniformiser les mappings
  • Configurer des refresh_interval adaptés au volume
  • Surveiller la heap JVM et le circuit breaker
  • Préférer les requêtes filtrées aux requêtes scoring quand possible

Erreurs courantes à éviter

  • Oublier de limiter la taille des résultats (from + size)
  • Créer trop de shards sur des index de petite taille
  • Ignorer les warnings de circuit breaker
  • Utiliser des analyzers custom sans tester la pertinence

Pour aller plus loin

Approfondissez vos compétences avec nos formations Elasticsearch avancées.