开源日志系统比较-Scribe kafka

开源实时日志分析平台—ELK 了解开源实时日志分析平台ELK 阅读详情

1. 背景介绍

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

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

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

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

本文从设计架构,负载均衡,可扩展性和容错性等方面对比了当今开源的日志系统,包括facebook的scribe,apache的chukwa,linkedin的kafka和cloudera的flume等。

2. FaceBook的Scribe

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

它最重要的特点是容错性好。当后端的存储系统crash时,scribe会将数据写到本地磁盘上,当存储系统恢复正常后,scribe将日志重新加载到存储系统中。

架构

scribe的架构比较简单,主要包括三部分,分别为scribe agent, scribe和存储系统。

(1) scribe agent

scribe agent实际上是一个thrift client。 向scribe发送数据的唯一方法是使用thrift client, scribe内部定义了一个thrift接口,用户使用该接口将数据发送给server。

(2) scribe

scribe接收到thrift client发送过来的数据,根据配置文件,将不同topic的数据发送给不同的对象。scribe提供了各种各样的store,如 file, HDFS等,scribe可将数据加载到这些store中。

(3) 存储系统

存储系统实际上就是scribe中的store,当前scribe支持非常多的store,包括file(文件),buffer(双层存储,一个主储存,一个副存储),network(另一个scribe服务器),bucket(包含多个 store,通过hash的将数据存到不同store中),null(忽略数据),thriftfile(写到一个Thrift TFileTransport文件中)和multi(把数据同时存放到不同store中)。

3. Apache的Chukwa

chukwa是一个非常新的开源项目,由于其属于hadoop系列产品,因而使用了很多hadoop的组件(用HDFS存储,用mapreduce处理数据),它提供了很多模块以支持hadoop集群日志分析。

需求:

(1) 灵活的,动态可控的数据源

(2) 高性能,高可扩展的存储系统

(3) 合适的框架,用于对收集到的大规模数据进行分析

架构

Chukwa中主要有3种角色,分别为:adaptor,agent,collector。

(1) Adaptor 数据源

可封装其他数据源,如file,unix命令行工具等

目前可用的数据源有:hadoop logs,应用程序度量数据,系统参数数据(如linux cpu使用流率)。

(2) HDFS 存储系统

Chukwa采用了HDFS作为存储系统。HDFS的设计初衷是支持大文件存储和小并发高速写的应用场景,而日志系统的特点恰好相反,它需支持高并发低速率的写和大量小文件的存储。需要注意的是,直接写到HDFS上的小文件是不可见的,直到关闭文件,另外,HDFS不支持文件重新打开。

(3) Collector和Agent

为了克服(2)中的问题,增加了agent和collector阶段。

Agent的作用:给adaptor提供各种服务,包括:启动和关闭adaptor,将数据通过HTTP传递给Collector;定期记录adaptor状态,以便crash后恢复。

Collector的作用:对多个数据源发过来的数据进行合并,然后加载到HDFS中;隐藏HDFS实现的细节,如,HDFS版本更换后,只需修改collector即可。

(4) Demux和achieving

直接支持利用MapReduce处理数据。它内置了两个mapreduce作业,分别用于获取data和将data转化为结构化的log。存储到data store(可以是数据库或者HDFS等)中。

4. LinkedIn的Kafka

Kafka是2010年12月份开源的项目,采用scala语言编写,使用了多种效率优化机制,整体架构比较新颖(push/pull),更适合异构集群。

设计目标:

(1) 数据在磁盘上的存取代价为O(1)

(2) 高吞吐率,在普通的服务器上每秒也能处理几十万条消息

(3) 分布式架构,能够对消息分区

(4) 支持将数据并行的加载到hadoop


架构

Kafka实际上是一个消息发布订阅系统。producer向某个topic发布消息,而consumer订阅某个topic的消息,进而一旦有新的关于某个topic的消息,broker会传递给订阅它的所有consumer。 在kafka中,消息是按topic组织的,而每个topic又会分为多个partition,这样便于管理数据和进行负载均衡。同时,它也使用了zookeeper进行负载均衡。

Kafka中主要有三种角色,分别为producer,broker和consumer。

(1) Producer

Producer的任务是向broker发送数据。Kafka提供了两种producer接口,一种是low_level接口,使用该接口会向特定的broker的某个topic下的某个partition发送数据;另一种那个是high level接口,该接口支持同步/异步发送数据,基于zookeeper的broker自动识别和负载均衡(基于Partitioner)。

其中,基于zookeeper的broker自动识别值得一说。producer可以通过zookeeper获取可用的broker列表,也可以在zookeeper中注册listener,该listener在以下情况下会被唤醒:

a.添加一个broker

b.删除一个broker

c.注册新的topic

d.broker注册已存在的topic

