【发布时间】:2021-02-22 22:00:52
【问题描述】:
我正在学习如何使用 grok 插件。我有一个这样的消息字符串
"type=CRYPTO_SESSION msg=audit(111111.111:111111): pid=22730 uid=0 auid=123 ses=123 subj=system_u:system_r:sshd_t:a1-a1:a1.a1234 msg='op=xx=xx cipher=xx ksize=111 mac=xx pfs=xxx spid=111 suid=000 rport=000 laddr=11.11.111.111 lport=123 exe=\"/usr/sbin/sshd\" hostname=? addr=11.111.111.11 terminal=? res=success'"
我想提取字段 laddr、addr 和 lport。我创建了一个具有以下结构的模式目录
patterns
|
-- laddr
|
-- addr
我的过滤器是这样写的
filter {
grok {
patterns_dir => ["./patterns"]
match => { "messaage" => "%{LADDR:laddr} %{ADDR:addr}"}
}
}
我希望至少提取 laddr 和 addr。我使用https://grokdebug.herokuapp.com/ 获得匹配。有了这些模式
(?<laddr>\b(laddr=\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\b)
(?<addr>\b(addr=\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\b)
但配置无法编译。我刚刚离开这些文档:https://www.elastic.co/guide/en/logstash/current/plugins-filters-grok.html。我也尝试过使用 kv 过滤器,当我尝试使用类似的东西时遇到的问题
filter{
kv {
value_split => "="
}
}
我最终得到msg 字段出现两次。我真的很想弄清楚如何从这个字符串中获取属性。任何帮助将不胜感激。
【问题讨论】:
-
为什么不使用kv 过滤器?
-
使用这种模式
%{LADDR:laddr} %{ADDR:addr},它只有在你的日志看起来像这样时才有效:laddr=11.11.111.111 addr=999.999.999.999'。使用 grok,您使用的模式必须匹配整个日志行。虽然对于这样的日志,kv 过滤器要好得多。 -
@baudsp 我也尝试使用 kv 过滤器。
-
使用 kv 过滤器的 include_keys 选项与您感兴趣的键,也许?
-
如果你想使用 grok,使用这个模式:
%{LADDR:laddr}%{GREEDYDATA}%{ADDR:addr}。