编辑字段映射
采集管道在 Elasticsearch 索引中创建字段,但不定义字段本身。相反,每个字段都需要定义数据类型或映射。
映射是定义如何存储和索引文档及其包含的字段的过程。每个文档都是字段的集合,每个字段都有自己的数据类型。映射数据时,创建包含与文档相关的字段列表的映射定义。映射定义还包括元数据字段,例如 _source 字段,用于自定义文档的相关元数据的处理方式。
要了解更多信息,请参阅 映射。
在集成中,fields
目录用作创建集成组件模板的蓝图。构建集成时,将统一此目录中所有文件的内容,因此每个数据流数据集的映射需要是唯一的。
与采集管道一样,映射仅适用于数据流数据集,例如我们的示例中的 apache.access
数据集。
这些文件的名称是约定,任何带有 .yml
扩展名的文件名都可以使用。
集成在定义 ECS 字段的方式上进行了重大改进。下面是一个指南,说明根据您的集成将支持的 Elastic 版本,应使用哪种方法。
ECS 映射组件模板(>=8.13.0)仅支持 8.13.0 及更高版本的集成可以使用 Fleet 安装的 ecs@mappings 组件模板。这使得显式声明 ECS 字段变得不必要;Elasticsearch 中的
ecs@mappings
组件模板将自动检测并配置它们。但是,如果显式定义了 ECS 字段,它们将覆盖ecs@mappings
组件模板提供的动态映射。它们也可以使用external
声明导入,如下例所示。动态映射导入(<8.13.0 & >=8.13.0)支持低于 8.13.0 版本的 Elastic Stack 的集成仍然可以通过在包目录根目录中的
_dev/build/build.yml
文件的 ECS 部分定义import_mappings: true
来动态导入 ECS 字段映射。这引入了一个包含大多数 ECS 定义的 动态映射。使用此方法意味着,与前一种方法一样,无需在集成中定义 ECS 字段,它们会在构建时动态集成到包中。可以使用显式定义的 ECS 字段,并且也会覆盖此机制。此方法的上述
build.yml
文件示例dependencies: ecs: reference: git@v8.6.0 import_mappings: true
显式 ECS 映射 如前两种方法所述,仍然可以显式设置 ECS 映射,并且将覆盖动态映射。这可以通过两种方式完成:- 使用
external: ecs
引用来导入特定字段的定义。- 字面定义 ECS 字段。external: ecs
定义指示elastic-package
命令行工具引用外部 ECS 引用来解析特定字段。默认情况下,它会查看 Github 上托管的 ECS 引用文件。此外部引用文件由位于包目录根目录中_dev/build/build.yml
文件中的 Git 引用确定。为外部引用设置的build.yml
文件dependencies: ecs: reference: git@v8.6.0
字面定义 ECS 字段
- name: cloud.acount.id level: extended type: keyword ignore_above: 1024 description: 'The cloud account or organ....' example: 43434343
本地 ECS 引用文件(离线设置)通过将
_dev/build/build.yml
中的 Git 引用更改为下载的 ECS 引用文件的路径,elastic-package
命令行工具可以本地查找此文件。请注意,该路径应该是引用文件的完整路径。 这样做,我们的build.yml
文件如下所示dependencies: ecs: reference: file:///home/user/integrations/packages/apache/ecs_nested.yml
Apache 集成的 access
数据流数据集有四个不同的字段定义
下面的 apache
集成尚未更新为使用动态 ECS 字段定义,并且使用 external
引用来定义 ecs.yml
中的 ECS 字段。
apache
└───data_stream
│ └───access
│ │ └───elasticsearch/ingest_pipeline
│ │ │ default.yml
│ │ └───fields
│ │ agent.yml
│ │ base-fields.yml
│ │ ecs.yml
│ │ fields.yml
│ └───error
│ │ └───elasticsearch/ingest_pipeline
│ │ │ default.yml
│ │ └───fields
│ │ agent.yml
│ │ base-fields.yml
│ │ ecs.yml
│ │ fields.yml
│ └───status
agent.yml
文件定义了默认处理器使用的字段。示例:cloud.account.id
, container.id
, input.type
在此文件中,data_stream
子字段 type
、dataset
和 namespace
被定义为类型 constant_keyword
,这些字段的值由集成添加。event.module
和 event.dataset
字段被定义为特定于此集成的固定值:- event.module: apache
- event.dataset: apache.access
字段 @timestamp
在此处定义为类型 date
。
在这里,我们定义了集成中需要的但在 ECS 中未找到的字段。下面的示例在 Apache 集成中定义了字段 apache.access.ssl.protocol
。
- name: apache.access
type: group
fields:
- name: ssl.protocol
type: keyword
description: |
SSL protocol version.
在通用指南中了解更多关于字段的信息。