大数据-187 Logstash Filter 插件实战

1. Filter 插件概述

Filter 负责解析、转换、过滤事件。多个 Filter 按配置顺序依次执行。

注意:顺序很重要。

2. grok 正则解析

2.1 语法

(?<field_name>pattern)

2.2 控制台数据解析

input { stdin {} }

filter {
  grok {
    match => { "message" => "%{TIMESTAMP_ISO8601:timestamp}%{SPACE}%{LOGLEVEL:level}%{SPACE}%{GREEDYDATA:msg}" }
  }
}

output { stdout { codec => rubydebug } }

3. Nginx 日志解析

3.1 Nginx CLF 格式

127.0.0.1 - - [10/Oct/2024:13:55:36 +0800] "GET /index.html HTTP/1.1" 200 612 "-" "Mozilla/5.0"

3.2 grok 配置

grok {
  match => {
    "message" => '%{IPORHOST:clientip} %{USER:ident} %{USER:auth} \[%{HTTPDATE:timestamp}\] "%{WORD:verb} %{URIPATHPARAM:request} HTTP/%{NUMBER:httpversion}" %{NUMBER:response:int} %{NUMBER:bytes:int} "%{DATA:referrer}" "%{DATA:agent}"'
  }
}

3.3 解析后字段

字段含义
clientip客户端 IP
timestamp请求时间
verb请求方法
request请求路径
response状态码
bytes响应字节数
referrer来源页
agentUser-Agent

4. 验证解析效果

output {
  stdout { codec => rubydebug }
}

5. 错误速查表

问题可能原因解决方案
grok 未命中模式不匹配使用 grok debugger 在线调试
多行日志日志换行使用 multiline codec
性能问题正则复杂预编译正则或简化模式
时间字段不规范@timestamp 未解析使用 date 插件转换

6. 总结

  • grok 用命名捕获提取字段
  • 控制台和 Nginx 日志格式不同,模式不同
  • 用 rubydebug 快速验证解析效果