当producer得知以上时间时,可根据需要采取一定的行动。

(2) Broker

Broker采取了多种策略提高数据处理效率,包括sendfile和zero copy等技术。

(3) Consumer

consumer的作用是将日志信息加载到中央存储系统上。kafka提供了两种consumer接口,一种是low level的,它维护到某一个broker的连接,并且这个连接是无状态的,即,每次从broker上pull数据时,都要告诉broker数据的偏移量。另一种是high-level 接口,它隐藏了broker的细节,允许consumer从broker上push数据而不必关心网络拓扑结构。更重要的是,对于大部分日志系统而言,consumer已经获取的数据信息都由broker保存,而在kafka中,由consumer自己维护所取数据信息。

5. Cloudera的Flume

Flume是cloudera于2009年7月开源的日志系统。它内置的各种组件非常齐全,用户几乎不必进行任何额外开发即可使用。

设计目标:

(1) 可靠性

当节点出现故障时,日志能够被传送到其他节点上而不会丢失。Flume提供了三种级别的可靠性保障,从强到弱依次分别为:end-to-end(收到数据agent首先将event写到磁盘上,当数据传送成功后,再删除;如果数据发送失败,可以重新发送。),Store on failure(这也是scribe采用的策略,当数据接收方crash时,将数据写到本地,待恢复后,继续发送),Best effort(数据发送到接收方后,不会进行确认)。

(2) 可扩展性

Flume采用了三层架构,分别问agent,collector和storage,每一层均可以水平扩展。其中,所有agent和collector由master统一管理,这使得系统容易监控和维护,且master允许有多个(使用ZooKeeper进行管理和负载均衡),这就避免了单点故障问题。

(3) 可管理性

所有agent和colletor由master统一管理,这使得系统便于维护。用户可以在master上查看各个数据源或者数据流执行情况,且可以对各个数据源配置和动态加载。Flume提供了web 和shell script command两种形式对数据流进行管理。

(4) 功能可扩展性

用户可以根据需要添加自己的agent,colletor或者storage。此外,Flume自带了很多组件,包括各种agent(file, syslog等),collector和storage(file,HDFS等)。

架构

正如前面提到的,Flume采用了分层架构,由三层组成,分别为agent,collector和storage。其中,agent和collector均由两部分组成:source和sink,source是数据来源,sink是数据去向。

(1) agent

agent的作用是将数据源的数据发送给collector,Flume自带了很多直接可用的数据源(source),如:

text(“filename”):将文件filename作为数据源,按行发送

tail(“filename”):探测filename新产生的数据,按行发送出去

fsyslogTcp(5140):监听TCP的5140端口,并且接收到的数据发送出去

同时提供了很多sink,如:

console[("format")] :直接将将数据显示在桌面上

text(“txtfile”):将数据写到文件txtfile中

dfs(“dfsfile”):将数据写到HDFS上的dfsfile文件中

syslogTcp(“host”,port):将数据通过TCP传递给host节点

(2) collector

collector的作用是将多个agent的数据汇总后,加载到storage中。它的source和sink与agent类似。

下面例子中,agent监听TCP的5140端口接收到的数据,并发送给collector,由collector将数据加载到HDFS上。

1
2
3
host : syslogTcp(5140) | agentSink( "localhost" ,35853) ;
 
collector : collectorSource(35853) | collectorSink( "hdfs://namenode/user/flume/ " , "syslog" );

一个更复杂的例子如下:

有6个agent,3个collector,所有collector均将数据导入HDFS中。agent A,B将数据发送给collector A,agent C,D将数据发送给collectorB,agent C,D将数据发送给collectorB。同时,为每个agent添加end-to-end可靠性保障(Flume的三种可靠性保障分别由agentE2EChain, agentDFOChain, and agentBEChain实现),如,当collector A出现故障时,agent A和agent B会将数据分别发给collector B和collector C。

下面是简写的配置文件片段:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
agentA : src | agentE2EChain( "collectorA:35853" , "collectorB:35853" );
 
agentB : src | agentE2EChain( "collectorA:35853" , "collectorC:35853" );
 
agentC : src | agentE2EChain( "collectorB:35853" , "collectorA:35853" );
 
agentD : src | agentE2EChain( "collectorB:35853" , "collectorC:35853" );
 
agentE : src | agentE2EChain( "collectorC:35853" , "collectorA:35853" );
 
agentF : src | agentE2EChain( "collectorC:35853" , "collectorB:35853" );
 
collectorA : collectorSource(35853) | collectorSink( "hdfs://..." , "src" );
 
collectorB : collectorSource(35853) | collectorSink( "hdfs://..." , "src" );
 
collectorC : collectorSource(35853) | collectorSink( "hdfs://..." , "src" );

