elasticsearch - 如何通过不匹配模式的 kv 过滤器排除解析事件
问题描述
我正在解析来自 UTM 解决方案的许多守护进程的日志。Grok 和 kv 配置如下所示:
grok {
match => [ "message", "%{SYSLOGPROG} %{NOTSPACE:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" ]
}
kv {
id => "syslogkv"
source => "syslog_message"
trim_key => " "
trim_value => " "
value_split => "="
field_split => " "
}
通常事件看起来像
<30>2019:04:23-20:13:38 hostname ulogd[5354]: id="2001" severity="info" sys="SecureNet" sub="packetfilter" name="Packet dropped" action="drop" fwrule="60002" initf="eth3.5" outitf="eth5" srcmac="c8:9c:1d:af:68:7f" dstmac="00:1a:8c:f0:f5:23" srcip="x.x.x.x" dstip="y.y.y.y" proto="17" length="56" tos="0x00" prec="0x00" ttl="63" srcport="5892" dstport="53"
并解析没有任何问题
但是当一些守护进程生成看起来像的事件时(例如 WAF)
<139>2019:04:23-16:21:38 hostname httpd[1475]: [security2:error] [pid 1475:tid 3743300464] [client x.x.x.x] ModSecurity: Warning. Pattern match "([\\\\~\\\\!\\\\@\\\\#\\\\$\\\\%\\\\^\\\\&\\\\*\\\\(\\\\)\\\\-\\\\+\\\\=\\\\{\\\\}\\\\[\\\\]\\\\|\\\\:\\\\;\\"\\\\'\\\\\\xc2\\xb4\\\\\\xe2\\x80\\x99\\\\\\xe2\\x80\\x98\\\\`\\\\<\\\\>].*?){8,}"
我的输出中断,logstash 停止处理任何日志。如何通过正则表达式或任何模式排除 kv 解析事件?简单来说 - 如果 syslog_message 中的第一个单词以“[”或任何其他正则表达式开头,则不要使用 kv。
解决方案
将您的 kv 过滤器包装在该字段的条件中:
if [syslog_message] !~ /^\[/ {
kv { }
}
推荐阅读
- spring - 如何在 Spring @RequestParam 中使用自定义反序列化器
- php - Laravel 如何管理多对多关系的常见问题解答
- postgresql - 表“产品”缺少 FROM 子句条目
- svn - 本地删除 SVN 分支,但不从远程删除
- javascript - 我们如何在通过控制器附加到 html 页面的 html 中使用 angularjs 范围变量?
- flutter - 如何解决 Flutter 上未使用 import 的问题?
- jquery - 在 mouseleave 上隐藏元素(仅在快速移动时?)
- java - 当子字符串包含某些字符时更改整个字符串
- local-storage - 第一次在 SwiftUI 中未保存和更新 UserDefaults
- python - Youtube API v 3 中的布尔 OR(Python 代码)