3.5.20. ECS介绍
创作人:徐天豪
审稿人:亢伟楠
Elastic Common Schema (ECS) 是一个开源规范,定义了在 Elasticsearch 中存储事件数据时要使用的一组通用字段,规范了命名、层级与类型。
背景
无论你是在执行安全分析、运营分析,还是完全不同的用例,你都可能常常需要对来自不同来源的数据进行集中分析。
这些不同来源的数据里面常常会出现字段含义相同但实际名称类型不一致的情况,比如:
对于源 ip 这个字段,有的厂商起名为 source_ip,有的厂商起名为 src_ip
在下述的一些数据源不同的情况,会使我们的数据在格式方面常常出现各种不一致的现象:
l 不同的数据类型(例如指标、日志、APM)
l 采用了不同供应商的设备
l 相似但不完全相同的数据源(例如端点数据的多个来源,譬如 IDS、防火墙 和 IPS)
在这种情况下,假设我们需要结合多数据源进行下钻分析,全局监控时,我们会面临巨大的工作量:
l 当我们接入新的数据源后,在使用数据之前需要熟悉其中的每个字段
l 当我们查询的时候的,需要针对不同的数据源调整查询语句
l 当我们配置仪表盘告警的时候,需要针对不同的数据源进行大量的重复配置
由于这种多数据源字段命名、类型不一致的问题会给我们实际工作中带来大量重复的定制化工作,因此迫切的需要通过定义一组通用的字段和数据类型,让用户对不同的数据源执行统一的搜索、可视化和分析。
ECS是什么
Elastic Common Schema(ECS)是一个开源规范,它定义了一组通用字段和命名准则,用于将数据采集到 Elasticsearch 中,可让用户以一致的方式分析来自不同来源的数据。ECS 是灵活的,你可以添加自定义的字段。
ECS 将许多字段针对用途进行了分组,这些分组又被称为“字段集”。其中 base 字段集中的字段是在事件的最顶层中进行定义的,所有其他字段集都定义为 Elasticsearch 中的嵌套对象,所有字段都在该对象下定义。完整的 ECS Field reference 可以直接参考官方文档:
https://www.elastic.co/guide/en/ecs/1.9/ecs-field-reference.html 。
ECS 采用专门构建的分类学,具有很好的可预测性,同时还包括可适应定制用例的包罗万象的规格,具有很好的通用性。ECS 的分类学会将数据元素划分为以下三个级别的字段:
通过下图我们可以看到通过 ECS 实现了每一个字段,字段名称与字段类型的统一。
如何使用ECS
如何转换
我们要做的事就是将现有的数据按照 ECS 的规范进行映射转换,具体的话可以分为以下三个
步骤:
1、查看原始事件中的每个字段并将其映射到相关的 ECS 字段。
2、查看我们正在使用的任何字段集中的其他核心字段、扩展字段,并尝试填充它。
3、设置ecs.version为我们当前正在使用的版本,方便后续的版本升级。
我们以下面的这一条事件为例:
1、这条事件里的信息可以对应上4个ECS字段集,分别是 agent、cloud、event、host,再加上base 共计5个 ECS 字段集,我们将其中的每个字段映射成相关的 ECS 字段。
2、如果不存在相关的 ECS 核心字段与扩展字段,使用 ECS 命名准则自定义字段,并将原始事件字段映射到该字段。
3、查看这6个字段集中的所有核心字段与扩展字段,并尝试填充它。
l 考虑根据其他元数据(例如静态信息)填充该字段(例如,event.category:authentication即使你的身份验证事件未提及“authentication”一词,也要添加)。
l 尽可能的采集其他环境元数据,例如有关主机、容器或云实例的信息。
4、设置ecs.version信息,方便后续版本升级。
什么时候进行转换
ECS 字段转换的动作可以发生在事件的产生阶段,ETL 阶段或者 ingest 阶段进行转换。
注意:从 Beats 7.0 开始,所有事件源已经自动全部转换为 ECS 格式,如果我们采用 Beats 版本低于7.0的话,我们需要手动在后续环节进行字段的转换。
自定义字段命名注意事项
l 不要使用和 ECS namespace 冲突的字段名
l 所有的字段名必须小写
l 除了下划线和点以外不能有其他的特殊字符
l 使用下划线连接词语
l 尽可能避免使用缩写
l 除非字段描述历史信息,否则使用现在时
l 正确使用单复数名称以反映字段内容
《Elastic Stack 实战手册》——三、产品能力——3.5 进阶篇——3.5.20. ECS介绍(下) https://developer.aliyun.com/article/1226519