Проблема с шаблоном индекса opensearch, псевдонимом и именем индекса fluentd
У меня есть один кластер opensearch, который получает логи от fluentd. Теперь я хочу применить политику ISM для обновления моего индекса, когда они достигнут определенного порогового значения.
Я следую этому документу, чтобы создать политику ISM https://opensearch.org/docs/latest/im-plugin/ism/policies/#sample-policy-with-ism-template-for-auto-rollover.
Текущая конфигурация примерно такая:
- Fluent отправляет все журналы в определенный шаблон индекса, такой как «mylogs-k8s-namespace», поэтому, если есть 10 пространств имен, я получу 10 созданных индексов.
logstash_format false
index_name mylogs-${record['kubernetes']['namespace_name']}
- Затем я создал одну политику ISM, которая включает условие переноса:
PUT _plugins/_ism/policies/rollover_policy
{
"policy": {
"description": "Example rollover policy.",
"default_state": "rollover",
"states": [
{
"name": "rollover",
"actions": [
{
"rollover": {
"min_size": "10mb"
}
}
],
"transitions": []
}
],
"ism_template": {
"index_patterns": ["mylogs-kube-system*"],
"priority": 100
}
}
}
- Затем я создал один шаблон, который будет применять эту политику ко всем новым индексам.
PUT _index_template/ism_rollover
{
"index_patterns": ["mylogs-kube-system*"],
"template": {
"settings": {
"plugins.index_state_management.rollover_alias": "mylogs-kube-system"
}
}
}
- Согласно документации, следующим шагом является создание индекса с указанным выше псевдонимом.
PUT mylogs-kube-system-000001
{
"aliases": {
"mylogs-kube-system": {
"is_write_index": true
}
}
}
Теперь вот проблема-
Если fluentd уже начал загружать журналы в мой индекс «mylogs-kube-system», то описанный выше шаг (4) не работает. выдает ошибку, что индекс с таким именем уже существует.
Это имеет смысл, так как fluentd уже начал загружать журналы, и у нас не может быть псевдонимов, индексов или потоков с одинаковыми именами.
Чтобы преодолеть это, я должен остановить свой Fluend, удалить индекс «mylogs-kube-system, в этом случае », а затем сначала применить политику и псевдоним (шаги 1–4), а затем снова запустить Fluend. Таким образом, это работает нормально, и происходит опрокидывание.
Однако, как я понимаю, это не очень хорошее решение, мы не можем продолжать останавливать наш fluentd каждый раз, когда добавляется новое пространство имен. Я ищу конкретное решение, чтобы сделать эту работу.
Я пробовал следующие вещи, но не повезло -
Изменение имени индекса в fluentd (шаг 1) на logstash_prefix с датой, однако журналы продолжают добавляться в новый индекс (mylogs-kube-system-27052022) и т. д., но переноса не происходит.
Пробовал, изменив имя индекса в fluentd на mylogs-k8s-namespace-000001, но он навсегда отправляет журналы только в этот индекс.
Вывод, который я могу здесь сделать, заключается в том, что мы должны сохранять разные имя индекса и имя псевдонима, но при этом fluentd перестает отправлять журналы для исправления псевдонима, и мы начинаем сталкиваться с проблемой при переносе.
1 ответ
Попробуйте использовать поток данных вместо простого шаблона
PUT _index_template/log
{
"index_patterns": [
"log-*"
],
"data_stream": {}
}