1. Dimensionner les index et les shards #
Le réglage le plus impactant.
Règles de dimensionnement #
- Visez 10 à 50 Go par shard et moins de 20 shards par Go de heap JVM.
- Un seul shard primaire suffit pour les petits index ; évitez le sur-sharding.
- Utilisez des data streams avec rollover plutôt qu'un index unique géant.
curl -s localhost:9200/_cluster/health?pretty
curl -s 'localhost:9200/_cat/indices?v&s=store.size:desc&h=index,pri,rep,docs.count,store.size' | head
curl -s 'localhost:9200/_cat/shards?v&s=store:desc' | head
curl -s 'localhost:9200/_cat/allocation?v'
curl -s 'localhost:9200/_cluster/allocation/explain?pretty' # pourquoi un shard n'est pas alloué2. Mappings, templates et ILM #
Maîtriser le schéma et le cycle de vie.
Template et mapping explicite #
curl -X PUT localhost:9200/_index_template/logs-app -H 'Content-Type: application/json' -d '{
"index_patterns": ["logs-app-*"],
"data_stream": {},
"template": {
"settings": { "number_of_shards": 1, "number_of_replicas": 1, "index.lifecycle.name": "logs-30j", "index.codec": "best_compression" },
"mappings": {
"dynamic": "strict",
"properties": {
"@timestamp": { "type": "date" }, "level": { "type": "keyword" }, "message": { "type": "text" },
"user_id": { "type": "keyword" }, "duration_ms": { "type": "long" }
}
}
}
}'Erreur Courante : Un mapping dynamique laissé libre crée des milliers de champs (explosion de mapping). Utilisezdynamic: strictet des types adaptés (keywordpour les filtres,textpour le plein texte).
Cycle de vie (ILM) #
curl -X PUT localhost:9200/_ilm/policy/logs-30j -H 'Content-Type: application/json' -d '{
"policy": { "phases": {
"hot": { "actions": { "rollover": { "max_primary_shard_size": "50gb", "max_age": "1d" } } },
"warm": { "min_age": "7d", "actions": { "shrink": { "number_of_shards": 1 }, "forcemerge": { "max_num_segments": 1 } } },
"delete": { "min_age": "30d", "actions": { "delete": {} } }
} }
}'
curl -s localhost:9200/_ilm/status
curl -s 'localhost:9200/logs-app-*/_ilm/explain?pretty' | head -303. Mémoire, sécurité et sauvegardes #
Stabilité de production.
JVM et système #
# jvm.options.d/heap.options : 50 % de la RAM maximum, jamais plus de ~30 Go
-Xms16g
-Xmx16g
sudo sysctl -w vm.max_map_count=262144
sudo swapoff -a # ou bootstrap.memory_lock: true
curl -s 'localhost:9200/_nodes/stats/jvm?filter_path=**.heap_used_percent&pretty'Sécurité #
- Activez TLS (transport et HTTP) et l'authentification ; utilisez des clés d'API à portée limitée.
- N'exposez jamais le port 9200 sur Internet ; passez par un reverse proxy.
- Un rôle d'écriture par pipeline d'ingestion, un rôle de lecture par équipe.
curl -u elastic -X POST localhost:9200/_security/api_key -H 'Content-Type: application/json' -d '{
"name": "ingestion-app",
"role_descriptors": { "writer": { "indices": [{ "names": ["logs-app-*"], "privileges": ["create_doc", "auto_configure"] }] } },
"expiration": "90d"
}'Sauvegardes (snapshots) #
curl -X PUT localhost:9200/_snapshot/depot -H 'Content-Type: application/json' -d '{ "type": "s3", "settings": { "bucket": "es-snapshots" } }'
curl -X PUT localhost:9200/_slm/policy/quotidien -H 'Content-Type: application/json' -d '{
"schedule": "0 30 1 * * ?", "name": "<snap-{now/d}>", "repository": "depot",
"config": { "indices": ["logs-*"] }, "retention": { "expire_after": "30d", "min_count": 5 } }'
curl -s localhost:9200/_snapshot/depot/_all?pretty | head -20Bonne Pratique : Testez régulièrement la restauration : une sauvegarde jamais restaurée n'est pas une sauvegarde.
4. Requêtes et ingestion performantes #
Bulk, filtres et pagination.
Bonnes habitudes #
# Ingestion : _bulk par lots de 5 à 15 Mo
curl -s -H 'Content-Type: application/x-ndjson' -XPOST localhost:9200/_bulk --data-binary @lot.ndjson | jq '.errors'
# Filtres (cachés, sans score) plutôt que must pour les conditions exactes
curl -s localhost:9200/logs-app-*/_search -H 'Content-Type: application/json' -d '{
"size": 20, "_source": ["@timestamp","level","message"],
"query": { "bool": { "filter": [ { "term": { "level": "error" } }, { "range": { "@timestamp": { "gte": "now-15m" } } } ] } },
"sort": [{ "@timestamp": "desc" }]
}'
# Pagination profonde : search_after + PIT
curl -s -XPOST 'localhost:9200/logs-app-*/_pit?keep_alive=1m'| À éviter | Préférer |
|---|---|
from: 100000 | search_after avec PIT |
wildcard en préfixe *texte | Analyseur adapté (n-gram) ou champ dédié |
| Mettre à jour un document en boucle | Réindexer en bulk, modèle append-only |
| Un index par jour sans rollover | Data streams et ILM |
Schéma de référence et vérification rapide #
Visualiser le principe et le contrôler en ligne de commande.
Schéma de référence #
curl -s 'localhost:9200/_cat/indices/logs-*?v&h=index,health,pri,store.size&s=index'Mon suivi
Connectez-vous pour suivre votre progression et prendre des notes. Se connecter
Glossaire de la formation
Observabilité
La capacité à connaître l'état interne d'un système à partir des données qu'il émet.Ces données sont classées en 3 piliers : logsmétriquestracesprofil...
Elastic Common Schema (ECS)
Une spécification open source qui permet de structurer vos données de manière homogène dans l'écosystème Elastic.
RBAC (Role-Based Access Control)
Contrôle d'accès basé sur les rôles. Les permissions sont attribuées à des rôles spécifiques (ex: admin, lecteur) plutôt qu'directement aux utilisateu...
Authentification
Processus permettant de vérifier et valider l'identité d'un utilisateur ou d'un système (ex: login/mot de passe, jeton, biométrie).
Autorisation
Processus intervenant après l'authentification pour déterminer si l'entité a les droits et privilèges nécessaires pour accéder à une ressource.
API Key
Clé d'API. Code alphanumérique unique utilisé pour identifier, authentifier et autoriser l'accès à une interface de programmation (API).
Architecture
Conception globale et structurelle d'un système informatique, définissant ses différents composants, leurs relations et les principes guidant son évol...
Repository
Dépôt de stockage centralisé. Peut désigner un dépôt de code source (ex: Git) ou un dépôt d'artefacts et binaires (ex: Harbor, Nexus, Artifactory).
Articles recommandés
Comprendre la notion de score
Le concept de score va permettre à Elasticsearch de classer vos documents par pertinence lors d u...
Comprendre Elastic Common Schema(ECS)
Comme toujours dans nos missions de conseil, nous recommandons aux entreprises d'uniformiser, de ...
Grail : Dynatrace Data Lakehouse
Désormais vous disposez dans Dynatrace (SaaS) d'un Data Lakehouse nommé Grail dont vous pouvez co...
C'est quoi l'observabilité
La capacité à connaître l'état interne d'un système à partir des données que cette dernière émet...
Les types de transactions dans les base de données
Cet article détaille les différences entre trois concepts essentiels dans l'exécution des instruc...
Différences entre Technologies et Services dans Dynatrace
Dans Dynatrace, les concepts de 'Technologie' et de 'Services' aident à organiser et surveiller l...
Dynatrace : Différences entre SQL Modifications, SQL Queries or Procedures, et SQL Transactions
Cet article détaille les différences entre trois concepts essentiels dans l'exécution des instruc...
Types de consommation de licence
Comprendre l'évolution de la facturation dans Dynatrace : la différence entre l'ancien modèle de ...
Les Types de Services Dynatrace : Comprendre et Optimiser Votre Surveillance Applicative
Découvrez les différents types de services que Dynatrace peut surveiller, leur rôle, et comment l...