模板
模板是 Elasticsearch 在创建索引或数据流时应用设置、映射和其他配置的机制。
您需要在创建索引或数据流之前配置模板。当创建索引时(无论是手动创建还是通过索引文档创建),匹配的模板将决定所应用的设置、映射和其他配置。当与 数据流 配合使用时,模板还会定义每个后端索引在创建时的配置方式。
有两种类型的模板
索引模板 是创建索引或数据流时应用的主要配置对象。它使用
index_patterns匹配索引名称,并使用priority值来解决冲突。索引模板可以选择直接定义设置、映射和别名,并引用提供可重用配置块的组件模板列表。它还可以指示是应该创建数据流还是普通索引。组件模板 是一种定义设置、映射和别名的可重用构建块。组件模板不会被直接应用;它们必须由索引模板引用。
索引模板及其引用的组件模板共同构成了所谓的可组合模板。
有关设置可组合模板的详细探索和示例,请参阅 Elastic 博客 Elasticsearch 中的索引模板:如何使用可组合模板。
以下条件适用于使用模板
- 可组合索引模板优先于任何 旧版模板(在 Elasticsearch 7.8 中已被弃用)。如果没有任何可组合模板匹配给定的索引,则旧版模板可能仍然匹配并被应用。
- 如果创建索引时带有显式设置,并且该索引也匹配某个索引模板,则 创建索引 请求中的设置优先于索引模板及其组件模板中指定的设置。
- 索引模板本身指定的设置优先于其组件模板中的设置。
- 当您在索引模板的
composed_of字段中指定多个组件模板时,组件模板会按指定的顺序合并,这意味着后面的组件模板会覆盖前面的组件模板。 - 如果新的数据流或索引匹配多个索引模板,则使用具有最高优先级的索引模板。
- 创建索引模板时,请注意避免与内置的 Elasticsearch 索引模板发生 命名模式冲突。
索引模板用于在创建索引时对其进行配置。索引模板中指定的 映射、设置 和 别名 会被每个创建的索引继承。这些也可以在组成该索引模板的组件模板中指定。
您可以在 Kibana 中或使用 Elasticsearch API 创建和管理索引模板。
要创建索引模板,请完成以下步骤
使用导航菜单或全局搜索字段转到 Index Management 页面。
在 索引模板 (Index Templates) 选项卡中,选择 创建模板 (Create template)。

