2.2.2 Facebook Scribe和Logstash
Flume既可以采用拉取模式,也可以采用推送的模式进行工作,而Scribe和Logstash则是采用推送模式的代表。Scribe是Facebook公司的一个开源的实时分布式数据收集系统,在其公司内部已经得到大量的应用,最新的版本可以在Github上下载(https://github.com/facebookarchive/scribe)。它采用的是推送模式,提高了数据传输的及时性。另外,C/S(Client-Server)分布式架构也提升了大规模收集的可靠性和可扩展性。由于采用的是推送模式,因此使用者可以在不同的服务器节点上安装Scribe服务,从各种数据源上收集数据,之后将它们放到一个共享队列上,并推送到后端的中心存储系统上。当中心服务不可得到时,本地的Scribe服务会把收集到的数据暂时存储到本地,等中心服务恢复以后再进行上传。中心服务集群可以选择将收集到的数据写入本地磁盘或分布式文件系统上,以便于日后进行集中统计分析处理。此外,Scribe还有一大特点,就是使用了Facebook公司的Thrift框架,这就使得Scribe可以高效地使用多种编程语言,能够通过C++、Java、Python、PHP、Ruby、Perl、C#等向服务器汇报数据。
Logstash(https://www.elastic.co/products/logstash)同样是一款开源的工具,经常作为ELK(Elasticsearch、Logstash、Kibana)技术栈之一使用。在ELK技术栈里,Logstash常用于日志的收集和处理,它会创建一个集中化的管道来存储、搜索和分析日志文件。它使用内建的过滤器和输入输出,以及一些插件来给日志管理提供强大的功能。另外,Elasticsearch用于搜索,在第5章会有详细介绍。而Kibana用于可视化地展现处理和搜索的结果。Logstash的系统架构和Scribe较为类似,主机可分为两大类:代理主机(Agent Host),作为事件的发送者(Shipper),将各种日志数据发送至中心主机;中心主机(Central Host),可运行包括中间转发器(Broker)、索引器(Indexer)、搜索和存储器(Search and Storage)、Web界面端(Web Interface)在内的各个模块,以实现对日志数据的接收、处理和存储。Logstash的主要优势在于日志存储的方式更加灵活,对日志数据有更好的语法分析功能,易于安装、可扩展、性能良好等。