日志收集是大数据的基石。许多公司的业务平台每天都会产生大量的日志数据。收集业务日志数据,供离线和在线的分析系统使用,正是日志收集系统的要做的事情。高可用性,高可靠性和可扩展性是日志收集系统所具有的基本特征。

  一、Scribe简介

  目前在互联网公司比较常见日志收集系统有 Flume和 Scribe。

  Scribe是Facebook开源的一个基于thrift的日志收集框架,它为日志收集提供了一种容错且可扩展的方案。scribe可以从不同数据源,不同机器上收集日志,然后将它们存入一个中央存储系统,以便集中统计分析处理。 奇虎360 就是用的Scribe来收集业务日志,但是在原生的基础上他们做了很多定制:zookeeper负载均衡、支持写HDFS、支持写Kestrel队列、支持写QBus/Kafka等。

  当然,我并不推荐使用Scribe,因为Facebook已经不再更新和维护Scribe,而且原生Scribe有很多功能不完善。如果现在来进行技术选型,我推荐使用 Flume 。(Flume作为Apache的孵化项目,文档丰富,功能完善,高可靠、高可用、易扩展)。

  二、Flume与Scribe框架对比

  下面对Flume和Scribe进行了对比。对比中Flume将主要采用Flume-NG为参考对象,Scribe则采用 原生的Scribe 。同时,分为三层(Agent层,Collector层和Store层)来进行对比。

  三、奇虎360日志收集系统架构

  日志收集大致有两种应用场景:

  离线计算:日志—->Scribe—->离线计算(如HDFS+MapReduce)

  实时计算:日志—->Scribe—->实时计算(如Kafka+Storm)

  下面是日志收集系统的整体架构图:

  从架构图可以看出,日志收集系统主要分为三层:

  日志服务器:为了收集日志,每一台日志服务器上都会部署一个scribe客户端,它包含两个模块:agent 和 local_server。其中 agent 的作用就是以 tail 的方式读取本地目录下的日志文件,并将数据写到本地的 local_server,然后 local_server 通过zookeeper定位到center_server,并将数据发送给远端的center_server。

  中心服务器: center_server 其实和local_server是同一套程序,只是配置文件不一样,它们通过 thrift 进行通信。center_server收到数据后,根据配置将各个category的数据发向不同的方向,比如写到HDFS、发到Kafka集群、发到Kestrel队列等等。

  存储服务器:日志被收集到存储服务器以后,就可以进行离线/实时的统计分析了。比如,HDFS是用来存储日志,并给MapReduce提供离线数据的;Kafka/Kestrel则是给Storm集群提供实时数据流,以实时地统计分析。

  在Scribe中传输的每个基本数据单元都包含一个category和一个message,category作为message的标识符,用于给message分类,以避免数据在传输过程中混淆在一起。

  以上介绍了日志的基本流动路线,但是也存在一些复杂的日志收集。比如,有时候日志存储到Kafka并经过Storm实时处理之后,还不算结束,还需要把Storm的处理结果存到HDFS上 —— 这时只需要在Storm程序里调用 thrift 接口将输出结果往center_server里写,并配置该category保存到HDFS上即可。

  注:scribe各模块之间的通信都是通过 thrift 接口。

  四、系统的基本特性

  4.1 可用性

  agent挂掉 :在所有日志服务器上部署了监控脚本,只要发现agent进程挂了,立即重启,以提供服务。重启失败则报警!

  local server挂掉 :同上,日志服务器上的监控脚本只要发现local_server进程挂了,会立即重启,保证服务可用。重启失败则报警!

  center server挂掉 :在所有中央服务器上部署了监控脚本,只要发现center_server进程挂了,立即重启。重启失败则报警!

  4.2 可靠性

  Scribe系统设计成能容错:

  当网络或者机器出现故障时,如果客户端上的一个local_server不能发送消息到center_server,它会将消息保存到本地磁盘(堆积到一定量会报警)。当center_server或者网络故障恢复后,重新发送。

  为了避免center_server重启时负载过重,重新发送者会等待一个随机事件,再发送。如果center_server接近其处理极限返回TRY_LATER,这就告诉resender间隔几分钟后再试。

  以下情况数据可能会丢失:

  一个center_server异常退出,内存中的消息会丢失。

  local_server不能连接到center_server,本地磁盘溢出,消息会丢失。

  超时,导致存在重复的消息。

  4.3 可扩展性

  日志服务器:每个机器部署一个Scribe客户端,可以水平扩展,不受限制。Scribe收集日志的能力受限于机器的带宽,正常情况下单机千兆网卡就足够了。

  中央服务器:从local_server到center_server是通过zookeeper自动负载均衡的,并且每台center_server提供无差别服务,所以可以线性扩展。通常中央服务器只有几台,当日志服务器不断增加导致中央服务器带宽打满时,就需要加机器了。

  存储服务器:不论是hadoop集群还是kafka集群都是可以线性扩展的。

