登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
园子
关于
博客
发1篇日志+1圆
记录
发1条记录+2圆币
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
VIP申请
网盘
联系我们
道具
勋章
任务
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
业界
›
分布式日志收集系统:Facebook Scribe
分布式日志收集系统:Facebook Scribe
[ 复制链接 ]
榕闹
2025-5-29 16:02:36
我的新浪微博: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.总结:以上内容有一些是来至互联网,在加入了自己的一些理解,希望对需要的人有所帮助!
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
那些年搞不懂的高深术语——依赖倒置•控制反转•依赖注入•面向接口编程
如何优雅的使用RabbitMQ
分布式锁1 Java常用技术方案
浅谈我对DDD领域驱动设计的理解
游戏编程十年总结(下)
【前端性能】高性能滚动 scroll 及页面渲染优化
验证码对抗之路及现有验证机制介绍
从零开始入门 K8s | 手把手带你理解 etcd
中文写程序,何陋之有?
NHibernate之旅(2):第一个NHibernate程序
公司的中场
Android 系统缺陷不完全点评
FFmpeg开发笔记(六十二)Windows给FFmpeg集成H.266编码器vvenc
谈谈如何从本质上理解sql语句, 存储过程,ORM之间的联系和取舍。
.net环境下跨进程、高频率读写数据
第二个iPhone应用程序:“Say Hello”
从零开始学习jQuery (十一) 实战表单验证与自动完成提示插件
[一步一步MVC]第一回:使用ActionSelector控制Action的选择
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
浏览过的版块
安全
教程
签约作者
程序园优秀签约作者
发帖
榕闹
2025-5-29 16:02:36
关注
0
粉丝关注
9
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
敖可
9988
处匈跑
9998
斜素欣
9996
4
森萌黠
9996
5
堵赫然
9996
6
凶契帽
9996
7
柴古香
9996
8
背竽
9996
9
恐肩
9994
10
都硎唷
9994
查看更多