此外,使用autoE2EChain,当某个collector 出现故障时,Flume会自动探测一个可用collector,并将数据定向到这个新的可用collector上。

(3) storage

storage是存储系统,可以是一个普通file,也可以是HDFS,HIVE,HBase等。

6. 总结

根据这四个系统的架构设计,可以总结出典型的日志系统需具备三个基本组件,分别为agent(封装数据源,将数据源中的数据发送给collector),collector(接收多个agent的数据,并进行汇总后导入后端的store中),store(中央存储系统,应该具有可扩展性和可靠性,应该支持当前非常流行的HDFS)。

下面表格对比了这四个系统:

7. 参考资料

scribe主页:https://github.com/facebook/scribe

chukwa主页:http://incubator.apache.org/chukwa/

kafka主页:http://sna-projects.com/kafka/

Flume主页:https://github.com/cloudera/flume/

原创文章,转载请注明: 转载自董的博客

本文链接地址: http://dongxicheng.org/search-engine/log-systems/



淘宝使用的是自主开发的一套日志采集系统,名字叫做TimeTunnel,已经开源,感兴趣的话可以从http://code.taobao.org/project/view/411/找到相关资料和代码。

5 个有用的开源日志分析工具 监控网络活动可能是一项单调而乏味的工作,但你有充分的理由要这样做。首先,它可以帮助你查找和调查工作站、连网设备和服务器上的可疑登录,同时确定管理员滥用的源头。还可以跟踪软件安装和数据传输,以便实时识别潜在的问题。 这些日志还有助于公司遵守适用于欧盟内任何实体的《通用数据保护条例》(GDPR)。因为如果你的网站要在欧盟是可浏览的,那么就必须遵守 GDPR。 日志记录(跟踪和分析)... 阅读详情

相关推荐

Java语言实现的双色球模拟开奖系统

手动选号功能应满足用户自主选择号码的基本需求。用户可以按顺序或者随机选择每一注号码,同时该功能还应提供保存、编辑、删除等操作,方便用户管理自己的号码组。用户交互设计需要简洁直观,确保用户能快速完成选号过程,不影响用户操作的流畅性。

weixin_42097508的博客 641

Odoo | 开源ERP,解锁审计和日志记录新玩法

odoo集成Audit Log

在数字化道路无限探索 2208

ELK开源日志审计系统

文件列表: x86_64_tar -------------------------- X86二进制包 x86_64_rpm -------------------------- X86 RPM安装包 x86_64_deb -------------------------- X86 DEB安装包 arm64_rpm -------------------------- ARM RPM安装包 安装文档.html ----------------------------- 详细使用说明 images----------------------------- 详细使用说明用到的图片

ELK 企业级日志分析系统

