实施模式编辑

规范化数据可以更一致地查看来自各种数据源的事件。遵循这些惯例将有助于更好地描述、发现、识别和分类事件。

基本字段编辑

位于 ECS 最顶层任何字段集之外的单个字段组被称为基本字段。

ECS 事件遵循以下基本字段的惯例

@timestamp
所有事件都必须使用事件的原始时间戳填充 @timestamp
message
大多数事件应填充 message
ecs.version
用于开发数据映射或摄取管道的引用 ecs.version。此值有助于检测映射更新或落后。它还可以帮助解释为什么特定数据源没有填充与其他数据源相同的字段。
标签
tagslabels 字段将简单的元数据添加为 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.endevent.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"]