Logs

如何處理samba full_audit 登錄到logstash

  • October 6, 2018

我一直在努力獲取我的 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})

到目前為止,這在測試中執行良好

引用自:https://unix.stackexchange.com/questions/165348