日誌查詢利器 Logstash和ElasticSearch

日誌查詢利器 Logstash和ElasticSearch

作者: admin分類: 自動化管理發佈時間: 2013-12-04 09:45 115次瀏覽6暫無評論

日誌查詢利器 Logstash和ElasticSearch

一、需要解決的問題:

1、日誌分散在各個不同的硬件設備上,特別是在分佈式系統下,想找到一個日誌,將是很困難的事情。

2、日誌檢索是一個比較麻煩的事情,通常工程師會採用grep等linux指令進行處理。但是跨時間段查詢、計數等需求,需要更多的系統級別的指令綜合處理才能完成。無形中增加了難度。

3、日誌檢索到後,可能有成千上萬行,工程師需要對這部分數據再進行鑽取,得到最後的檢索結果。

二、解決方案:

1、Logstash是一個完全開源的工具,他可以對你的日誌進行收集、分析,並將其存儲供以後使用(如,搜索)。

http://logstash.net/

2、Elasticsearch是個開源分佈式搜索引擎,它的特點有:分佈式,零配置,自動發現,索引自動分片,索引副本機制,restful風格接口,多數據源,自動搜索負載等。

http://es-cn.medcl.net/

3、kibana 也是一個開源和免費的工具,他可以幫助您彙總、分析和搜索重要數據日誌並提供友好的web界面。

使用上述的三個組件,可以組成一個很好的查詢引擎。

Logstash

Logstash


三、整體架構

1、在需要收集日誌的服務上部署Logstash,作爲Agent。

2、在中心服務器上,部署Redis,作爲緩衝隊列。

3、在中心服務器上,部署Logstash,作爲Indexer。

4、在中心服務器上,部署ElasticSearch。

5、在中心服務器上,部署kibaba

架構圖如下:

Elasticsearch

Elasticsearch


四、部署:

服務器準備:192.168.1.1(Nginx–日誌發生文件夾) 192.168.1.2(中心服務器)

部署:

1、192.168.1.1上配置Nginx日誌模式,重啓

log_format logstash_json ‘{ “@timestamp”: “$time_iso8601″, ‘

‘”@fields”: { ‘

‘”remote_addr”: “$remote_addr”, ‘

‘”remote_user”: “$remote_user”, ‘

‘”body_bytes_sent”: “$body_bytes_sent”, ‘

‘”request_time”: “$request_time”, ‘

‘”status”: “$status”, ‘

‘”request”: “$request”, ‘

‘”request_method”: “$request_method”, ‘

‘”http_referrer”: “$http_referer”, ‘

‘”http_user_agent”: “$http_user_agent” } }’;

access_log logs/access.log logstash_json;

2、192.168.1.1 上部署Logstash(Agent)

下載Logstash(https://download.elasticsearch.org/logstash/logstash/logstash-1.2.2-flatjar.jar),並上傳。

配置文件如下:

input{
file{
path => “/usr/local/nginx/logs/access.log”
type => nginx # This format tells logstash to expect ‘logstash’ json events from the file.
format => json_event}
}

output{
redis{
host => “192.168.1.2″
port => 6371
data_type => “list”
key => “logstash”}
}

啓動:

nohup java -jar logstash-1.2.2-flatjar.jar agent -f logstash.conf > nohup &
3、192.168.1.2 上部署Redis(不贅述,參考wiki)

4、192.168.1.2 上部署Logstash(Indexer)

input{
redis{
host => “127.0.0.1″ # these settings should match the output of the agent
data_type => “list”
key => “logstash”
port => 6371 # We use the ‘json’ codec here because we expect to read # json events from redis.
codec => json}
}

output{
stdout{
debug => true
debug_format => “json”}
elasticsearch{
host => “127.0.0.1″}
}
nohup java -jar logstash-1.2.2-flatjar.jar agent -f logstash.conf > nohup &
5、192.168.1.2 上部署ElasticSearch

下載:http://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-0.20.5.tar.gz

$ bin/elasticsearch

6、192.168.1.2 上部署kibana

nohup java -jar logstash-1.2.2-flatjar.jar web > web.log &

最終效果

Logstash Search

Logstash Search


Logstash Search

Logstash Search

本文章作者來自於talkingdata(北京騰雲天下技術團隊)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章