Проблема с шаблоном индекса opensearch, псевдонимом и именем индекса fluentd

У меня есть один кластер opensearch, который получает логи от fluentd. Теперь я хочу применить политику ISM для обновления моего индекса, когда они достигнут определенного порогового значения.

Я следую этому документу, чтобы создать политику ISM https://opensearch.org/docs/latest/im-plugin/ism/policies/#sample-policy-with-ism-template-for-auto-rollover.

Текущая конфигурация примерно такая:

  1. Fluent отправляет все журналы в определенный шаблон индекса, такой как «mylogs-k8s-namespace», поэтому, если есть 10 пространств имен, я получу 10 созданных индексов.
      logstash_format false
index_name mylogs-${record['kubernetes']['namespace_name']}
  1. Затем я создал одну политику 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
    }
  }
}
  1. Затем я создал один шаблон, который будет применять эту политику ко всем новым индексам.
      PUT _index_template/ism_rollover
{
  "index_patterns": ["mylogs-kube-system*"],
  "template": {
   "settings": {
    "plugins.index_state_management.rollover_alias": "mylogs-kube-system"
   }
 }
}
  1. Согласно документации, следующим шагом является создание индекса с указанным выше псевдонимом.
      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 каждый раз, когда добавляется новое пространство имен. Я ищу конкретное решение, чтобы сделать эту работу.

Я пробовал следующие вещи, но не повезло -

  1. Изменение имени индекса в fluentd (шаг 1) на logstash_prefix с датой, однако журналы продолжают добавляться в новый индекс (mylogs-kube-system-27052022) и т. д., но переноса не происходит.

  2. Пробовал, изменив имя индекса в fluentd на mylogs-k8s-namespace-000001, но он навсегда отправляет журналы только в этот индекс.

Вывод, который я могу здесь сделать, заключается в том, что мы должны сохранять разные имя индекса и имя псевдонима, но при этом fluentd перестает отправлять журналы для исправления псевдонима, и мы начинаем сталкиваться с проблемой при переносе.

1 ответ

Попробуйте использовать поток данных вместо простого шаблона

      PUT _index_template/log
{
  "index_patterns": [
    "log-*"
  ],
  "data_stream": {}
}
Другие вопросы по тегам