Часто надо восстановить индексы, чтобы провалидировать логи за длительное время. И для анализа логов, нам не требуется отказоустойчивость, в данном скрипте, индексы восстанавливаются сразу с переименованием и с отключенными репликами.
Скрипт требует доступа к elastic напрямую. У меня это работа eck оператора в namespace logging в кластере kubernetes по https и с авторизацией
#!/bin/bash
# Восстанавливать будем в индексы с ПРЕФИКСОМ extracted_*
# Название старого индекса
SNAPSHOT_REPO_NAME="old_elk"
# Восстанавливаем индексы в имени которых есть json-logs и debug-logs Тоесть: json-logs-2023-01-01, full-debug-logs-2023-01-01 и т.д.
SNAPSHOTS_FILTER="'json-logs|debug-logs'"
# Доступ к эластику
ELK_USER="xxxxxxx"
ELK_PASSWORD="xxxxxxx"
ELK_HOST="eck-operator-es-http.logging.svc.cluster.local:9200"
SNAPSHOTS=`curl -sk -XGET "https://$ELK_USER:$ELK_PASSWORD@$ELK_HOST/_snapshot/$SNAPSHOT_REPO_NAME/_all" | jq -r ".snapshots[].snapshot" | egrep $SNAPSHOTS_FILTER`
for SNAPSHOT in $SNAPSHOTS
do
echo "Restore snapshot: $SNAPSHOT"
curl -sk -XPOST "https://$ELK_USER:$ELK_PASSWORD@$ELK_HOST/_snapshot/$SNAPSHOT_REPO_NAME/$SNAPSHOT/_restore?wait_for_completion=false" -H 'Content-Type: application/json' -d'
{
"indices": "*",
"ignore_unavailable": false,
"include_global_state": false,
"include_aliases": false,
"rename_pattern": "(.+)",
"rename_replacement": "extracted_$1",
"index_settings": {
"index.number_of_replicas": 0
}
}
'
done