本文描述了一個簡單的case,講解怎麼在logstash進行配置,將多個日誌數據流,經過redis緩存接收,再導出到elasticsearch多個索引,即一類日誌數據對應一類索引。redis
假設有兩組日誌數據由日誌端寫入redis緩存,兩組日誌標記其類型爲redis-data-A和redis-data-B,則編寫logstash配置文件以下瀏覽器
input { 緩存
redis { ruby
host => "127.0.0.1"服務器
type => "redis-data-A"cors
data_type => "list"elasticsearch
key => "listA"測試
} spa
redis { debug
host => "127.0.0.1"
type => "redis-data-B"
data_type => "list"
key => "listB"
}
}
output {
if [type] == "redis-data-A"{
elasticsearch {
host => localhost
index => "logstash_event_a-%{+YYYY.MM.dd}"
}
stdout { codec => rubydebug }
}
else if [type] == "redis-data-B"{
elasticsearch {
host => localhost
index => "logstash_event_b-%{+YYYY.MM.dd}"
}
stdout { codec => rubydebug }
}
}
以上logstash的配置文件中,重點是:
一、在input處,設置兩組redis輸入數據,經過key指定數據來源,這是日誌端將日誌數據寫入redis的隊列中;經過type指定兩組數據的類型
二、在output處,經過if [type] == "",設置條件輸出。當知足type == redis-data-A,將數據導出到elasticsearch,索引格式爲"logstash_event_a-%{+YYYY.MM.dd}"。若是type == redis-data-B,則導出索引格式爲"logstash_event_b-%{+YYYY.MM.dd}"。注意,索引格式不能有大寫字符,不然elasticsearch會報錯。
測試,使用redis-cli命令鏈接redis服務,嘗試在兩個隊列listA和listB寫入數據。listA只輸入英文字符,listB只輸入數字。這裏只是爲了演示,實際開發中使用Java或者Python鏈接redis-server,而後寫入JSON格式的字符串便可。Logstash會拆解JSON字符串,將數據正確地寫入elasticsearch索引。很是方便。
打開 kibana,進入其首頁,點擊紅框所示的標準界面
點擊最右上角的齒輪按鈕,配置dashborad讀取redis-data-A日誌數據的索引,即以logstash_event_a-開頭的索引數據(一樣的方法能夠設置logstash_event_b-開頭的):
點擊保存後,dashboard頁面刷新,能夠看到顯示的message內容,還有type裏記錄的redis-data-A,表示咱們成功獲取到了此類日誌的數據,全是英文字符,且type爲redis-data-A。
爲了不關閉瀏覽器後,下次重複以上配置,點擊界面右上方的保存按鈕,將這個配置保存下來。之後,只要點擊打開圖標,就能夠找到這個配置了。
使用一樣的方法查看日誌數據redis-data-B,全是數字,且type爲redis-data-B:
注意事項:若是出現kibana沒法顯示數據。請作以下配置調整:
一、在logstash的目錄logstash-1.4.2/vendor/kibana中,編輯config.js文件,設置elasticsearch: "http://192.168.1.100:9200",這是我試驗用的服務器地址
二、在elasticsearch的config目錄,設置elasticsearch.yml,在最後面增長http.cors.enabled: true和http.cors.allow-origin: "*"