转载自:http://www.cstor.cn/textdetail_11109.html

奇虎360scribe日志采集系统相关推荐

  1. 奇虎360正式开源其深度学习调度平台,支持TensorFlow、MXNet等框架

    奇虎360今日宣布开源深度学习调度平台XLearning,项目开源地址:https://github.com/Qihoo360/XLearning. \\ XLearning由360系统部大数据团队与 ...

  2. [转]奇虎360黑匣子之谜:暗藏后门盗取用户隐私

    每经记者 秦俑 昨日(2月25日),正是奇虎360所有APP产品被苹果全面下架一个月的日子. 就在此前,360的CFO亲赴美国"负荆请罪",但360相关产品并未重新上架. 知情人士 ...

  3. 奇虎360运维工程师招聘测试题

    公司名称:奇虎360 招聘职位:运维工程师 职位需求: 1.精通FreeBSD/Linux系统安装配置和系统参数优化设置. 2.三年以上IDC.服务器运维经验. 3.精通apache.nginx等we ...

  4. 360linux面试题,奇虎360运维工程师面试题

    原标题:奇虎360运维工程师面试题 以下面试题是从网络收集整理的,仅供大家学习参考: 1.写一个脚本查找最后创建时间是3天前,后缀是*.log的文件并删除. find / -name "*. ...

  5. 360黑匣子之谜——奇虎360“癌”性基因大揭秘

    360黑匣子之谜--奇虎360"癌"性基因大揭秘 http://www.nbd.com.cn 2013-02-26 01:33 核心提示: 360怎么了?这是一家什么样的企业?带着 ...

  6. CNCF案例研究:奇虎360

    公司:奇虎360 地点:中国北京 行业:计算机软件 挑战 中国软件巨头奇虎360科技的搜索部门,so.com是中国第二大搜索引擎,市场份额超过35%.该公司一直在使用传统的手动操作来部署环境,随着项目 ...

  7. 2013:奇虎360最好的时光

    奇虎360公布了第二季度財报.財报显示,奇虎第二季度总营收3.179亿美元,同比增长109.6%.净利润3910万美元,同比增长18.5%. 咋一看,奇虎的財报不管是营收还是净利润都在增长.看上去是份 ...

  8. 奇虎360不正当竞争官司不断

    2019独角兽企业重金招聘Python工程师标准>>> 摘要:大家对于3Q大战应该不是很陌生了,毕竟这件事影响还是挺大的,到底谁对谁错大家要有自己的判断力,不能盲目跟风,毕竟是要讲证 ...

  9. 奇虎360将于18日在美摘牌 进程早于外界预期

    昨天,记者了解到,奇虎360将于7月18日(开盘前)从纽约证交所摘牌,这一进程早于外界的预期. 6月28日,奇虎360曾经就私有化交易进展发布更新公告,称预计此项交易将在8月中旬之前完成.这是奇虎36 ...

最新文章

  1. Linux基础知识汇总(2)...持续更新中
  2. VSCode 搭建Vue开发环境之Vue CLI
  3. cac会议投稿难度大吗_注册化工师考试难度大吗?
  4. python使用函数的目的_python之函数基本使用
  5. 中国中文信息学会:第一届自然语言生成与智能写作大会讲习班正式发布
  6. sql_1-2_get基于盲注
  7. mysql 数据库属性_mysql 查看数据库属性
  8. Coding Interview Guide -- 翻转字符串
  9. NP、OSPF基本配置
  10. jQuery插件开发代码
  11. C# Json转对象(object)
  12. 大文件上传解决方案-支持断点续传的文件上传插件(转)
  13. 开弓没有回头箭,遭遇跳槽四大后悔事件,怎么办?
  14. 后端都需要学习什么?
  15. 让女朋友说Yes I Do的方法,数据分析助力客户管理的秘籍
  16. 开发一个发送手机短信的计算机软件
  17. Python pandas库|任凭弱水三千,我只取一瓢饮(5)
  18. 极路由 支持php,目前极路由4增强版(B70)可用的最新固件整理!Padavan_PandoraBox_灯大_hanwckf_H大...
  19. SDN的基本概念和基本架构
  20. 爱思助手安卓能用吗_专业的苹果越狱工具:爱思助手!

热门文章

  1. python将数据做直方图_用python 制作直方图
  2. 28岁学Java晚不晚?快30学java还来得及吗?
  3. 虚拟化技术——VLAN策略
  4. 第四次作业——肖祥英
  5. 串行通信基础、串行数据传输方式
  6. java爬虫抓取nba_利用Python爬虫爬取NBA数据功能实例分享
  7. Mac 打造高效工作流
  8. 为了数学的明天,,穿越时空,重返南大(III)-
  9. wd移动硬盘不能识别_西数移动硬盘电脑提示无法识别USB设备怎么办
  10. 【电路补习笔记】8、稳压电路 —— 线性电源及LDO