在 Logistics 页面上
为模板指定名称。
指定一个模式来匹配您要使用生命周期策略管理的索引。例如,
my-index-*。请注意 避免命名模式冲突 与内置的 Elasticsearch 索引模板。如果您正在存储持续生成且仅追加(append-only)的数据,您可以选择创建 数据流 而不是索引,以实现更高效的存储。
注意当您启用数据流选项时,设置 数据保留 的选项也会变为可用。数据保留仅在您使用数据流生命周期时适用,它是索引生命周期管理的一种替代方案。有关详细信息,请参阅 数据流生命周期。
配置您想要的任何其他选项,包括
- 用于所创建索引的 索引模式。
- 模板优先级、版本和任何元数据。
- 是否覆盖
action.auto_create_index集群设置。
有关这些选项的详细信息,请参阅 创建或更新索引模板 API 文档。
在 组件模板 页面上,您可以使用搜索和过滤工具来选择要包含在索引模板中的任何 组件模板。索引模板将继承在组件模板中定义的设置 (S)、映射 (M) 和别名 (A),并在创建索引时将其应用于索引。
在 索引设置 页面上,您可以直接在索引模板中定义索引设置。当与组件模板一起使用时,在此页面上定义的映射将覆盖关联组件模板中的任何冲突定义。
可选:在 映射 页面上,自定义将文档索引到 Elasticsearch 时使用的字段和数据类型。当与组件模板一起使用时,这些映射会覆盖关联组件模板中的任何冲突定义。有关详细信息,请参阅 映射。
可选:在 别名 页面上,为每个创建的索引指定一个 别名。例如,您可以定义一个名为
my-index的别名。{ "my-index": {} }请注意,在配置 ILM 时这不是必需的,ILM 会使用
index.lifecycle.rollover_alias设置来访问滚动索引。在 审阅 页面上,确认您的选择并选择 创建模板。您可以检查所选选项,以及将要创建的索引模板格式和关联的 API 请求。
新创建的索引模板将用于所有名称匹配指定模式的新索引,并且对于其中的每一个索引,都将应用指定的 ILM 策略。
可选:创建新索引以测试您的模板
要测试您新创建的模板,您可以创建两个新索引,例如 my-index-000001 和 my-index-000002。
索引以下文档以创建新索引
POST /my-index-000001/_doc{ "@timestamp": "2019-05-18T15:57:27.541Z", "ip": "225.44.217.191", "extension": "jpg", "response": "200", "geo": { "coordinates": { "lat": 38.53146222, "lon": -121.7864906 } }, "url": "https://media-for-the-masses.theacademyofperformingartsandscience.org/uploads/charles-fullerton.jpg" }POST /my-index-000002/_doc{ "@timestamp": "2019-05-20T03:44:20.844Z", "ip": "198.247.165.49", "extension": "php", "response": "200", "geo": { "coordinates": { "lat": 37.13189556, "lon": -76.4929875 } }, "memory": 241720, "url": "https://theacademyofperformingartsandscience.org/people/type:astronauts/name:laurel-b-clark/profile" }使用 获取索引 API 来查看新索引的配置。这些索引是使用您之前创建的索引模板配置的。
GET /my-index-000001,my-index-000002
使用 创建或更新索引模板 API 将索引模板添加到集群。
以下请求创建了一个索引模板,该模板由 组件模板 示例中显示的两个组件模板组成。
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",
"format": "EEE MMM dd HH:mm:ss Z yyyy"
}
}
},
"aliases": {
"mydata": { }
}
},
"priority": 501,
"composed_of": ["component_template1", "runtime_component_template"],
"version": 3,
"_meta": {
"description": "my custom"
}
}
- 选择可以 避免冲突 与内置 Elasticsearch 索引模板的模式。
Elasticsearch 具有内置的索引模板,每个模板的优先级为 100,适用于以下索引模式
.kibana-reporting*logs-*-*metrics-*-*synthetics-*-*profiling-*security_solution-*-*$.logs$.logs.*logs.otellogs.otel.*logs.ecslogs.ecs.*
Elastic Agent 使用这些模板来创建数据流。由 Fleet 集成创建的索引模板使用类似的重叠索引模式,优先级最高可达 200。
如果您使用 Fleet 或 Elastic Agent,请为您的索引模板分配一个低于 100 的优先级,以避免覆盖这些模板。否则,为避免意外应用这些模板,请执行以下一项或多项操作
- 要禁用所有内置的索引和组件模板,请使用 集群更新设置 API 将
stack.templates.enabled设置为false。但请注意,这不推荐,请参阅 设置文档 以获取更多信息。 - 使用非重叠的索引模式。
- 为具有重叠模式的模板分配一个高于
500的priority。例如,如果您不使用 Fleet 或 Elastic Agent,并且想要为logs-*索引模式创建模板,请为您的模板分配501的优先级。这可以确保应用您的模板,而不是logs-*-*的内置模板。 - 为避免与内置和 Fleet 管理的索引模板产生命名冲突,请避免在您自己的索引模板名称中使用
@。 - 从 Elastic Stack 9.1 版本开始,Fleet 将
fleet-synced-integrations*命名的索引用于某项功能。请避免使用此名称,以防止与内置索引冲突。
组件模板 是一种定义 映射、设置 和 别名 的可重用构建块。组件模板不会直接应用于索引,而是由 索引模板 引用,并在确定索引的最终配置时使用。
您可以在 Kibana 中或使用 Elasticsearch API 创建和管理组件模板。
您可以在 Kibana 的 索引管理 页面上创建、编辑、克隆和删除您的组件模板。请转到 组件模板 选项卡。
- 要显示详细信息并执行操作,请单击模板名称。
- 要创建新的组件模板,请使用 创建组件模板 向导。
您可以使用 组件模板 API 创建和管理组件模板。以下请求创建了上一个索引模板示例中使用的两个组件模板
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))"
}
}
}
}
}
}
- 当新索引匹配该模板时,此组件模板会将名为
day_of_week的 运行时字段 添加到映射中。