1、概述

Scribe是facebook开源的日志收集系统,在facebook内部已经得到大量的应用。它能够从各种日志源上收集日志,存储到一个中央存储系统(可以是NFS,分布式文件系统等)上,以便于进行集中统计分析处理。它为日志的“分布式收集,统一处理”提供了一个可扩展的,高容错的方案。当中央存储系统的网络或者机器出现故障时,scribe会将日志转存到本地或者另一个位置,当中央存储系统恢复后,scribe会将转存的日志重新传输给中央存储系统。

scribe的相关资料比较少,主要限于它的主页(见参考资料1)。此外,它的安装比较复杂,可参见我的另一篇博文:scribe日志收集系统安装方法介绍。

2、 架构

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

需要注意的是,各个数据源须通过thrift(由于采用了thrift,客户端可以采用各种语言编写,关于thrift框架,参见我的这篇博文:Thrift框架介绍)向scribe传输数据(每条数据记录包含一个category和一个message)。可以在scribe配置用于监听端口的thrift线程数(默认为3)。在后端,scribe可以将不同category的数据存放到不同目录中,以便于进行分别处理。后端的日志存储方式可以是各种各样的store,包括file(文件),buffer(双层存储,一个主储存,一个副存储),network(另一个scribe服务器),bucket(包含多个store,通过hash的将数据存到不同store中),null(忽略数据),thriftfile(写到一个Thrift TFileTransport文件中)和multi(把数据同时存放到不同store中)。

3、  scribe中各种store介绍

(1)file

将日志写到文件或者NFS中。目前支持两种文件格式,即std和hdfs,分别表示普通文本文件和HDFS。可配置的选项有:

max_size:文件大小上限,即当文件大小达到max_size时,创建新的文件继续存储数据。

rotate_period:文件创建周期,可以是hourly,daily,never和number[sufix]。sufix可以是s(second),m(minute),h(hour),d(day),w(week)。

sub_directory:子目录名字

base_filename:文件前缀,如news,则会依次将数据存储到文件news_20110403_00000,news_20110403_00001,……

(2) buffer

这是最常用的一种store。该store中包含两个子store,其中一个是primary store,另一个是secondary store。日志会优先写到primary store中,如果primary store出现故障,则scribe会将日志暂存到secondary store中,待primary store恢复性能后,再将secondary store中的数据拷贝到primary store中。其中,secondary store仅支持两种store,一个是file,另一个是hdfs。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
port=1464
max_msg_per_second=2000000
check_interval=1
max_queue_size=100000000
num_thrift_server_threads=2
# DEFAULT - write all messages to hadoop hdfs
category= default
type=buffer
target_write_size=20480
max_write_interval=1
buffer_send_rate=1
retry_interval=30
retry_interval_range=10
type=file
fs_type=hdfs
file_path=hdfs: //localhost:9000/scribedata
create_symlink=no
use_hostname_sub_directory=yes
base_filename=thisisoverwritten
max_size=1000000000
rotate_period=daily
rotate_hour=0
rotate_minute=5
add_newlines=1
type=file
fs_type=std
file_path=/tmp/scribe-central-hdfs
base_filename=thisisoverwritten
max_size=3000000

(3) null

这也是一种常用的store。用户可以在配置文件中配置一种叫default的category,如果数据所属的category没有在配置文件中设置相应的存储方式,则该数据会被当做default。如果用户想忽略这样的数据,可以将它放入null store中。

其它store的介绍,可参见参考资料1。

需要注意的是,Scribe会将数据首先缓存到buffer中,待buffer满后再flush到HDFS上。当数据量非常少时,由于缓存的原因,部分数据可能未写到HDFS中,这时用户可以调整scribe的相关配置参数或者关闭scribe(如减小max_size),使数据全部写到HDFS中。如果用户采用减小max_size的方案,此时需要注意,HDFS不能很好的保存小文件(可能会丢失数据,见参考资料3)。

4、  总结

总起来说,scribe为日志收集提供了一种容错且可扩展的方案。scribe可以从不同数据源,不同机器上收集日志,然后将它们存入一个中央存储系统,以便于进一步处理。当采用HDFS作为中央系统时,可以进一步利用Hadoop进行处理数据,于是scribe+HDFS+MapReduce方案便诞生了。具体如下图(摘自参考资料2)所示:

由于scribe资料比较少,网上讨论也不是十分活跃,不少人转用其它一些日志系统,比如:rsyslog 和 Chukwa。

