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