编辑字段映射编辑

摄取管道在 Elasticsearch 索引中创建字段,但不会定义字段本身。相反,每个字段都需要一个定义的数据类型或映射。

在集成中,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: [email protected]
    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: [email protected]

ECS 字段的直接定义

- name: cloud.acount.id
  level: extended
  type: keyword
  ignore_above: 1024
  description: 'The cloud account or organ....'
  example: 43434343
  1. 本地 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编辑

agent.yml 文件定义了默认处理器使用的字段。示例:cloud.account.idcontainer.idinput.type

base-fields.yml编辑

在此文件中,data_stream 子字段 typedatasetnamespace 定义为 constant_keyword 类型,这些字段的值由集成添加。event.moduleevent.dataset 字段定义了特定于此集成的固定值: - event.module: apache - event.dataset: apache.access 字段 @timestamp 在此处定义为 date 类型。

fields.yml编辑

在这里,我们定义了集成中需要的但在 ECS 中找不到的字段。以下示例定义了 Apache 集成中的字段 apache.access.ssl.protocol

+

- name: apache.access
  type: group
  fields:
    - name: ssl.protocol
      type: keyword
      description: |
        SSL protocol version.

一般指南 中了解有关字段的更多信息。