Logstash заменяет старый индекс

Я использую logstash для создания эластичного индекса. Шаги: 1. запуск logstash 2. данные извлекаются с помощью подключаемого модуля ввода jdbc 3. данные индексируются с помощью подключаемого модуля вывода elasticsearch (с шаблоном, содержащим псевдоним) 4. остановка logstash

Время, у меня есть вызов индекса myindex-1, который можно запросить с псевдонимом myindex. Во второй раз у меня есть вызов индекса myindex-2, который можно запросить с псевдонимом myindex. Первый индекс теперь устарел, и мне нужно удалить его непосредственно перед (или после шага 4).

Вы знаете, как это сделать?


person 1lexis    schedule 23.12.2016    source источник


Ответы (2)


Перво-наперво, если вы знаете устаревшее имя индекса, то это просто вопрос добавления шага 5:

curl -XDELETE 'http://localhost:9200/myindex-1'

Таким образом, вы завершите свой запуск logstash в скрипт с помощью этого дополнительного шага - насколько мне известно, у logstash нет возможности удалить индекс, это просто не его цель.

Но из того, как вы описываете свою ситуацию, кажется, что вы пытаетесь сохранить данные доступными во время создания нового индекса. Не могли бы вы немного рассказать о своем варианте использования?

Причина запроса заключается в том, что при текущей процедуре вы, вероятно, получите дублирующиеся данные (старая и новая версия) в течение периода индексации.

Если действительно необходимо обновить данные и предполагая, что у вас есть идентификатор в данных, извлеченных из БД, вы можете рассмотреть другой подход: настроить 2 выхода elasticsearch в вашем журнале, первый с действием, установленным на «удалить» таргетинг старая запись в предыдущем указателе, вторая — стандартное создание нового указателя.

В зависимости от характера ваших данных могут быть и другие возможности.

person Olivier    schedule 23.12.2016
comment
Правильно: я хочу, чтобы данные были доступны во время создания нового индекса. Ваше решение с двумя выходами не совсем идеально. Например: таблица содержит две строки: 1 и 2. Итак, первый индекс содержит эти две строки. Затем строка 1 удаляется. Первый вывод удаляет только вторую строку, а не первую (потому что ее больше нет в БД). - person 1lexis; 24.12.2016
comment
Я не думаю, что вы найдете идеальное решение. Но что касается моего предложения, вы все равно сохраните удаление старого индекса. Лучшее решение будет зависеть от довольно многих факторов, в том числе: сколько времени потребуется для создания нового индекса, влияние дубликатов в результатах во время перехода для ваших конечных пользователей, есть ли ценность для вас, чтобы сохранить историю данных (в этом случае мое предложение было бы действительно плохим), ... - person Olivier; 27.12.2016

  1. Создайте и заполните myindex-2, пока не используйте псевдоним
  2. Одновременно добавить псевдоним в myindex-2 и удалить его из myalias-1

REST-запрос для шага 2:

POST /_aliases
{
    "actions" : [
        { "remove" : { "index" : "myindex-1", "alias" : "myindex" } },
        { "add"    : { "index" : "myindex-2", "alias" : "myindex" } }
    ]
}

Документация здесь

person James Daily    schedule 04.09.2019