加载中

模板

模板是 Elasticsearch 在创建索引或数据流时应用设置、映射和其他配置的机制。

您需要在创建索引或数据流之前配置模板。当创建索引时(无论是手动创建还是通过索引文档创建),匹配的模板将决定所应用的设置、映射和其他配置。当与 数据流 配合使用时,模板还会定义每个后端索引在创建时的配置方式。

有两种类型的模板

  • 索引模板 是创建索引或数据流时应用的主要配置对象。它使用 index_patterns 匹配索引名称,并使用 priority 值来解决冲突。索引模板可以选择直接定义设置、映射和别名,并引用提供可重用配置块的组件模板列表。它还可以指示是应该创建数据流还是普通索引。

  • 组件模板 是一种定义设置、映射和别名的可重用构建块。组件模板不会被直接应用;它们必须由索引模板引用。

索引模板及其引用的组件模板共同构成了所谓的可组合模板

提示

有关设置可组合模板的详细探索和示例,请参阅 Elastic 博客 Elasticsearch 中的索引模板:如何使用可组合模板

以下条件适用于使用模板

  • 可组合索引模板优先于任何 旧版模板(在 Elasticsearch 7.8 中已被弃用)。如果没有任何可组合模板匹配给定的索引,则旧版模板可能仍然匹配并被应用。
  • 如果创建索引时带有显式设置,并且该索引也匹配某个索引模板,则 创建索引 请求中的设置优先于索引模板及其组件模板中指定的设置。
  • 索引模板本身指定的设置优先于其组件模板中的设置。
  • 当您在索引模板的 composed_of 字段中指定多个组件模板时,组件模板会按指定的顺序合并,这意味着后面的组件模板会覆盖前面的组件模板。
  • 如果新的数据流或索引匹配多个索引模板,则使用具有最高优先级的索引模板。
  • 创建索引模板时,请注意避免与内置的 Elasticsearch 索引模板发生 命名模式冲突

索引模板用于在创建索引时对其进行配置。索引模板中指定的 映射设置别名 会被每个创建的索引继承。这些也可以在组成该索引模板的组件模板中指定。

您可以在 Kibana 中或使用 Elasticsearch API 创建和管理索引模板。

提示

如果您使用 Elasticsearch 安全功能,则需要以下 安全权限

  • 用于管理索引模板的 manage_index_templates 集群权限。

要添加这些权限,请转到 Stack 管理 > 安全 > 角色 或使用 创建或更新角色 API。

要创建索引模板,请完成以下步骤

  1. 使用导航菜单或全局搜索字段转到 Index Management 页面。

  2. 索引模板 (Index Templates) 选项卡中,选择 创建模板 (Create template)

    Create template page

  3. Logistics 页面上

    1. 为模板指定名称。

    2. 指定一个模式来匹配您要使用生命周期策略管理的索引。例如,my-index-*。请注意 避免命名模式冲突 与内置的 Elasticsearch 索引模板。

    3. 如果您正在存储持续生成且仅追加(append-only)的数据,您可以选择创建 数据流 而不是索引,以实现更高效的存储。

      注意

      当您启用数据流选项时,设置 数据保留 的选项也会变为可用。数据保留仅在您使用数据流生命周期时适用,它是索引生命周期管理的一种替代方案。有关详细信息,请参阅 数据流生命周期

    4. 配置您想要的任何其他选项,包括

      • 用于所创建索引的 索引模式
      • 模板优先级、版本和任何元数据。
      • 是否覆盖 action.auto_create_index 集群设置。

      有关这些选项的详细信息,请参阅 创建或更新索引模板 API 文档。

  4. 组件模板 页面上,您可以使用搜索和过滤工具来选择要包含在索引模板中的任何 组件模板。索引模板将继承在组件模板中定义的设置 (S)、映射 (M) 和别名 (A),并在创建索引时将其应用于索引。

  5. 索引设置 页面上,您可以直接在索引模板中定义索引设置。当与组件模板一起使用时,在此页面上定义的映射将覆盖关联组件模板中的任何冲突定义。

    1. 可选:添加在创建索引时应应用于索引的任何其他 索引设置。例如,您可以设置每个索引的分片数和副本数,以及通过指定 ILM 设置 来配置 ILM 以应用于这些索引。

      {
        "index.lifecycle.name": "my_policy",
        "index.lifecycle.rollover_alias": "test-alias",
        "number_of_shards": 1,
        "number_of_replicas": 1
      }
      		
  6. 可选:在 映射 页面上,自定义将文档索引到 Elasticsearch 时使用的字段和数据类型。当与组件模板一起使用时,这些映射会覆盖关联组件模板中的任何冲突定义。有关详细信息,请参阅 映射

    1. 例如,您可以定义一个映射,其中包含一个名为 geo对象 字段,以及一个名为 coordinates 的子 geo_point 字段。

      或者,您可以单击 加载 JSON 链接并将映射定义为 JSON

      {
        "properties": {
          "geo": {
            "properties": {
              "coordinates": {
                "type": "geo_point"
              }
            }
          }
        }
      }
      		
  7. 可选:在 别名 页面上,为每个创建的索引指定一个 别名。例如,您可以定义一个名为 my-index 的别名。

    {
     "my-index": {}
    }
    		

    请注意,在配置 ILM 时这不是必需的,ILM 会使用 index.lifecycle.rollover_alias 设置来访问滚动索引。

  8. 审阅 页面上,确认您的选择并选择 创建模板。您可以检查所选选项,以及将要创建的索引模板格式和关联的 API 请求。

