# 场景 现有3台阿里云机器,系统版本为:CentOS 6.5、64位。 * web_47:admin * web_46:web1 * web_140:web2 其中`web_47`用于内部管理站点,外部用户不可访问;`web_46 && web_140`同时对外提供web访问服务(Nginx负载均衡)。 # 需求 需要把`web_47 && web_46 && web_140`上的系统日志: * nginx-log * php-fpm-log * access-log 以及`web_46 && web_140`的用户访问日志: * page-view-log 统一转发到web_47,并通过pgv.xeon.ren来访问。 # 过程 以下是使用ELK(Elasticsearch && Logstash && Kibana)来搭建实时日志分析系统的过程: ## 下载软件: 下载以下软件: * [logstash-2.1.1](https://download.elastic.co/logstash/logstash/logstash-2.1.1.tar.gz) * [redis-2.8.4](http://download.redis.io/releases/redis-2.8.4.tar.gz) * [elasticsearch-2.1.0](https://download.elasticsearch.org/elasticsearch/release/org/elasticsearch/distribution/tar/elasticsearch/2.1.0/elasticsearch-2.1.0.tar.gz) * [kibana-4.3.1-linux-x64](https://download.elastic.co/kibana/kibana/kibana-4.3.1-linux-x64.tar.gz) 上传到`web_47`,并解压到:`tar -zxvf *.tar.gz -C /usr/local/logger/` ## 启动Logstash *Logstash*,日志收集器,通过它把散落在所有机器的所有日志收集起来。 这是个开箱即用的工具,并不需要安装,我们只需要配置好,并启用它即可。 ``` # cd /usr/local/logger/logstash-2.1.1/bin/ # ./logstash -e "" ``` 这一步的操作有点慢,耐心等待,直到提示出现: ``` …… Logstash startup completed ``` 随便输入点什么,比如`Hello World!`: ``` Hello World! { "message" => "Hello World!", "@version" => "1", "@timestamp" => "2016-09-22T11:51:23.866Z", "type" => "stdin", "host" => "tugou07" } ``` 很好,测试成功了。 当然,这个并无实际意义,现在我们开始配置并收集PHP的错误日志: ``` # cd /usr/local/logger/logstash-2.1.1/ # mkdir conf # cd conf # vim shipper.conf ``` Logstash收集并处理过的原日志会自动删除吗? ## 参考资料 * [Logstash+Redis+Elasticsearch+Kibana+Nginx搭建日志分析系统](http://www.w2bc.com/article/104935) * [ELKstack 中文指南](http://kibana.logstash.es/content/) * [Logstash使用详解](http://www.cnblogs.com/xing901022/p/4802822.html) * [Logstash实践: 分布式系统的日志监控](http://www.jianshu.com/p/6575041b597d) * [Logstash 最佳实践](http://udn.yyuap.com/doc/logstash-best-practice-cn/index.html) * [Elastic Stack V5详解](https://mp.weixin.qq.com/s?__biz=MzIwMDc3Njk4NA==&mid=2247483686&idx=1&sn=46bc77ff361cdce5bba59812e88b514f&scene=0&key=f5c31ae61525f82e97f5ef95160be90b6b79f39dc7604274da473bc782b6522906246423ce09c9ba7435d5ff05633270&ascene=0&uin=MTQ3NzAyNzQwMg%3D%3D&devicety)