问题与解答

编辑

使用 ECS 的好处是什么?

编辑

在集群中采用这些字段和名称的用户可以获得以下好处:

  • 数据关联。 能够轻松关联来自相同或不同来源的数据,包括

    • 来自指标、日志和应用程序性能管理 (apm) 工具的数据
    • 来自相同机器/主机的数
    • 来自相同服务的数据
  • 易于回忆。 提高了记住常用字段名称的能力(因为只有一组,而不是每个数据源一组)
  • 易于推断。 提高了推断字段名称的能力(因为字段命名遵循少量规则,且例外情况很少)
  • 复用。 能够跨多个数据源复用分析内容(搜索、可视化、仪表板、警报、报告和机器学习作业)
  • 面向未来。 能够在您的环境中使用任何未来 Elastic 提供的分析内容,无需修改

如果我的字段与 ECS 冲突怎么办?

编辑

重命名处理器 可以帮助您解决字段冲突。例如,假设您已经有一个名为“user”的字段,但 ECS 使用 user 作为对象。您可以在摄取时使用重命名处理器将您的字段重命名为匹配的 ECS 字段。如果您的字段与 ECS 不匹配,则可以将您的字段重命名为 user.value

如果我的事件有其他字段怎么办?

编辑

事件可能包含除 ECS 字段之外的其他字段。这些字段可以遵循 ECS 命名和编写规则,但这并非强制要求。

为什么 ECS 使用点表示法而不是下划线表示法?

编辑

将数据摄取到 Elasticsearch 中有两种常见的键格式:

  • 点表示法:user.firstname: Nicolasuser.lastname: Ruflin
  • 下划线表示法:user_firstname: Nicolasuser_lastname: Ruflin

ECS 使用点表示法来表示嵌套对象。

两种表示法之间有什么区别?
编辑

摄取 user.firstname: Nicolasuser.lastname: Ruflin 等同于摄取以下 JSON:

    "user": {
      "firstname": "Nicolas",
      "lastname": "Ruflin"
    }

在 Elasticsearch 中,user 表示为 对象数据类型。在下划线表示法的情况下,两者都只是 字符串数据类型

点表示法的优势
编辑

使用点表示法,Elasticsearch 中的每个前缀都是一个对象。每个对象都可以具有 参数,用于控制如何处理对象内的字段。例如,在 ECS 的上下文中,这些参数允许您禁用某些前缀的动态属性创建。

单个对象在摄取端和事件端都提供了更大的灵活性。例如,在 Elasticsearch 中,您可以使用删除处理器删除整个对象,而不是选择其中的每个键。您不必事先知道对象中将包含哪些键。

在 Beats 中,您可以简化事件的创建。例如,您可以将每个对象视为一个对象(或 Golang 中的结构体),这使得构建和修改最终事件的每个部分变得更容易。

点表示法的缺点
编辑

在 Elasticsearch 中,每个键只能有一种类型。例如,如果 user 是一个 object,则您不能在同一个索引中将其用作 keyword 类型,例如 {"user": "nicolas ruflin"}。此限制在某些数据集中可能是一个问题。对于 ECS 数据本身,这不是问题,因为所有字段都是预定义的。

如果我已使用下划线表示法怎么办?
编辑

只要没有冲突,下划线表示法和 ECS 点表示法就可以在同一文档中共存。

如果我想使用来自相同字段类型族的不同数据类型怎么办?

编辑

在 Elasticsearch 中,字段类型按族分组。同一族中的类型支持相同的搜索功能,但可能具有不同的空间使用率或性能特征。例如,keywordwildcard 类型都是 keyword 族的成员,textmatch_only_texttext 族的成员。

ECS 中定义的字段类型为大多数用户提供了最佳的默认体验。但是,如果特定用例需要,则可以使用来自同一族的不同类型替换 ECS 中定义的默认类型。在更改默认字段类型之前,用户应了解任何潜在的性能或存储差异。

Elasticsearch 映射类型 部分提供了有关类型族的更多信息。