新创建的索引模板将用于所有名称匹配指定模式的新索引,并且对于其中的每一个索引,都将应用指定的 ILM 策略。

使用 创建或更新索引模板 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"
  }
}
		
  1. 选择可以 避免冲突 与内置 Elasticsearch 索引模板的模式。
提示

在设置索引模板时,以下功能可能非常有用

  • 您可以在使用索引模板之前测试其效果。有关详细信息,请参阅 模拟多组件模板
  • 您可以为尚不存在的组件模板创建索引模板。执行此操作时,您可以在索引模板中使用 ignore_missing_component_templates 配置选项,以便忽略缺失的组件模板。有关详细信息,请参阅 忽略缺失的组件模板

Elasticsearch 具有内置的索引模板,每个模板的优先级为 100,适用于以下索引模式

  • .kibana-reporting*
  • logs-*-*
  • metrics-*-*
  • synthetics-*-*
  • profiling-*
  • security_solution-*-*
  • $.logs
  • $.logs.*
  • logs.otel
  • logs.otel.*
  • logs.ecs
  • logs.ecs.*

Elastic Agent 使用这些模板来创建数据流。由 Fleet 集成创建的索引模板使用类似的重叠索引模式,优先级最高可达 200

如果您使用 Fleet 或 Elastic Agent,请为您的索引模板分配一个低于 100 的优先级,以避免覆盖这些模板。否则,为避免意外应用这些模板,请执行以下一项或多项操作

  • 要禁用所有内置的索引和组件模板,请使用 集群更新设置 APIstack.templates.enabled 设置为 false。但请注意,这不推荐,请参阅 设置文档 以获取更多信息。
  • 使用非重叠的索引模式。
  • 为具有重叠模式的模板分配一个高于 500priority。例如,如果您不使用 Fleet 或 Elastic Agent,并且想要为 logs-* 索引模式创建模板,请为您的模板分配 501 的优先级。这可以确保应用您的模板,而不是 logs-*-* 的内置模板。
  • 为避免与内置和 Fleet 管理的索引模板产生命名冲突,请避免在您自己的索引模板名称中使用 @
  • 从 Elastic Stack 9.1 版本开始,Fleet 将 fleet-synced-integrations* 命名的索引用于某项功能。请避免使用此名称,以防止与内置索引冲突。

组件模板 是一种定义 映射设置别名 的可重用构建块。组件模板不会直接应用于索引,而是由 索引模板 引用,并在确定索引的最终配置时使用。

您可以在 Kibana 中或使用 Elasticsearch API 创建和管理组件模板。

您可以在 Kibana 的 索引管理 页面上创建、编辑、克隆和删除您的组件模板。请转到 组件模板 选项卡。

Component templates
  • 要显示详细信息并执行操作,请单击模板名称。
  • 要创建新的组件模板,请使用 创建组件模板 向导。

您可以使用 组件模板 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))"
          }
        }
      }
    }
  }
}
		
  1. 当新索引匹配该模板时,此组件模板会将名为 day_of_week运行时字段 添加到映射中。
© . This website operates independently and is not affiliated with or endorsed by Elasticsearch B.V. All brand names, logos, and trademarks are the property of their respective owners.