约定

编辑

ECS 的实现遵循一些约定。理解它们将有助于您更好地理解 ECS。

整数的数据类型
编辑

除非另有说明,整数字段使用的数据类型应为 long

ID 和大多数代码是关键字,而不是整数
编辑

尽管 ID 和代码(例如错误代码)通常是整数,但情况并非总是如此。由于我们希望尽可能将更多的系统和数据源映射到 ECS,我们默认对 ID 和代码使用 keyword 类型。

某些特定类型的代码始终是整数,例如 HTTP 状态代码。如果这些代码具有特定的对应字段(如 HTTP 状态),则其类型可以安全地设置为整数类型。但是像 error.code 这样的通用字段不能保证这一点,因此是 keyword

文本索引和多字段
编辑

Elasticsearch 可以使用数据类型索引文本

  • text 文本索引允许全文搜索,或搜索字段中任意的单词。请参阅 Elasticsearch 参考指南中的 文本数据类型
  • keyword 关键字索引提供更快的精确匹配过滤、前缀搜索(如自动完成),并使聚合(如 Kibana 可视化)成为可能。有关更多信息,请参阅 Elasticsearch 参考指南,了解 精确匹配过滤前缀搜索聚合
文本字段的默认 Elasticsearch 索引约定
编辑

除非您的索引映射或索引模板另有指定(如 ECS 索引模板),否则 Elasticsearch 会将文本字段以 text 类型在规范字段名称处进行索引,并以 keyword 类型在多字段中嵌套第二次进行索引。

默认 Elasticsearch 约定

  • 规范字段:myfieldtext
  • 多字段:myfield.keywordkeyword
文本字段的 ECS 索引约定
编辑

ECS 颠倒了上述约定。

对于监控用例,几乎仅需要 keyword 索引,只有极少数字段需要全文搜索。此外,在不需要使用的许多字段上进行全文搜索索引会浪费资源。

考虑到这两个前提,ECS 默认将所有文本索引设置为 keyword 数据类型(极少数例外)。任何需要在其他字段上进行全文搜索索引的用例都可以添加一个 多字段来进行全文搜索。这样做不会与 ECS 冲突,因为规范字段名称仍将保持 keyword 索引。

因此,ECS 的文本多字段约定是

  • 规范字段:myfieldkeyword
  • 多字段:myfield.texttext

例外

此约定的唯一例外是字段 messageerror.message,它们仅索引用于全文搜索,没有多字段。这两个字段不遵循新约定,因为对于 Beats 中广泛使用的这两个字段来说,这将是一个巨大的突破性更改。

但是,将来在 ECS 中索引以进行全文搜索的任何字段都将遵循多字段约定,其中 text 索引嵌套在多字段中。