约定

编辑

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 索引嵌套在多字段中。