Spec-Zone.ru › Elasticsearch 8
›Elasticsearch Guide [8.17]

Шаблоны индексов

В этом разделе описываются настраиваемые шаблоны индексов, введённые в Elasticsearch 7.8. Сведения о работе шаблонов индексов в предыдущих версиях см. в документации по старым шаблонам.

Шаблон индекса — это способ указать Elasticsearch, как настроить индекс при его создании. Для потоков данных шаблон индекса настраивает базовые индексы потока при их создании. Шаблоны настраиваются до создания индекса. При создании индекса — вручную или путём индексирования документа — настройки шаблона используются в качестве основы для создания индекса.

Существует два типа шаблонов: шаблоны индексов и шаблоны компонентов. Шаблоны компонентов — это переиспользуемые строительные блоки, которые настраивают отображения, настройки и псевдонимы. Хотя вы можете использовать шаблоны компонентов для построения шаблонов индексов, они не применяются непосредственно к набору индексов. Шаблоны индексов могут содержать набор шаблонов компонентов, а также напрямую указывать настройки, отображения и псевдонимы.

Для шаблонов индексов применяются следующие условия:

  • Настраиваемые шаблоны имеют приоритет над старыми шаблонами. Если ни один настраиваемый шаблон не соответствует заданному индексу, может соответствовать и применяться старый шаблон.
  • Если индекс создаётся с явными настройками и также соответствует шаблону индекса, настройки из запроса создания индекса имеют приоритет над настройками, указанными в шаблоне индекса и его шаблонах компонентов.
  • Настройки, указанные в самом шаблоне индекса, имеют приоритет над настройками в его шаблонах компонентов.
  • Если новый поток данных или индекс соответствуют нескольким шаблонам индексов, используется шаблон индекса с наивысшим приоритетом.

Избегайте конфликтов шаблонов индексов

Elasticsearch имеет встроенные шаблоны индексов, каждый с приоритетом 100, для следующих шаблонов индексов:

  • logs-*-*
  • metrics-*-*
  • synthetics-*-*
  • profiling-*
  • security_solution-*-*

Elastic Agent использует эти шаблоны для создания потоков данных. Шаблоны индексов, созданные интеграциями Fleet, используют аналогичные перекрывающиеся шаблоны индексов и имеют приоритет до 200.

Если вы используете Fleet или Elastic Agent, назначьте своим шаблонам индексов приоритет ниже 100, чтобы избежать перезаписи этих шаблонов. В противном случае, чтобы избежать случайного применения шаблонов, выполните одно или несколько из следующих действий:

  • Для отключения всех встроенных шаблонов индексов и компонентов установите stack.templates.enabled на false с помощью API обновления настроек кластера. Однако это не рекомендуется, см. документацию по настройке для получения дополнительной информации.
  • Используйте шаблон индекса без перекрытий.
  • Назначьте шаблонам с перекрывающимся шаблоном индекса приоритет выше 500. Например, если вы не используете Fleet или Elastic Agent и хотите создать шаблон для шаблона индекса logs-*, назначьте своему шаблону приоритет 500. Это гарантирует, что ваш шаблон будет применяться вместо встроенного шаблона для logs-*-*.
  • Чтобы избежать конфликтов имён со встроенными и управляемыми Fleet шаблонами индексов, избегайте использования @ в качестве части имени ваших собственных шаблонов индексов.

Создание шаблона индекса

Используйте API шаблона индекса и шаблона компонента для создания и обновления шаблонов индексов. Вы также можете управлять шаблонами индексов из Stack Management в Kibana.

Следующие запросы создают два шаблона компонентов.

resp = client.cluster.put_component_template(
    name="component_template1",
    template={
        "mappings": {
            "properties": {
                "@timestamp": {
                    "type": "date"
                }
            }
        }
    },
)
print(resp)

resp1 = client.cluster.put_component_template(
    name="runtime_component_template",
    template={
        "mappings": {
            "runtime": {
                "day_of_week": {
                    "type": "keyword",
                    "script": {
                        "source": "emit(doc['@timestamp'].value.dayOfWeekEnum.getDisplayName(TextStyle.FULL, Locale.ENGLISH))"
                    }
                }
            }
        }
    },
)
print(resp1)
const response = await client.cluster.putComponentTemplate({
  name: "component_template1",
  template: {
    mappings: {
      properties: {
        "@timestamp": {
          type: "date",
        },
      },
    },
  },
});
console.log(response);

const response1 = await client.cluster.putComponentTemplate({
  name: "runtime_component_template",
  template: {
    mappings: {
      runtime: {
        day_of_week: {
          type: "keyword",
          script: {
            source:
              "emit(doc['@timestamp'].value.dayOfWeekEnum.getDisplayName(TextStyle.FULL, Locale.ENGLISH))",
          },
        },
      },
    },
  },
});
console.log(response1);
PUT _component_template/component_template1
{
  "template": {
    "mappings": {
      "properties": {
        "@timestamp": {
          "type": "date"
        }
      }
    }
  }
}

PUT _component_template/runtime_component_template
{
  "template": {
    "mappings": {
      "runtime": { 
        "day_of_week": {
          "type": "keyword",
          "script": {
            "source": "emit(doc['@timestamp'].value.dayOfWeekEnum.getDisplayName(TextStyle.FULL, Locale.ENGLISH))"
          }
        }
      }
    }
  }
}

Этот шаблон компонента добавляет поле runtime с именем day_of_week в отображения, когда новый индекс соответствует шаблону.

Следующий запрос создаёт шаблон индекса, который составлен из этих шаблонов компонентов.

PUT _index_template/template_1
{
  "index_patterns": ["te*", "bar*"],
  "template": {
    "settings": {
      "number_of_shards": 1
    },
    "mappings": {
      "_source": {
        "enabled": true
      },
      "properties": {
        "host_name": {
          "type": "keyword"
        },
        "created_at": {
          "type": "date"
        }
      }
    },
    "aliases": {
      "mydata": { }
    }
  },
  "priority": 500,
  "composed_of": ["component_template1", "runtime_component_template"], 
  "version": 3,
  "_meta": {
    "description": "my custom"
  }
}

© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/8.17/index-templates.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API