我正在学习如何使用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
字段出现两次。我想弄清楚如何从这个字符串中获取属性。如有任何帮助,我将不胜感激。
我认为它的字段分裂了:
filter {
kv {
field_split => "&?"
}
}
你试过了吗,你得到任何错误信息吗?