大数据-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 | 来源页 |
| agent | User-Agent |
4. 验证解析效果
output {
stdout { codec => rubydebug }
}
5. 错误速查表
| 问题 | 可能原因 | 解决方案 |
|---|---|---|
| grok 未命中 | 模式不匹配 | 使用 grok debugger 在线调试 |
| 多行日志 | 日志换行 | 使用 multiline codec |
| 性能问题 | 正则复杂 | 预编译正则或简化模式 |
| 时间字段不规范 | @timestamp 未解析 | 使用 date 插件转换 |
6. 总结
- grok 用命名捕获提取字段
- 控制台和 Nginx 日志格式不同,模式不同
- 用 rubydebug 快速验证解析效果