Как правильно делать индексы опрокидывания в elasticsearch
Я собираю журналы с filebeat из всех контейнеров докеров, отправляю их в logstash, а из logstash пересылаю в elasticsearch. Я бы хотел обновить свои индексы, которые создаются автоматически, если они слишком большие или слишком старые. Есть несколько вариантов, которые я тестировал.
Используйте Elasticsearch ILM. Я создал политику
my_policy1
который должен измениться, когда превышено 5M и шаблонtemplate_charizard
:{"index_patterns": ["printmessage_charizard*"], "settings": {"number_of_shards": 1, "number_of_replicas": 1, "index.lifecycle.name": "my_policy1", "index.lifecycle.rollover_alias": "charizard-actual "}," псевдонимы ": { "charizard-actual": { "is_write_index": true } } }
Это не работает, мне нужно создать индекс с псевдонимом, в этом случае
charizard-actual
вручную. В противном случае будет ошибка:Rollover alias [charizard-actual] can point to multiple indices, found duplicated alias [[charizard-actual]] in index template [template_charizard]
Будет больше контейнеров, которые будут использоваться, поэтому я не могу вручную создавать индекс каждый раз, когда должен быть создан новый индекс. Я ожидал, что он будет создан автоматически.
ОБНОВИТЬ:
Я тестировал этот вариант (точно по туториалу, с такими же названиями), и он не работает. Он просто создает новый пустой индекс с номером приращения, но все журналы отправляются в индекс начальной загрузки.
Я могу настроить logstash ILM. Это работает нормально, но я не могу использовать переменные в имени псевдонима, поэтому мне пришлось бы создавать выходные данные elasticsearch для каждого индекса и делать много if.
Я могу настроить ILM filebeat. Аналогичная проблема, как и с logstash. Я могу использовать переменную в псевдониме ролловера, но она жестко запрограммирована для всех индексов.
Я ожидаю, что я настрою некоторые политики, некоторые шаблоны, и на основе регулярного выражения имени индекса будет применен шаблон к индексу. Все параметры в основном полезны, каждый раз необходимо изменить вручную (отредактировать конфигурацию logstash) или запрос (сначала создать индекс вручную).
Вопросы:
Какое решение лучше всего для правильного опрокидывания?
Почему все должно быть жестко запрограммировано, тогда это очень сложно поддерживать.
По мне, куратор был бы лучшим решением, но тогда нет необходимости поддерживать другое приложение.
Может ли кто-нибудь объяснить мне использование всех опций ILM? Не могу представить, чтобы изменить конфигурацию для каждого нового индекса, даже сначала создать индекс вручную или использовать жестко запрограммированный псевдоним для всех журналов, как в примере filebeat. Может, я что-то упускаю.
1 ответ
Вы можете использовать конфигурацию ILM с помощью самого filebeat. Logstash в качестве посредника не нужен. Обратите внимание, что filebeat автоматически обновляет псевдоним при ролловере, поэтому вам не нужно выполнять какие-либо обновления вручную.
Конфигурация filebeat:
setup.ilm:
enabled: true
policy_name: "filebeat"
rollover_alias: "filebeat"
pattern: "{now/d}-000001"
policy_file: /etc/ilm.json
overwrite: true
И вам нужно добавить файл ilm.json, например:
{
"policy": {
"phases": {
"hot": {
"actions": {
"rollover": {
"max_age": "1h"
}
}
},
"delete": {
"min_age": "4h",
"actions": {
"delete": {}
}
}
}
}
}
См. Полное описание этого в следующем сообщении: http://runkiss.blogspot.com/2020/08/using-ilm-for-filebeat-indices-retention.html