前言:
看了關於elk的文檔,似懂非懂,雲裡霧裡的,為了避免下個月把elk的相關知識都忘掉。還是決心費點事,把學習時遇到的詳細問題和進展都記錄下來。方便自己和其他需要者做參考。
本文先安裝elk。
安裝前的准備:
確認java版本,本機安裝的版本為1.8.0_45-B14.關於JDK的安裝這裡不在贅述。
安裝logstash:
首先下載logstash包,這裡選擇了版本1.5.4.
然而執行./logstash agent時報沒有指定conf的配置文件。
在百度裡搜索了一些ELK的安裝文檔,但說的都不太明白,故還是決定找官方文檔來入門。官方文檔地址見參考文獻。
我們先按照官方文檔寫一個簡單配置文件例子,做一下測試。以下為一個處理apachelog的logstash配置文件。
#設置輸入源,這裡是從標准輸入中讀取。
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是如何處理日志文件的思路了。