ELK平台是一套完整的日志集中处理解决方案,将 ElasticSearch、Logstash 和 Kiabana 三个开源工具配合使用, 完成更强大的用户对日志的查询、排序、统计需求。input {file{#path表示要收集的日志的文件位置#type是输入ES时给结果增加一个叫type的属性字段#start_position可以设置为beginning或者end,beginning表示从头开始读取文件,end表示读取最新的,这个要和ignore_older一起使用。

q1y2y3的博客 2926

2020最新全面Java学习路线及视频(万字长文)

声明,本人能力有限,只是列出来参考,不对之处欢迎指正。 一门永不过时的编程语言——Java 软件开发。 Java编程语言占比: 据官方数据统计,在全球编程语言工程师的数量上,Java编程语言以1000万的程序员数量位居首位。 而且很多软件的开发都离不开Java编程,因此其程序员的数量最多。而在以Java编程为核心的开发领域中,javaEE程序员的需求量10年来一直居于首位! Java工程师就业: 1.通过各大招聘网站统计,全国海量公司都在招聘Java开发工程师 2.北京Java开发...

芒果不是程序猿v: 的博客 1058

开源日志审计系统

1 GitHub - clickvisual/clickvisual: A light weight log visual analytic platform for clickhouse. 2 面向docker开发,基于clickhouse开发的日志查询工具 3

anzhuangguai的专栏 4170

探秘 EventLog Audit:一款强大的日志审计神器

探秘 EventLog Audit:一款强大的日志审计神器 去发现同类优质开源项目:https://gitcode.com/ 在日常的系统管理和安全监控中,日志数据扮演着至关重要的角色。今天,我们将深入探讨一个开源项目——,它是一个专门用于Windows事件日志审计和分析的工具,可以帮助管理员更有效地管理和理解系统的运行状态。 项目简介 EventLog Audit 是由 Netxfly 团队开发...

gitblog_00001的博客 2565

[转]开源日志系统比较

(注:时间有限,整篇文章写得比较粗糙,如果想进一步探讨,可给我发email/msn:clseer@gmail.com,或者加入QQ讨论群:41172282)1. 背景介绍许多公司的平台每天会产生大量的日志(一般为流式数据,如,搜索引擎的pv,查询等),处理这些日志需要特定的日志系统,一般而言,这些系统需要具有以下特征:(1)构建应用系统和分析系统的桥梁,并将它们之间的关联解耦;

clouderyu的专栏 1万+

再见 ELK,是时候拥抱下一代日志系统 Loki 了

公众号关注「奇妙的 Linux 世界」设为「星标」,每天带你玩转 Linux !最近,在对公司容器云的日志方案进行设计的时候,发现主流的 ELK 或者 EFK 比较重,再加上现阶段对于...

easylife206的专栏 2179

开源服务器日志审计系统,开源日志管理系统

开源日志管理系统 内容精选换一换在Log窗口的System Log页签里,您可以查看系统运行日志,操作步骤如下:MindStudio不支持通过界面方式删除设备上的system log日志。如需对日志进行管理,请使用root用户登录到设备侧,对/var/log/npu/slog目录下日志进行管理操作。进行系统日志查看前,需要已添加Device设备,才能获取到Device设已成功登录Java性能分析。...

weixin_36322275的博客 5071

【亲测免费】 [特殊字符]⚡️ Casvisor: 您的一站式日志和审计系统

[Casvisor](https://github.com/casvisor/casvisor) 是一个开源的日志记录与审计系统,由Go语言后端和React前端共同构建。它提供了强大而直观的界面来管理您的服务器和应用日志,以及进行精细化审计。 ## 项目技术分析 ### 架构解析 Casvisor 的架构分为前后端两个部分: - **前端**: 使用JavaScript和React构建,提

gitblog_01138的博客 1274

大咖分享 | 如何构建 Alluxio 审计日志分析系统

数据安全的保障是一个数据平台能否真正交付使用的准入门槛

Alluxio的博客 1512

开源日志审计系统_10款免费的开源安全工具,值得收藏

开源软件对于程序员来说,绝对是工具包的重要组成部分,废话不多说,小编今天就来给你们介绍10款免费的开源安全工具,干货满满,建议收藏。1、SnortSnort的优势在于它有三种工作模式:嗅探器、数据包记录器、网络入侵检测系统模式。所以,它既可以是自动化安全系统的核心,也可以是一系列商业产品的组件。2、Ettercap对于需要测试企业网络以抵御中间人攻击(MITM)的人来说,Ettercap是很好的选...

weixin_39895481的博客 1万+

ELK / ELFK日志审计系统(一)ELFK介绍

ELFK指的是由四个核心开源软件组成的日志管理和分析解决方案的统称。它是最流行的集中式日志处理架构之一。: 一个分布式、RESTful 风格的搜索和分析引擎。它负责存储、索引和快速检索来自任何来源的大规模数据。它是整个架构的“数据库”和搜索引擎。: 一个服务器端的数据处理管道,可以同时从多个来源采集数据,转换数据,然后将数据发送到您喜欢的“存储库”(如 Elasticsearch)。它是数据的收集、过滤和转发工具。: 一个轻量型的日志采集器。

IT运维记录 933

日志审计系统及ELK日志系统

日志审计系统1.日志审计1.1 背景1.2 原理核心目标1.3 功能日志采集关联分析实时警告日志取证分析监管合规1.4 日志审计系统常见模块2.ELK 日志系统介绍2.1 背景2.2 简介2.3 原理 1.日志审计 1.1 背景 网络安全发的颁布,日志审计的合规要求,由原来的不合规变成了不合法。如果不对要求的相关日志存留6个月以上,一旦追查,将面临法律责任。 安全运营的挑战。随着网络设备的增多,以及服务器数量的增多,如果没有统一的综合日志审计平台,那么需要登录到每台设备上查看日志,不利于管理。众多平台会产

buffedon的博客 4666

企业网络日志对网络安全有哪些重要意义?

近几年科技发展的速度飞快,很多方面已经超出了我们的认知。前几年网上炒的人驾驶汽车在国内已经可以看到。银行、餐厅、机场等重要场所已经部分开始利用人工职能机器人办公。这些在前些年还是我们不敢想的,今天都已经成了现实。所以对于人类来讲,大数据时代没有什么是实现不了的。 网络日志审计 但随着大数据时代的来临,网络安全问题越来越受到人们的关注。个人信息泄露,企业信息安全受到威胁,这都是在大数据时代我们所遇到的考验。新兴事物的出现往往会伴随着大量的副作用,这是毋庸置疑的。我们能做的就是尽量减少这些副作用带来的危

运维有小邓 341
上一篇: Http代理穿透技术
下一篇: awk使用总结
blade2001
博客等级 码龄25年 372粉丝 158原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值