DevOps Linux Разное

Массовое восстановление индексов Elasticsearch из snapshot с переименованием

11.10.2023

Часто надо восстановить индексы, чтобы провалидировать логи за длительное время. И для анализа логов, нам не требуется отказоустойчивость, в данном скрипте, индексы восстанавливаются сразу с переименованием и с отключенными репликами.

Скрипт требует доступа к 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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *