#設置輸入源,這裡是從標准輸入中讀取。
input { stdin { } }
#設置使用的filter。
filter {
grok {
#message默認使用了apachelog的模板
match => { "message" => "%{COMBINEDAPACHELOG}" }
}
date {
#指明了時間格式
match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ]
}
}
#定義輸出管道,這裡一個是輸出到本機的elasticSearch中,一個是輸出到標准輸出中。
output {
elasticsearch { host => localhost }
stdout { codec => rubydebug }
}
將以上內容保存為logstash.conf.然後運行 bin/logstash -f logstash.conf 待啟動完畢,在控制台上輸入以下文本進行測試 127.0.0.1 - - [11/Dec/2013:00:01:45 -0800] "GET /xampp/status.php HTTP/1.1" 200 3891 "http://cadenza/xampp/navi.php" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:25.0) Gecko/20100101 Firefox/25.0" 回車後我們能看到以下輸出。
Bingo,貌似logstash已經起作用了,它把我們的輸入文本,給切分為多個字段了。而且每個字段的命名都比較准確。猜測應該是我們配置了message的模板為"%{COMBINEDAPACHELOG}",而測試的文本也是一個apache的log日志中的一條。
按照官方文檔來解釋,起作用的是我們配置的“grok”的過濾器。grok按照每種log的格式預先定義了多種模板,只需使用時選定下你的日志適用的grok即可。更多的grok 模板可以從github上去獲取。
?可以看到解析後的字段中出現了2處timestamp,一處帶著@符號,另一處則是log中解析出來的時間。
OK,第一個例子已經結束。我們已經能看到logstash是如何處理日志文件的思路了。