日志查询利器 Logstash和ElasticSearch
一、需要解决的问题:
1、日志分散在各个不同的硬件设备上,特别是在分布式系统下,想找到一个日志,将是很困难的事情。
2、日志检索是一个比较麻烦的事情,通常工程师会采用grep等linux指令进行处理。但是跨时间段查询、计数等需求,需要更多的系统级别的指令综合处理才能完成。无形中增加了难度。
3、日志检索到后,可能有成千上万行,工程师需要对这部分数据再进行钻取,得到最后的检索结果。
二、解决方案:
1、Logstash是一个完全开源的工具,他可以对你的日志进行收集、分析,并将其存储供以后使用(如,搜索)。
http://logstash.net/
2、Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
http://es-cn.medcl.net/
3、kibana 也是一个开源和免费的工具,他可以帮助您汇总、分析和搜索重要数据日志并提供友好的web界面。
使用上述的三个组件,可以组成一个很好的查询引擎。
三、整体架构
1、在需要收集日志的服务上部署Logstash,作为Agent。
2、在中心服务器上,部署Redis,作为缓冲队列。
3、在中心服务器上,部署Logstash,作为Indexer。
4、在中心服务器上,部署ElasticSearch。
5、在中心服务器上,部署kibaba
架构图如下:
四、部署:
服务器准备:192.168.1.1(Nginx�C日志发生文件夹) 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 &
最终效果