Logs
如何處理samba full_audit 登錄到logstash
我一直在努力獲取我的 samba vfs full_audit 日誌並使用 grok 處理它們並將它們移動到 ELK 堆棧。
我已將以下內容添加到我的全域 samba conf 中:
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 條路徑。由於它們可以在路徑中有空格,並且將它們分開的東西也是一個空格,我該如何將它們分開?
我一寫完就想到了,只需將 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})
到目前為止,這在測試中執行良好