`
skysoul1985
  • 浏览: 9711 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

分布式日志收集系统: Facebook Scribe (转)

阅读更多

以下是我在公司内部分享的关于分布式日志收集系统的PPT内容,现在与大家分享,希望对于需要使用的人能够起到基本的入门作用或是了解!

1.分布式日志收集系统:背景介绍

许多公司的平台每天会产生大量的日志(一般为流式数据,如,搜索引擎的pv,查询等),处理这些日志需要特定的日志系统,一般而言,这些系统需要具有以下特征:

(1) 构建应用系统和分析系统的桥梁,并将它们之间的关联解耦;

(2) 支持近实时的在线分析系统和类似于Hadoop之类的离线分析系统;

(3) 具有高可扩展性。即:当数据量增加时,可以通过增加节点进行水平扩展。

 

2.分布式日志收集系统:Facebook Scribe主要内容

(1)Scribe简介及系统架构

(2)Scribe技术架构

(3)Scribe部署结构

(4)Scribe主要功能和使用方案

(5)Scribe的具体应用实例

(6)Scribe的扩展

(7)Scribe研究体会

 

3.Scribe简介

Scribe是facebook开源的日志收集系统,在facebook内部已经得到大量的应用。 Scribe是基于一个使用非阻断C++服务器的thrift服务的实现。它能够从各种日志源上收集日志,存储到一个中央存储系统 (可以是NFS,分布式文件系统等)上,以便于进行集中统计分析处理。它为日志的“分布式收集,统一处理”提供了一个可扩展的,高容错的方案。

 

4.Scribe的系统架构

如上图所示:Scribe从各种数据源上收集数据,放到一个共享队列上,然后push到后端的中央存储系统上。当中央存储系统出现故障时,scribe可以暂时把日志写到本地文件中,待中央存储系统恢复性能后,scribe把本地日志续传到中央存储系统上。

 

5.Scribe的技术架构

如上图所示:Scribe服务器底层数据通信框架是Thrift,Thrift也是Facebook开源的,并得到了广泛的使用。也用到了C++的准标准库boost,主要使用共享指针和文件相关的功能。Thrift也用到了libevent开发库和socket编程技术。

 

6.Scribe部署结构

 

7.Scribe的主要功能

1.支持多种存储类型:7种并且可扩展

2.日志自动切分功能:按文件大小和时间切分

3.灵活的客户端:

(1)支持多种常用语言(Thrift提供支持);

(2)可与应用系统集成;可以作实现独立客户端

4.支持日志分类功能(Facebook有上百种日志分类)

5.其他功能

(1)连接池

(2)灵活的日志缓存大小

(3)多线程功能(消息队列)

(4)scribe服务器之间可以转发日志

6.以上功能都是可以通过配置文件来灵活配置

 

8.Scribe使用方案

(1)和产生日志文件的应用系统集成

scribe能够和各种应用系统很好的集成是因为它提供几乎所有的开发语言的开发包

(2)应用系统在本地产生日志文件,使用一个独立运行的客户端程序同样,独立的客户端也可以采用各种语言开发,我们采用的是python来开发客户端

 

9.Scribe的具体应用实例

1.Facebook肯定大量的使用,主要用于处理Facebook级别日志,一旦有新的日志分类生成,Scribe将自动处理。(Facebook有上百个日志分类)。

2. Twitter:一款分布式实时统计系统Rainbird使用了scribe

3.我的公司:

(1)*****

(2)*****

(3)*****

(4)*****

(5)*****

(6)*****

4.其他

 

10.Scribe的扩展:存在的问题

虽然scribe系统是如此的优秀,但是也存在着一些不足和问题,针对存在的问题我们对scribe进行扩展。我们发现scribe存在的主要问题如下:

1、单点故障问题

有三个地方存在单点故障:

(1)中心服务器

(2)本地服务器

(3)收集日志的客户端程序

2、日志丢失问题

当日志文件发生切分的时候可能导致日志丢失

3、历史日志收集问题

4、scribe服务器挂了没有及时通知

 

11.Scribe的扩展:问题解决方案

针对上面我们提出的问题,主要提供如下相应的解决方案:

1.中心服务器单点故障

可以部署多个中心服务器,然后本地服务器通过配置文件可以自动在这些服务器之间进行切换

2.其余的问题我们都是通过自己写的python客户端解决的

python客户端我们是基于一个开源的项目进行二次开发的,因为开源的python客户端功能很简单,只是跟踪一个日志文件并把日志文件的数据读取导入到scribe本地服务器

 

12.Scribe的扩展:python客户端

我们开发的python客户端主要实现了如下功能:

1、解决本地scribe服务器的单点故障

我们可以通过配置多个本地scribe服务器(通过配置文件配置,相当的灵活),python脚本会根据配置的这些服务器自动切换(当一个scribe挂掉之后自动切换,如果挂掉本地scribe服务器重新启动以后又会自动切换回去。

2、解决日志丢失的问题

开源的python客户端是按照固定的时间间隔扫描日志文件是否有变化,如果在这个时间段内发生日志切换会导致日志丢失。我们同样是采用这个方式去检测日志文件,不过我们在发生日志切分的时候会再次去检测被切分走得日志文件是否已经收集完毕。

3、解决历史日志收集

如果在我们运行python客户端以前已经产生了日志,这部分的日志收集也是我们新增的一个功能

4、解决自身的单点故障问题

不排除我们的python客户端也会挂掉的时候,当我们下次启动怎样保证我们收集的日志不重复不丢失是需要解决的问题。我们的解决方案就是对已经收集的日志文件的各种信息做序列化(主要是已经收集日志文件的位置)

5、收集日志文件怎样保证按照日志生成的顺序收集

日志的生成顺序就是跟他们文件的建立时间是相关的,通过这一点我们可以实现。

6、及时通知机制

为了及时的通知到scrib服务器挂掉的信息到相关人员,我们开发了邮件通知机制,就是当某一个本地scribe服务器挂掉以后会触发邮件发送

 

13.Scribe研究体会

怎样从我们工作的内容深入学习?

1.每个人在公司负责开发的内容都是很有限的,怎样从我们开发的内容入手深入研究和学习更多的知识?

2.Scribe研究的例子!

 

14.总结:以上内容有一些是来至互联网,在加入了自己的一些理解,希望对需要的人有所帮助!

分享到:
评论

相关推荐

    开源日志系统比较:scribe、chukwa、kafka、flume.pdf

    Scribe是一款由Facebook开发的日志收集系统,广泛应用于其内部。其核心特点在于容错性和可扩展性。当后端存储系统出现问题时,Scribe能够将数据暂存至本地磁盘,待系统恢复后重新加载。Scribe的架构简单,由scribe ...

    Thrift+Scribe分布式日志系统的构建

    在 Thrift+Scribe 构建的分布式日志系统中,日志的产生端(如服务器或应用)使用 log4j 或其他日志框架记录日志。这些日志可以通过 Thrift 的服务接口发送到 Scribe 客户端。Scribe 客户端将接收到的日志封装成 `Log...

    开源日志系统比较:scribe、chukwa、kafka、flume.docx

    Scribe是Facebook开源的日志收集系统,适用于大规模分布式环境。它的核心特性在于高容错性,即使存储系统出现问题,也能保证数据不丢失。Scribe由三部分构成: - **Scribe Agent**:作为Thrift客户端,负责从各个...

    facebook scribe

    Facebook Scribe 是一个分布式日志收集系统,由Facebook开源,主要用于处理大规模的日志数据。在大型分布式系统中,各个服务会产生大量的日志信息,这些信息对于监控、调试和数据分析至关重要。Scribe设计的目标是...

    Facebook大量数据处理 Scribe.zip

    4. **数据分析**:Scribe收集的数据可以进一步导入Hadoop集群进行离线分析,或者直接送入实时分析系统进行在线分析。 **C/C++在Scribe中的作用** Scribe最初是用C++编写的,因为C++提供了高性能和低级别的内存管理...

    facebook-scribe-63e4824.tar

    Scribe是Facebook设计的一种分布式日志系统,它的主要目标是统一收集各种服务的日志数据,提供一种简单高效的方式将日志流传输到中央存储或处理系统。Scribe支持多个日志流,每个流代表一类特定的日志信息,如服务器...

    Facebook大量相似高速数据实时日志收集系统

    **Scribe**:一个分布式日志收集系统,正在集成Zookeeper来提高系统的可靠性和一致性。 **HDFS**:一种可靠的分布式文件系统,其中`hdfsSync`和`ConcurrentReader`是关键组件,用于确保数据的一致性和并发访问。 *...

    scribe日志系统文档

    Scribe是一款由Facebook开源的分布式日志收集系统,主要用于集中式地收集并处理各种来源的日志数据。它基于跨平台的语言Thrift进行开发,能够很好地支持Java Log4j等日志框架,并允许通过Log4j等工具将日志信息发送...

    scribe软件

    scribe是一款开源的日志收集系统,最初由Facebook开发并贡献给了开源社区。它设计的主要目标是为大规模分布式系统提供可靠、高效且可扩展的日志管理解决方案。scribe允许不同的服务将它们的日志数据流式传输到一个...

    架构之美(face book架构)

    10. **监控与日志管理**:强大的监控系统和日志管理系统,如Scribe和Zipkin,帮助Facebook及时发现并解决问题,保持系统的健康运行。 《架构之美》不仅剖析了Facebook的技术细节,也为我们提供了设计大规模分布式...

    Scribe日志记录讲解

    Scribe 是一个由 Facebook 开源的日志记录框架,它基于 Thrift 框架构建,旨在提供分布式环境下的日志收集服务。Scribe 的主要特点是其简单架构、灵活的日志格式以及支持异步消息发送和队列处理。由于它与 Thrift ...

    scribe客户端所需jar包

    1. **scribe**:scribe是Facebook开源的日志收集系统,它提供了一种简单的方式来聚合分布在多个服务器上的日志数据。 2. **Thrift**:Thrift是一种接口定义语言和跨语言的RPC(远程过程调用)框架,它在scribe中...

    开源日志系统比较.docx

    Scribe是Facebook开发的日志收集系统,主要设计目标是提供一种可靠、可扩展的方式,将日志从分布式应用中聚合到中心存储,以便进行后续分析。其核心特性包括: - **容错性**:当后端存储系统出现问题时,Scribe能够...

    基于Flume的美团日志收集系统.pdf

    Flume-NG 是 Cloudera 提供的一个高可用的、分布式的海量日志采集、聚合和传输的系统,而 Scribe 是 Facebook 开源的日志收集系统。 Flume-NG 采用 Java 语言,具有高可用性、可靠性和可扩展性,而 Scribe 采用 C++ ...

    scribe详细安装文档

    scribe是一个广泛使用的日志聚合系统,主要设计用于收集、分类和转发分布式系统的日志数据。在大型分布式环境中,如Hadoop或Facebook等,scribe扮演着至关重要的角色,它允许各个节点将日志数据发送到中心位置进行...

    各大公司架构,豆瓣网,facebook,淘宝

    5. **Scribe**:Facebook的日志收集系统,用于聚合分散在不同服务器上的日志信息。 6. **Open Compute Project**:Facebook推动的硬件开放标准,旨在优化数据中心效率,降低运营成本。 【淘宝架构】 淘宝作为中国...

    【推荐】开源日志系统-word范文模板 (17页).docx

    Scribe是一款由Facebook开发的日志收集系统,广泛应用于其内部环境。它的核心功能是将来自各种日志源的数据集中到一个中心存储系统,便于后续的统计分析。Scribe的关键特性在于其高容错性,当后端存储系统出现故障时...

    【推荐】开源日志系统-word范文模板 (17页).pdf

    Scribe是Facebook开发的日志聚合系统,旨在解决大规模分布式环境下的日志收集问题。它通过Thrift协议与日志源通信,将数据高效地汇聚到中心存储系统。Scribe的核心特性是其高容错性,当存储系统出现故障时,数据会...

    日志分析系统调研分析ELKEFK.docx

    - **Scribe**:由Facebook开发并开源的日志收集系统,已在Facebook内部广泛应用。其主要特点是容错性好,能够在后端存储系统出现故障时将数据暂存至本地磁盘,待故障恢复后再上传至中央存储系统。Scribe的架构主要...

Global site tag (gtag.js) - Google Analytics