Prérequis pour supprimer un index dans Elasticsearch
Avant de supprimer un index, assurez-vous de :
- Avoir les privilèges nécessaires : Vous devez disposer de l’autorisation delete_index pour l’index cible.
- Vérifier l’index : Confirmez que l’index n’est pas le write index actuel d’un data stream (voir la section sur les data streams ci-dessous).
- Effectuer une sauvegarde : Si les données sont critiques, créez un snapshot avant la suppression.
- Vérifier l’état du cluster : Assurez-vous que le cluster est stable (utilisez GET _cluster/health pour vérifier).
- Accéder à l’API REST : Utilisez un outil comme curl, Postman, ou Kibana Dev Tools pour envoyer des requêtes.
Considérations Importantes
Index dans un Data Stream
Vous ne pouvez pas supprimer directement l’index d’écriture actuel d’un data stream. Pour le faire :
- Effectuez un rollover du data stream pour créer un nouvel index d’écriture :
bash
POST /my-data-stream/_rollover - Une fois le nouvel index créé, supprimez l’ancien index avec l’API DELETE.
Alias et Wildcards
- Alias : Les alias d’index ne peuvent pas être supprimés directement avec l’API DELETE pour les index. Utilisez l’API DELETE /<index>/_alias/<alias> pour supprimer un alias.
- Wildcards : Par défaut, l’utilisation de wildcards (*) ou _all pour cibler plusieurs index est désactivée. Pour l’activer, modifiez le paramètre de cluster action.destructive_requires_name à false (attention, cela peut être risqué) :
bash
PUT _cluster/settings { "persistent": { "action.destructive_requires_name": false } }
Impact sur les Performances
Comment Supprimer un Index avec l’API DELETE
Syntaxe Générale pour supprimer un index dans Elasticsearch
DELETE /<index>
- <index> : Nom de l’index ou liste d’index séparés par des virgules (par exemple, index1,index2).
- Les paramètres de requête optionnels incluent allow_no_indices, expand_wildcards, ignore_unavailable, master_timeout, et timeout
Étape 1 : Vérifier les Index ExistantsAvant de supprimer un index, listez les index disponibles pour confirmer le nom exact :
GET _cat/indices?v
Exemple de sortie :
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
green open my-index-001 aBcDeFgHiJkLmNoPqRsT 5 1 1000 0 1.2gb 600mb
green open my-index-002 uVwXyZaBcDeFgHiJkLmN 5 1 500 0 800mb 400mb
Étape 2 : Supprimer un IndexMéthode 1 : Utilisation de l’API Key AuthenticationSi votre cluster utilise une clé API pour l’authentification :
- Assurez-vous d’avoir une clé API valide. Créez-en une si nécessaire via :
POST /_security/api_key { "name": "my-api-key", "role_descriptors": { "role": { "cluster": ["all"], "indices": { "my-index-*": { "privileges": ["delete_index"] } } } } }Réponse :
json
{ "id": "VuaCfGcBCdbkQm-e5aOx", "name": "my-api-key", "api_key": "ui2lp2axTGuGuDtlkzrAUA" } - Encodez la clé API en Base64 (id:api_key) pour l’utiliser dans l’en-tête Authorization. Par exemple, pour VuaCfGcBCdbkQm-e5aOx:ui2lp2axTGuGuDtlkzrAUA :
echo -n "VuaCfGcBCdbkQm-e5aOx:ui2lp2axTGuGuDtlkzrAUA" | base64Sortie : VnVhQ2ZHY0JDZGJrUW0tZTNhT3g6dWkybHAyYXhUR3VHdUR0bGt6ckFVA==
- Supprimez l’index avec curl :
curl -X DELETE -H "Authorization: ApiKey VnVhQ2ZHY0JDZGJrUW0tZTNhT3g6dWkybHAyYXhUR3VHdUR0bGt6ckFVA==" "http://localhost:9200/my-index-001"Réponse en cas de succès :
json{ "acknowledged": true }
Méthode 2 : Utilisation de Basic AuthenticationSi vous utilisez un nom d’utilisateur et un mot de passe :
- Encodez les identifiants en Base64 (username:password). Par exemple, pour elastic:password :
echo -n "elastic:password" | base64Sortie : ZWxhc3RpYzpwYXNzd29yZA==
- Supprimez l’index :
curl -X DELETE -H "Authorization: Basic ZWxhc3RpYzpwYXNzd29yZA==" "http://localhost:9200/my-index-001"Réponse en cas de succès :
{ "acknowledged": true }
Méthode 3 : Utilisation de Bearer AuthenticationSi votre cluster utilise des tokens Bearer (par exemple, via OAuth ou un fournisseur d’identité) :
- Obtenez un token Bearer valide auprès de votre système d’authentification.
- Supprimez l’index :
curl -X DELETE -H "Authorization: Bearer <votre_token>" "http://localhost:9200/my-index-001"Réponse en cas de succès :
{ "acknowledged": true }
Étape 3 : Supprimer Plusieurs IndexPour supprimer plusieurs index en une seule requête, listez-les séparés par des virgules :
curl -X DELETE -H "Authorization: ApiKey VnVhQ2ZHY0JDZGJrUW0tZTNhT3g6dWkybHAyYXhUR3VHdUR0bGt6ckFVA==" "http://localhost:9200/my-index-001,my-index-002"
Ou utilisez un wildcard (si action.destructive_requires_name est défini à false) :
curl -X DELETE -H "Authorization: ApiKey VnVhQ2ZHY0JDZGJrUW0tZTNhT3g6dWkybHAyYXhUR3VHdUR0bGt6ckFVA==" "http://localhost:9200/my-index-*"
Étape 4 : Vérifier la SuppressionConfirmez que l’index a été supprimé :
GET _cat/indices?v
L’index supprimé ne devrait plus apparaître dans la liste.
Paramètres de Requête Utiles
- allow_no_indices (boolean, défaut : true) : Si false, la requête échoue si un index cible est manquant ou fermé.
- expand_wildcards (string, défaut : open) : Définit quels types d’index les wildcards peuvent cibler (all, open, closed, hidden, none).
- ignore_unavailable (boolean, défaut : false) : Si true, ignore les index manquants ou fermés sans erreur.
- master_timeout (string, défaut : 30s) : Temps d’attente pour une connexion au nœud maître.
- timeout (string, défaut : 30s) : Temps d’attente pour une réponse.
curl -X DELETE -H "Authorization: ApiKey VnVhQ2ZHY0JDZGJrUW0tZTNhT3g6dWkybHAyYXhUR3VHdUR0bGt6ckFVA==" "http://localhost:9200/my-index-001?allow_no_indices=true&ignore_unavailable=true"
FAQ
Puis-je supprimer plusieurs index à la fois ?
Comment vérifier si un index a été supprimé ?
Que faire si je reçois une erreur de timeout ?
Puis-je récupérer un index supprimé ?
Comment supprimer un index via Kibana ?
DELETE /my-index-001