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
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: 1000Ce 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_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
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" }
EOFL'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
{
"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
#!/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.