Elasticsearch索引模板 #
一、模板概述 #
1.1 模板作用 #
text
索引模板作用
├── 自动应用配置
│ └── 创建索引时自动应用设置
├── 统一管理
│ └── 一批索引使用相同配置
├── 减少错误
│ └── 避免手动配置错误
└── 简化操作
└── 无需每次指定配置
1.2 模板类型 #
| 类型 | 说明 |
|---|---|
| 索引模板 | 完整的索引配置 |
| 组件模板 | 可复用的配置片段 |
二、索引模板 #
2.1 创建索引模板 #
bash
PUT /_index_template/logs_template
{
"index_patterns": ["logs-*"],
"priority": 100,
"template": {
"settings": {
"number_of_shards": 3,
"number_of_replicas": 1,
"refresh_interval": "30s"
},
"mappings": {
"properties": {
"@timestamp": { "type": "date" },
"message": { "type": "text" },
"level": { "type": "keyword" },
"service": { "type": "keyword" }
}
},
"aliases": {
"logs": {}
}
}
}
2.2 模板参数 #
| 参数 | 说明 |
|---|---|
| index_patterns | 匹配的索引模式 |
| priority | 优先级(数字越大优先级越高) |
| template | 模板内容 |
| composed_of | 组合的组件模板 |
| version | 版本号 |
| _meta | 元数据 |
2.3 查看模板 #
bash
GET /_index_template/logs_template
GET /_index_template/logs*
2.4 删除模板 #
bash
DELETE /_index_template/logs_template
2.5 模拟模板应用 #
bash
POST /_index_template/_simulate/logs_template
模拟创建索引:
bash
POST /_index_template/_simulate_index/logs-2024-01-01
三、组件模板 #
3.1 创建组件模板 #
bash
PUT /_component_template/logs_settings
{
"template": {
"settings": {
"number_of_shards": 3,
"number_of_replicas": 1
}
}
}
PUT /_component_template/logs_mappings
{
"template": {
"mappings": {
"properties": {
"@timestamp": { "type": "date" },
"message": { "type": "text" }
}
}
}
}
3.2 组合组件模板 #
bash
PUT /_index_template/logs_template
{
"index_patterns": ["logs-*"],
"composed_of": ["logs_settings", "logs_mappings"],
"priority": 100
}
3.3 查看组件模板 #
bash
GET /_component_template/logs_settings
GET /_component_template/logs*
3.4 删除组件模板 #
bash
DELETE /_component_template/logs_settings
四、模板优先级 #
4.1 优先级规则 #
text
优先级规则
├── 数字越大优先级越高
├── 高优先级模板覆盖低优先级
├── 相同优先级后创建的覆盖先创建的
└── 显式设置优先于模板
4.2 示例 #
bash
PUT /_index_template/logs_default
{
"index_patterns": ["logs-*"],
"priority": 50,
"template": {
"settings": {
"number_of_shards": 1
}
}
}
PUT /_index_template/logs_nginx
{
"index_patterns": ["logs-nginx-*"],
"priority": 100,
"template": {
"settings": {
"number_of_shards": 3
}
}
}
logs-nginx-2024-01-01 会使用 logs_nginx 模板。
五、模板合并 #
5.1 合并规则 #
text
合并规则
├── settings
│ └── 深度合并
├── mappings
│ └── 合并properties
├── aliases
│ └── 合并别名
└── 冲突处理
└── 高优先级覆盖
5.2 合并示例 #
bash
PUT /_component_template/base_mappings
{
"template": {
"mappings": {
"properties": {
"@timestamp": { "type": "date" }
}
}
}
}
PUT /_component_template/extra_mappings
{
"template": {
"mappings": {
"properties": {
"message": { "type": "text" }
}
}
}
}
PUT /_index_template/combined_template
{
"index_patterns": ["logs-*"],
"composed_of": ["base_mappings", "extra_mappings"]
}
最终映射包含 @timestamp 和 message 两个字段。
六、索引模式 #
6.1 模式语法 #
| 模式 | 说明 |
|---|---|
| * | 匹配任意字符 |
| logs-* | 匹配logs-开头的索引 |
| -2024- | 匹配包含-2024-的索引 |
| logs-,metrics- | 匹配多个模式 |
6.2 模式示例 #
bash
PUT /_index_template/time_series_template
{
"index_patterns": ["logs-*", "metrics-*", "traces-*"],
"priority": 100,
"template": {
"settings": {
"number_of_shards": 3
}
}
}
七、内置模板 #
7.1 查看内置模板 #
bash
GET /_index_template
7.2 安全相关内置模板 #
bash
GET /_index_template/.security-*
八、模板版本管理 #
8.1 使用version #
bash
PUT /_index_template/logs_template
{
"index_patterns": ["logs-*"],
"priority": 100,
"version": 2,
"template": {
"settings": {
"number_of_shards": 5
}
}
}
8.2 使用_meta #
bash
PUT /_index_template/logs_template
{
"index_patterns": ["logs-*"],
"priority": 100,
"_meta": {
"description": "Logs index template",
"author": "admin",
"last_updated": "2024-01-01"
},
"template": {
"settings": {
"number_of_shards": 3
}
}
}
九、实际应用示例 #
9.1 日志索引模板 #
bash
PUT /_index_template/logs_template
{
"index_patterns": ["logs-*"],
"priority": 100,
"template": {
"settings": {
"number_of_shards": 3,
"number_of_replicas": 1,
"refresh_interval": "30s",
"index.lifecycle.name": "logs_policy",
"index.lifecycle.rollover_alias": "logs"
},
"mappings": {
"properties": {
"@timestamp": { "type": "date" },
"message": { "type": "text" },
"level": { "type": "keyword" },
"logger": { "type": "keyword" },
"service": { "type": "keyword" },
"host": { "type": "keyword" },
"trace_id": { "type": "keyword" },
"span_id": { "type": "keyword" }
}
},
"aliases": {
"logs": {}
}
}
}
9.2 时序数据模板 #
bash
PUT /_index_template/metrics_template
{
"index_patterns": ["metrics-*"],
"priority": 100,
"template": {
"settings": {
"number_of_shards": 2,
"number_of_replicas": 1
},
"mappings": {
"properties": {
"@timestamp": { "type": "date" },
"metric_name": { "type": "keyword" },
"value": { "type": "double" },
"tags": { "type": "keyword" },
"host": { "type": "keyword" }
}
}
}
}
十、最佳实践 #
10.1 模板设计 #
text
模板设计建议
├── 使用组件模板
│ └── 提高复用性
├── 合理设置优先级
│ └── 避免冲突
├── 使用版本管理
│ └── 便于追踪变更
└── 添加元数据
└── 记录模板信息
10.2 命名规范 #
text
命名规范
├── 模板名称
│ └── <type>_template
├── 组件名称
│ └── <type>_<component>
└── 索引模式
└── <type>-*
十一、总结 #
本章介绍了Elasticsearch索引模板:
- 索引模板自动应用配置
- 组件模板提高复用性
- 优先级决定模板应用顺序
- 模板可以组合使用
- 使用版本和元数据管理模板
- 合理设计模板简化索引管理
下一步,我们将学习别名管理。
最后更新:2026-03-27