提取字段和数据整理

编辑

提取字段和数据整理

编辑

本节介绍的插件可用于提取字段并将非结构化数据解析为字段。

dissect 过滤器

使用分隔符将非结构化事件数据提取到字段中。dissect 过滤器不使用正则表达式,速度非常快。但是,如果数据的结构一行一行变化,则 grok 过滤器更合适。

例如,假设您有一个包含以下消息的日志:

Apr 26 12:20:02 localhost systemd[1]: Starting system activity accounting tool...

以下配置会对消息进行分解:

filter {
  dissect {
    mapping => { "message" => "%{ts} %{+ts} %{+ts} %{src} %{prog}[%{pid}]: %{msg}" }
  }
}

应用 dissect 过滤器后,事件将被分解为以下字段:

{
  "msg"        => "Starting system activity accounting tool...",
  "@timestamp" => 2017-04-26T19:33:39.257Z,
  "src"        => "localhost",
  "@version"   => "1",
  "host"       => "localhost.localdomain",
  "pid"        => "1",
  "message"    => "Apr 26 12:20:02 localhost systemd[1]: Starting system activity accounting tool...",
  "type"       => "stdin",
  "prog"       => "systemd",
  "ts"         => "Apr 26 12:20:02"
}
kv 过滤器

解析键值对。

例如,假设您有一个日志消息包含以下键值对:

ip=1.2.3.4 error=REFUSED

以下配置将键值对解析为字段:

filter {
  kv { }
}

应用过滤器后,示例中的事件将具有以下字段:

  • ip: 1.2.3.4
  • error: REFUSED
grok 过滤器

将非结构化事件数据解析为字段。此工具非常适合 syslog 日志、Apache 和其他 Web 服务器日志、MySQL 日志以及通常为人类而不是计算机编写消费的任何日志格式。Grok 通过将文本模式组合成匹配日志的内容来工作。

例如,假设您有一个 HTTP 请求日志包含以下消息:

55.3.244.1 GET /index.html 15824 0.043

以下配置将消息解析为字段:

filter {
  grok {
    match => { "message" => "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}" }
  }
}

应用过滤器后,示例中的事件将具有以下字段:

  • client: 55.3.244.1
  • method: GET
  • request: /index.html
  • bytes: 15824
  • duration: 0.043

如果您需要帮助构建 grok 模式,请尝试使用 Grok 调试器。Grok 调试器是基本许可下的 X-Pack 功能,因此免费使用