提取字段和整理数据

编辑

提取字段和整理数据

编辑

本节描述的插件对于提取字段并将非结构化数据解析为字段非常有用。

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 功能,因此 免费使用