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"]
}

最终映射包含 @timestampmessage 两个字段。

六、索引模式 #

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索引模板:

  1. 索引模板自动应用配置
  2. 组件模板提高复用性
  3. 优先级决定模板应用顺序
  4. 模板可以组合使用
  5. 使用版本和元数据管理模板
  6. 合理设计模板简化索引管理

下一步,我们将学习别名管理。

最后更新:2026-03-27