转载于博主新浪微博:http://weibo.com/freshairbrucewoo。

欢迎大家相互交流,共同提高技术。

以下是我在公司内部分享的关于分布式日志收集系统的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.总结:以上内容有一些是来至互联网,在加入了自己的一些理解,希望对需要的人有所帮助!

分布式日志收集系统: Facebook Scribe相关推荐

  1. 一起来解读分布式日志收集系统:Facebook Scribe

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

  2. python分布式日志收集系统_分布式日志收集系统Scribe原理

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

  3. 分布式日志收集系统Apache Flume的设计详细介绍

    问题导读: 1.Flume传输的数据的基本单位是是什么? 2.Event是什么,流向是怎么样的? 3.Source:完成对日志数据的收集,分成什么打入Channel中? 4.Channel的作用是什么 ...

  4. 分布式日志收集系统scribe介绍

    Scribe是facebook开源的日志收集系统,在facebook内部已经得到大量的应用. Scribe是基于一个使用非阻断C++服务器的thrift服务的实现.它能够从各种日志源上收集日志,存储到 ...

  5. python分布式日志收集系统_Go实现海量日志收集系统(一)

    项目背景 每个系统都有日志,当系统出现问题时,需要通过日志解决问题 当系统机器比较少时,登陆到服务器上查看即可满足 当系统机器规模巨大,登陆到机器上查看几乎不现实 当然即使是机器规模不大,一个系统通常 ...

  6. 探秘Hadoop生态12:分布式日志收集系统Flume

    这位大侠,这是我的公众号:程序员江湖.  分享程序员面试与技术的那些事. 干货满满,关注就送.  在具体介绍本文内容之前,先给大家看一下Hadoop业务的整体开发流程:  从Hadoop的业务开发流程 ...

  7. flume分布式日志收集系统操作

    1.flume是分布式的日志收集系统,把收集来的数据传送到目的地去. 2.flume里面有个核心概念,叫做agent.agent是一个java进程,运行在日志收集节点. 3.agent里面包含3个核心 ...

  8. 分布式日志收集系统--Chukwa

    1. 安装部署 1.1 环境要求 1.使用的JDK的版本必须是1.6或者更高版本,本实例中使用的是JDK1.6 2.使用的hadoop的版本必须是Hadoop0.20.205.1及以上版本,本实例中使 ...

  9. Flume日志收集系统架构详解--转

    2017-09-06朱洁大数据和云计算技术 任何一个生产系统在运行过程中都会产生大量的日志,日志往往隐藏了很多有价值的信息.在没有分析方法之前,这些日志存储一段时间后就会被清理.随着技术的发展和分析能 ...

最新文章

  1. [原]《Web前端开发修炼之道》-读书笔记CSS部分
  2. echarts入门基础,画折线图
  3. HttpServletRequestWrapper的使用
  4. 程序员面试题精选100题(09)-链表中倒数第k个结点[数据结构]
  5. mysql delete返回值_Mybatis执行sql(insert、update、delete)返回值问题
  6. 模拟键盘 键盘虚拟代码
  7. python raise
  8. Service混合开启笔记(startService+bindService)
  9. 学习SQL:关系类型
  10. 怎么把英文字幕翻译成中文?快把这些方法收好
  11. WinZip 15注册码
  12. VB.NET 强制删除文件
  13. 学习python的字符串组合
  14. 数字化教学资源平台html,数字化教学资源
  15. 第一次软件工程作业(One who wants to wear the crown, Bears the crown.)
  16. linux操作系统认手机,Linux移动操作系统postmarketOS已适配200款移动设备 包括手机和平板电脑...
  17. 《李笑来通往财富自由之路》的学习笔记(完)
  18. 入门PCB设计之AD9电路板设计_杜洋工作室_学习笔记
  19. 2020 C++及系统软件技术大会全套PPT
  20. 织梦搭建本地环境以及FTP到本地搬家恢复数据库心得。

热门文章

  1. 视频剪辑培训班要学多久 视频剪辑的培训班有用吗
  2. 找不到对象怎么办?!!学了JAVA就找到啦
  3. oracle 数据泵impdp导入dmp文件时更改用户及表空间方法
  4. 北京特酿怀柔市场推广方案
  5. NowCoder数列
  6. 手机投屏发出连接win10接收不到解决方案
  7. 黑马学成在线项目之Day4实战
  8. Texlive覆盖CTex
  9. 恒玄BES调试笔记-BES2500 GPIO常规操作示例
  10. Java锁的逻辑(结合对象头和ObjectMonitor)