约定
编辑约定
编辑ECS 的实现遵循一些约定。理解它们将有助于您更好地理解 ECS。
整数的数据类型
编辑除非另有说明,整数字段使用的数据类型应为 long
。
ID 和大多数代码是关键字,而不是整数
编辑尽管 ID 和代码(例如错误代码)通常是整数,但情况并非总是如此。由于我们希望尽可能将更多的系统和数据源映射到 ECS,我们默认对 ID 和代码使用 keyword
类型。
某些特定类型的代码始终是整数,例如 HTTP 状态代码。如果这些代码具有特定的对应字段(如 HTTP 状态),则其类型可以安全地设置为整数类型。但是像 error.code
这样的通用字段不能保证这一点,因此是 keyword
。
文本索引和多字段
编辑Elasticsearch 可以使用数据类型索引文本
文本字段的默认 Elasticsearch 索引约定
编辑除非您的索引映射或索引模板另有指定(如 ECS 索引模板),否则 Elasticsearch 会将文本字段以 text
类型在规范字段名称处进行索引,并以 keyword
类型在多字段中嵌套第二次进行索引。
默认 Elasticsearch 约定
- 规范字段:
myfield
为text
- 多字段:
myfield.keyword
为keyword
文本字段的 ECS 索引约定
编辑ECS 颠倒了上述约定。
对于监控用例,几乎仅需要 keyword
索引,只有极少数字段需要全文搜索。此外,在不需要使用的许多字段上进行全文搜索索引会浪费资源。
考虑到这两个前提,ECS 默认将所有文本索引设置为 keyword
数据类型(极少数例外)。任何需要在其他字段上进行全文搜索索引的用例都可以添加一个 多字段来进行全文搜索。这样做不会与 ECS 冲突,因为规范字段名称仍将保持 keyword
索引。
因此,ECS 的文本多字段约定是
- 规范字段:
myfield
为keyword
- 多字段:
myfield.text
为text
例外
此约定的唯一例外是字段 message
和 error.message
,它们仅索引用于全文搜索,没有多字段。这两个字段不遵循新约定,因为对于 Beats 中广泛使用的这两个字段来说,这将是一个巨大的突破性更改。
但是,将来在 ECS 中索引以进行全文搜索的任何字段都将遵循多字段约定,其中 text
索引嵌套在多字段中。