Logstash 好好用,但是linux base 的東西,要叫他吃 windows 的log有點工程要做,以下的方式是透過 Eventlog to syslog 的方式執行
配置
syslogd : 10.0.0.1:6666
windows : 10.0.0.2
先找一台 linux 當syslogd ,但不需要額外裝其他程式,叫 logstash 聽個 UDP 的 port (eg. 6666)就好,設定如下
input {
udp {
port => 6666
type => "win-event-log"
}
}
然後重啟 logstash ,再用 netstat -an 看到 udp port 6666 有在LISTEN就行了udp {
port => 6666
type => "win-event-log"
}
}
接著在目標的windows server 安裝 Eventlog to syslog (evtsys)
由 https://code.google.com/p/eventlog-to-syslog/下載
解開來後執行
evtsys.exe -i -h 10.0.0.1 -p 6666
他是有其他參數可以設,也需要設,但是不work,之後透過registry修改
其中 -i 表示 install ,-h 指定 syslogd 的位址, -p 指定 syslogd 聽的 port
完成安裝後,如果想修改facility level 或是log level 需透過 regedit.exe
路徑為 : HKEY_LOCAL_MACHINE\SOFTWARE\ECN\EvtSys\3.0
之後透過 services.msc 看看evtSys 有沒有變成 windows 的長駐服務並開起,如果沒有,手動開啟它 (2003/2008/2012 下安裝完的狀態不一定相同 orz)
當 service 開啟後,就會看到 windows 的 log 如排山倒海而來了 orz
如果windows莫名其妙的訊息實在太多,可以在 logstash 的設定檔中 filter 的部份加上類似以下的設定
filter{
if [type] == "win-event-log"
grok {
match => ["message", "%{SYSLOGBASE} %{NUMBER:event_id}: %{GREEDYDATA:msg}"]
}
if [event_id] == "你想濾掉的 event_id " {
drop {}
}
}
}
if [type] == "win-event-log"
grok {
match => ["message", "%{SYSLOGBASE} %{NUMBER:event_id}: %{GREEDYDATA:msg}"]
}
if [event_id] == "你想濾掉的 event_id " {
drop {}
}
}
}
p.s 如果 grok 中的PATTERN 一直沒辦法正確的 parse ,可以在 https://grokdebug.herokuapp.com/ 進行測試
EvtSys (4.5) 說明文件 https://code.google.com/p/eventlog-to-syslog/downloads/detail?name=Readme_4.5.0.pdf
0 意見:
張貼留言