我一直致力于获取 samba vfs full_audit 日志并使用 grok 对其进行处理,然后将其移至 ELK 堆栈。
我已将以下内容添加到我的全局 samba 配置中:
full_audit:prefix = %u|%U|%I|%m|%S|%T|%D
full_audit:success = mkdir rename unlink rmdir pwrite
full_audit:failure = connect
full_audit:facility = local1
full_audit:priority = NOTICE INFO
所以我的日志类似于:
Oct 30 20:22:04 localhost smbd[27520]: stock|stock|192.168.0.6|HOSTNAME|adminstorage|2014/10/30 20:22:04|STOCKBOX|rename|ok|Media/config.txt|.recycle/stock/Media/config.txt
使用以下内容:
mutate {
gsub => ["message","\|"," "]
}
我删除了角色之间的管道并用空格替换它们,以便 grok 可以处理它。留给我:
Oct 30 20:22:04 localhost smbd[27520]: stock stock 192.168.0.6 HOSTNAME adminstorage 2014/10/30 20:22:04 STOCKBOX rename ok Media/config.txt .recycle/stock/Media/config.txt
目前我正在使用以下 grok 模式:
%{MONTH:syslog_month} %{MONTHDAY:syslog_day} %{TIME:syslog_time} localhost smbd\[%{INT:pid}\]: %{USER:user_service} %{USER:user_session} %{IP:client_ip} %{HOST:client_NETBIOS} %{GREEDYDATA:name_of_service} %{YEAR:samba_year}/%{MONTHNUM:samba_month}/%{MONTHDAY:samba_day} %{TIME:samba_time} %{USER:domain} %{WORD:action} %{WORD:sucess} %{GREEDYDATA:path}
最后,我依靠 GREEDYDATA 来清理路径,因为它缺少主要字符,所以它不会被 PATH 或其他我能想到使用的东西拾取。我是否需要编写自己的过滤器,或者我遗漏了什么?它重要的原因是,如果你正在进行重命名,你会得到 2 个路径,如果可能的话,我非常希望能够溢出 2 个路径。既然它们在路径中可以有空格,并且分割它们的东西也是一个空格,我怎样才能将它们分开呢?
答案1
当我写完所有内容后,我想到了,只需将 mutate 更改为逗号或其他类似字符即可解决问题
编辑
我最终选择了“:”而不是逗号,这不能在文件名中使用,并且可以与新的 grok 一起使用:
filter {
mutate {
gsub => ["message","\|",":"]
}
grok {
match => { "message" => "%{MONTH:syslog_month} %{MONTHDAY:syslog_day} %{TIME:syslog_time} localhost smbd\[%{INT:pid}\]: %{USER:user_service}:%{USER:user_session}:%{IP:client_ip}:%{HOSTNAME:client_NETBIOS}:%{GREEDYDATA:name_of_service}:%{YEAR:samba_year}/%{MONTHNUM:samba_month}/%{MONTHDAY:samba_day} %{TIME:samba_time}:%{HOST:domain}:%{WORD:action}:%{WORD:sucess}:%{SAMBAFILES}" }
}
}
使用以下模式:
SAMBAFILES (?:%{GREEDYDATA:file_start}:%{GREEDYDATA:file_end}|%{GREEDYDATA:file_position})
到目前为止,这在测试中运行良好