实现模式
编辑实现模式
编辑数据规范化提供了来自各种数据源的事件的一致视图。遵循这些约定将有助于更好地描述、发现、识别和分类事件。
基础字段
编辑位于 ECS 顶层任何字段集之外的各个字段组称为基础字段。
ECS 事件遵循这些基础字段约定
- @timestamp
- 所有事件都必须使用事件的原始时间戳填充
@timestamp
。 - message
- 大多数事件都应填充
message
。 - ecs.version
- 引用的
ecs.version
用于开发数据映射或摄取管道。此值有助于检测映射何时更新或落后。它还可以帮助解释为什么特定数据源未填充与其他数据源相同的字段。 - 标签
tags
和labels
字段添加简单的元数据作为keyword
值。
主机
编辑在 ECS 中,host
是发生事件的计算实例。host
可以是物理设备、虚拟机、容器或云实例。
host.*
字段集包含不同计算实例的公共属性。某些主机类型具有更多字段来捕获特定细节,例如 cloud.*
或 container.*
。
代理和观察者
编辑代理是收集、观察、测量或检测事件的软件。agent.*
字段捕获有关哪个代理实体捕获事件的详细信息,包括代理的版本。代理的示例包括 Beats 和 Elastic Agent。
observer
是外部监控或中介设备,例如防火墙、APM 服务器或 Web 代理。这些设备监控和检测网络、安全、应用程序事件。在observer.*
字段集中捕获这些设备类型的详细信息。
时间戳
编辑ECS 要求每个事件都包含 @timestamp
字段。某些事件还包含需要捕获的额外时间戳。
- @timestamp
- 所有事件都必须使用事件的原始时间戳填充
@timestamp
。 - event.created
- 代理或管道看到事件的时间戳。
- event.ingested
- 事件到达中心数据存储(例如 Elasticsearch)的时间戳。
这三个时间戳通常应按时间顺序排列
@timestamp < event.created < event.ingested
- event.start
- 此时间戳标记事件活动的开始。例如,在网络会话中,
event.start
是流中第一个观察到的数据包的时间戳。 - event.end
- 此时间戳标记活动的结束。在网络流中,
event.end
是流中最后一个观察到的数据包的时间戳。 - event.duration
event.end
和event.start
之间的差值
event.duration = event.end - event.start
来源
编辑存在特定的 event.*
字段来捕获事件的来源。
- event.provider
- 包含生成事件的软件或操作系统的名称。
- event.module
- 如果摄取代理或管道具有模块或插件的概念,则使用模块或插件名称填充
event.module
。 - event.dataset
- 用于定义来自事件源的不同类型的日志或指标。推荐的约定是
<moduleName>.<datasetName>
。对于 Apache Web 服务器访问日志,event.dataset
值将为apache.access
。
分类
编辑事件分类字段使用四个字段的允许值对类似事件进行分组
-
event.kind
-
event.category
-
event.type
-
event.outcome
使用分类字段 涵盖了更多关于将这四个字段一起使用以对事件进行分类的详细信息。
丰富事件
编辑监控代理或摄取管道可以向原始事件添加更多详细信息。ECS 具有许多字段来保存这些丰富细节。
查找
编辑- GeoIP
- 添加有关 IPv4 或 IPv6 地址的地理位置的信息。通常用于填充网络事务字段(如
source.*
、destination.*
、client.*
和server.*
)下的geo.*
字段。
{ "source": { "address": "8.8.8.8", "ip": "8.8.8.8", "geo": { "continent_name": "North America", "country_name": "United States", "country_iso_code": "US", "location": { "lat": 37.751, "lon": -97.822 } } } }
- 自治系统编号
- 自治系统编号 (ASN) 数据库查找确定与 IP 地址关联的 ASN。
解析
编辑- 用户代理
- 将用户代理分解为各个字段。
{ "user_agent": { "user_agent": { "name": "Chrome", "original": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36", "version": "51.0.2704.103", "os": { "name": "Mac OS X", "version": "10.10.5", "full": "Mac OS X 10.10.5", "platform": "darwin", "type": "macos" }, "device" : { "name" : "Mac" } } } }
- URL
- URL 也可以分解为其各个部分。
{ "original" : "http://myusername:[email protected]:80/foo.gif?key1=val1&key2=val2#fragment", "url" : { "path" : "/foo.gif", "fragment" : "fragment", "extension" : "gif", "password" : "mypassword", "original" : "http://myusername:[email protected]:80/foo.gif?key1=val1&key2=val2#fragment", "scheme" : "http", "port" : 80, "user_info" : "myusername:mypassword", "domain" : "www.example.com", "query" : "key1=val1&key2=val2", "username" : "myusername" } }
- 域名
- 从完全限定域名 (FQDN) 中提取注册域名(也称为有效的顶级域名加一)、子域名和有效的顶级域名。
{ "fqdn": "www.example.ac.uk", "url": { "subdomain": "www", "registered_domain": "example.ac.uk", "top_level_domain": "ac.uk", "domain": "www.example.ac.uk" }
相关字段
编辑许多事件具有填充不同字段的类似内容:IP 地址、文件哈希、主机名。使用related.*
字段在这些事件之间进行切换。
例如,在 host.*
、source.*
、destination.*
、client.*
和 server.*
字段集以及 network.forwarded_ip
字段下找到的 IP 地址。通过将事件中的所有 IP 地址添加到 related.ip
字段,现在有一个单一字段可以搜索给定的 IP,而不管它出现在哪个字段。
related.ip: ["10.42.42.42"]