传统的Web开发中,日志可能并不被重视,只有应用出现问题后,才会适时性的去看一眼。并且日志的储存方式也很简单,直接写入一个文本文件或者扔到数据库中就了事了。这样对于单机应用来讲没有什么不能够的,但是当系统架构分布式后,官网、论坛、社交、交易等各个大大小小的子系统愈来愈多,再加上操做系统、应用服务、业务逻辑等等,日志的管理与查看就愈加的麻烦,面对大量的日志数据并且又是分布在各个不一样的机器甚至不一样的机房,若是咱们仍是按照传统的方式登陆到某一台机器上去查看日志,而后再汇总起来,再作个跨机房的排序,那这样感受就太糟糕了。因此一套集中式的实时日志分析平台就显得很是重要了,而一套日志分析平台至少要包括一下几个特色:docker
其实市面上的日志分析产品不少,简单的Rsyslog
,商业化的Splunk
,开源的Scribe
,Apache
的Flume
,Cloudera
的ELK
。这里采用的是ELK这个体系架构,ELK(Elasticsearch, Logstash, Kibana)
通过这么多年的发展,一直到如今的6.0.0
版本。可以发展这么快,其中确定有他的缘由所在。简单介绍一下这三个软件的特色:数据库
Web
平台,用来查询分析以及生成各类报表经过架构图能够看到,总体日志平台的原理其实并不难,日志的生产者做为Shipper
产生各类各样的日志,而后传输到Kafka
中,这里传输也是从生产者中读取而后传输经过 Logstash 到 Kafka, 再者Logstash
经过读取Kafka
中的日志数据,储存到ElasticSearch
。只在中间再增长了Kafka
作为缓冲层,由于Logstash
会同步把日志传输到Elasticsearch
,一旦ElasticSearch
挂掉数据就有可能会丢失。因而,咱们考虑利用Kafka
做为缓冲区。架构
这里选择
Kafka
的缘由是由于与大多数消息系统比较,Kafka
有更好的吞吐量,内置分区,副本和故障转移,这有利于处理大规模的消息,由于互联网应用日志基本上都是海量的。分布式
Docker
算是云计算时代拥有划时代意义的项目了,关于Docker
的介绍与资料很是多。特别是docker-compose
至关于给Docker
插上了翅膀。Docker
相对于传统的虚拟化技术,Docker
应用运行于宿主内核,无需启动完整的操做系统,能够作到秒级、甚至毫秒级的启动时间,大大的节约了开发、测试、部署的时间。而且确保了运行环境的一致,「这段代码在我机器上没问题啊」这一些的问题不再会出现。测试