Проблема с настройкой политики жизненного цикла индекса ElasticSearch с именем индекса даты конвейера

Я новичок в настройке правильной политики жизненного цикла, поэтому надеюсь, что кто-то может помочь мне с этим. Итак, у меня есть существующий индекс, который создается еженедельно. Это сторонняя интеграция (они предоставили мне конвейер и шаблон индекса для входящих журналов). Журналы создаются еженедельно по схеме "имя-ГГГГ-ММ-ДД". Я пытаюсь настроить политику жизненного цикла для этих индексов, чтобы они переходили от горячего-> теплого-> удаления. Пока что я сделал следующее:

Обновлен шаблон индекса, чтобы добавить политику и установить псевдоним:

{
  "index": {
    "lifecycle": {
      "name": "Cloudflare",
      "rollover_alias": "cloudflare"
    },
    "mapping": {
      "ignore_malformed": "true"
    },
    "number_of_shards": "1",
    "number_of_replicas": "1"

Для существующих индексов установите псевдоним и какой из них является индексом для записи:

POST /_aliases
{
    "actions" : [
        {
            "add" : {
                 "index" : "cloudflare-2020-07-13",
                 "alias" : "cloudflare",
                 "is_write_index" : true
            }
        }
    ]
}

POST /_aliases
{
    "actions" : [
        {
            "add" : {
                 "index" : "cloudflare-2020-07-06",
                 "alias" : "cloudflare",
                 "is_write_index" : false
            }
        }
    ]
}

Как только я это сделал, я начал видеть следующие 2 ошибки (по 1 в каждом индексе):

Ошибка ILM №1

Ошибка ILM №2

Я не уверен, почему ошибка "не индекс записи" появляется в старом индексе. Возможно, это связано с тем, что он все еще "горячий" и пытается переместить его в другую фазу, не являясь индексом записи?

Вторая ошибка связана с тем, что имя индекса неверно для ролловера?

Мне также неясно, подходит ли это для переноса позиции. Эти индексы создаются еженедельно, и я полагаю, что это нормально. Я бы подумал, что обычно вы создаете один индекс и позволяете политике разделять более старые на основе ваших критериев (размер, возраст и т. Д.). Следует ли мне изменить это или я могу заставить эту политику работать с существующими еженедельными файлами? Если вам это нужно, вот часть конвейера, который я импортировал в ElasticSearch, который, как мне кажется, отвечает за именование индекса:

{
        "date_index_name" : {
          "field" : "EdgeStartTimestamp",
          "index_name_prefix" : "cloudflare-",
          "date_rounding" : "w",
          "timezone" : "UTC",
          "date_formats" : [
            "uuuu-MM-dd'T'HH:mm:ssX",
            "uuuu-MM-dd'T'HH:mm:ss.SSSX",
            "yyyy-MM-dd'T'HH:mm:ssZ",
            "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
          ]
        }
      },

Итак, для меня на данный момент более важной ошибкой является "number_format_exception". Я думаю, это из-за этой настройки, которую я вижу в индексе (provided_name):

{
  "settings": {
    "index": {
      "lifecycle": {
        "name": "Cloudflare",
        "rollover_alias": "cloudflare"
      },
      "mapping": {
        "ignore_malformed": "true"
      },
      "number_of_shards": "1",
      "provided_name": "<cloudflare-{2020-07-20||/w{yyyy-MM-dd|UTC}}>",
      "creation_date": "1595203589799",
      "priority": "100",
      "number_of_replicas": "1",

Я полагаю, что это "provided_name" устанавливается из конвейера "date_index_name", который я указал выше. Если это проблема, есть ли способ создать фиксированное имя индекса через конвейер приема без его изменения в зависимости от даты? Я бы предпочел просто создать фиксированный индекс и позволить политике жизненного цикла обрабатывать разделение (например, 0001, 0002 и т. Д.).

Я искал способ создать фиксированное имя индекса без процессора "date_index_name", но пока не нашел способа сделать это. Или, если я могу создать имя индекса с датой и добавить суффикс, который позволит диспетчеру политик LifeCycle (ILM) добавлять инкрементный номер в конце, это также может сработать. Любая помощь здесь будет принята с благодарностью!

1 ответ

Основная проблема заключается в том, что существующие индексы не заканчиваются порядковым номером (например, 0001, 0002 и т. Д.), Поэтому ILM на самом деле не знает, как действовать.

Имя этого индекса должно соответствовать шаблону индекса шаблона и заканчиваться числом

Лучше позволить ILM управлять созданием и обновлением индекса, поскольку это именно то, что он должен делать. Все, что вам нужно сделать, это продолжать писать то же самоеcloudflareпсевдоним и все тут. Нет необходимости вdate_index_name процессор приема.

Итак, ваш шаблон индекса и так верен.

Затем вам нужно загрузить начальный индекс

PUT cloudflare-2020-08-11-000001
{
  "aliases": {
    "cloudflare": {
      "is_write_index": true
    }
  }
}

Затем вы можете либо переиндексировать свои старые индексы в индексы, управляемые ILM, либо применить политики жизненного цикла к своим старым индексам.

Другие вопросы по тегам