5、  参考资料

(1)       scribe主页:https://github.com/facebook/scribe

(2)       scribe介绍 :http://blog.octo.com/en/scribe-a-way-to-aggregate-data-and-why-not-to-directly-fill-the-hdfs/

(3)       HDFS小文件问题:http://www.cloudera.com/blog/2009/02/the-small-files-problem/

(4)       Scribe所有资料的汇总:http://sameerparwani.com/posts/facebook-scribe-server-documentation-and-tutorials

scribe 架构及其store相关推荐

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

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

  2. scribe、chukwa、kafka、flume日志系统对比

    为什么80%的码农都做不了架构师?>>>    1. 背景介绍许多公司的平台每天会产生大量的日志(一般为流式数据,如,搜索引擎的pv,查询等),处理这些日志需要特定的日志系统,一般而 ...

  3. 大数据开源日志系统比较:scribe、chukwa、kafka、flume

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

  4. SQL Server - SQL Server 2016新特性之 --- Query Store

    前言 SQL Server 2016引入新的查询语句性能监控.调试和优化工具/功能 -- Query Store.以前我们发现一条查询语句性能突然下降,我们要去找出问题的所在往往需要通过调用一些DMV ...

  5. 日志分析系统搭建分析与比较

    Table of Contents 一. 背景介绍 二.日志系统比较 1.怎样收集系统日志并进行分析 A.实时模式: B.准实时模式 2.常见的开源日志系统的比较 A. FaceBook的Scribe ...

  6. [转]开源日志系统比较

    (注:时间有限,整篇文章写得比较粗糙,如果想进一步探讨,可给我发email/msn:clseer@gmail.com,或者加入QQ讨论群:41172282) 1. 背景介绍 许多公司的平台每天会产生大 ...

  7. 几个开源日志分析系统介绍

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

  8. 基于VUE的前端框架搭建

    2019独角兽企业重金招聘Python工程师标准>>> 先上git地址:https://github.com/summercloud/vue-admin 配置思路 配置npm 这里不 ...

  9. 第一天:Hbase 概述

    高清思维导图已同步Git:https://github.com/SoWhat1412/xmindfile,关注公众号sowhat1412获取海量资源 1. 什么是HBase HBase的原型是Goog ...

最新文章

  1. Tensorflow学习教程------模型参数和网络结构保存且载入,输入一张手写数字图片判断是几...
  2. 简单点名小程序(伪)----android开发
  3. es修改type名称_ElasticSearch如何修改索引字段
  4. 16福师计算机应用基础在线作业,16春季福师《计算机应用基础》在线作业二.doc...
  5. Android - Glide4.4.0使用
  6. js文件中怎么使用thymeleaf标签_007、Spring Boot集成Thymeleaf模板引擎
  7. html %3ca id=%3e,xss编码小结
  8. 【李宏毅机器学习】04:梯度下降Gradient Descent
  9. 通讯录获取源码_[源码和文档分享]基于Java语言的C/S模式通讯录备份和查询软件...
  10. VS:无法将“char *”转换为“const wchar_t *”/不能将参数从“const char []”转换为“const wchar_t *”
  11. 九度教程第28题-堆栈的的使用(栈的使用)
  12. android tcp 工具,TcpIp工具包app
  13. 实战 | 应急响应方法论思维导图
  14. 【NLP】自然语言处理技术在自动生成足球比赛战报上的应用
  15. NOI模拟(5.8) HNOID2T3 道路 (bzoj5290)
  16. C语言之数组的正向逆向输出
  17. Magento前台不显示添加的产品
  18. 千锋网络安全笔记部分
  19. 北师大再回首:二十一岁的天空
  20. GTX TITANX 显卡下显卡驱动和cuda的安装血泪史

热门文章

  1. 【梦幻连连连】源码分析(二)
  2. activiti学习之任务分配
  3. python pptx_python-pptx
  4. CTF-misc-压缩包解题思路
  5. 计算机设备不可投放,对于电脑显示无法停止通用卷设备,该如何解决
  6. hmmlearn安装
  7. VUE父子组件之间的传值,以及兄弟组件之间的传值;
  8. 怎样在c语言游戏中设计广告,游戏行业信息流广告怎么玩?38个创意句式拿去套!...
  9. h264源码分析[0]
  10. 中了sxs.exe病毒解决办法