集中式日志解决方案

背景

随着业务的快速发展,各种服务和组件也要随着增加或扩容,服务器的台数随之增加,这样给日志运维带来很大的问题。如果你要查阅某个项目的日志,服务器数十上百台的话,这将是一件非常繁琐和低效的事。另外,如果你想对这些日志进行实时的分析统计,也无从下手。因此,我们需要一种数据收集框架,它可以将不同服务器上的日志数据,高效地收集汇总在一起,供在线或者离线查阅和分析,并且还可以对系统实施监控和故障告警。

本文档通过介绍Flume NG、Scribe、Kafka、Chukwa和ELK的特点,结构模型,使用时的优势和劣势,以及我们自定义的指标项对比,最后得出它们各自的应用场景,为框架选型提供技术参考。

数据收集系统

Flume NG

Flume NG的介绍

Flume NG 是Cloudera提供的分布式数据收集系统,它能够将不同数据源的海量日志数据进行高效的收集、聚合、移动,最后存储到存储中心。Flume NG支持(故障转移)failover和负载均衡。

Flume NG的结构

Flume NG传输数据的基本单元是event,如果是文件,通常是一行记录。运行的核心是Agent,包含三个核心组件,分别是Source、Channel和Sink,其结构模型图如下:

Flume NG的介绍
  • Source:接收外部源发送过来的数据,支持Avro、Thrift、JMS、Syslog、Kafka和Http post(自己代码实现)等多种方式的日志接收。提供ExecSource以tail -f等命令的方式实现实时日志收集;提供SpoolSource以读取新增的文件的方式实现低延时的日志收集。
  • Channel:是一个存储池,接收Source的输出。有MemoryChannel、JDBC Channel、MemoryRecoverChannel和FileChannel等主要类型。其中MemoryChannel可以实现高速吞吐,但无法保证数据的完整性。FileChannel能实现数据的完整性和一致性。Channel中的数据仅会在数据保存在下一个Channel或最终的存储中心时,才会被删除。
  • Sink:消费Channel中的数据,然后发送给数据存储系统(HDFS、Elasticsearch或者HBase等)。一个Agent可以存在多个Sink,Sink支持负载均衡和failover。
Flume NG的结构图:
  • 多个Agent顺序连接:

    最简单的部署方式,通过多个Agent连接,将原始数据传送到下一个Agent或者是最终的存储中心,适合初学者。

多个Agent顺序连接
  • 多个Agent的数据汇聚在同一个Agent中:
多个Agent的数据汇聚在同一个Agent中

最常见的部署方式,比如在各个应用服务器上部署Flume NG,将原始数据同步到一台agent上。

  • 多路Agent连接:
多路Agent连接

包括分流和复制两种方式,分流是根据header信息进行数据的分类存储数据,复制是将数据复制多份。

  • 负载均衡数据模型:
负载均衡数据模型

Agent1负责路由,每个Sink连接一个Agent,Sink支持负载均衡和Failover。

Flume NG的优势劣势

  • 优势:Flume NG通过事务保证数据的完整性和一致性;支持负载均衡;很容易进行水平扩展;社区活跃度高;文档资料比较丰富;依赖第三方库少;部署简单;支持多种存储系统。
  • 劣势:Flume NG需要自己实现客户端代码;ExecSource方式会存在数据丢失的可能,SpoolSource方式做不到监控文件的新增记录;对数据的过滤能力较差。

Scribe

Scribe介绍

Scribe是Facebook开源的一个基于thrift框架的日志收集系统,在facebook内部已经得到大量的应用。Scribe可以从不同数据源,不同机器上收集日志,然后将它们存入存储中心,目前Facebook已停止对Scribe的更新和维护。

Scribe结构
  • Scribe结构图:
Scribe结构图
  • Scribe 客户端:需要自己基于Thrift框架实现,每条消息包含一个category和一个message信息,Scribe Server根据category将数据存储在不同的存储系统。
  • Scribe Server:根据配置,将各个category类型的日志发到不同的存储系统。Scribe Server收集到数据后,将数据放到共享队列,然后Push到存储中心,当存储中心出现故障时,Scribe 会将数据保存在本地文件中,待存储中心恢复后再Push数据。
  • 存储中心:包括HDFS、File和Scribe。
Scribe优势和劣势
  • 优势:具有很高的容错性;支持水平扩展;
  • 劣势:依赖zookeeper或Hash等其他工具;需要自己实现客户端代码;社区活跃度低;文档资料极少;依赖第三方库多;部署较为复杂;存储系统类型较少;数据过滤解析能力差;Facebook公司已停止更新和技术支持。

Kafka

Kafka的介绍

Kafka 是一个基于分布式的消息系统,开发自 LinkedIn ['lɪŋktɪn],作为 LinkedIn 的活动流和运营数据处理管道。活动流数据包括页面访问量、被查看内容方面的信息以及搜索情况等。运营数据指服务器的性能数据,包括CPU、IO使用率、请求时间、服务日志等。

Kafka结构模型:
Kafka结构模型
  • Producer:消息发送者,负责发送消息给Broker。
  • Kafka Cluster:由多个Kafka实例组成,每个实例(Server)成为Broker。集群的搭建依赖Zookeeper。
  • Consumer:消息消费者,从Kafka读取消息。
  • Topic:一类消息,类似Queue的概念,Topic在物理上是分节点存储。
  • Consumer Group:实现一个Topic消息单播和广播的一个手段。要实现广播,只要每个consumer有一个独立的Group就可以。要实现单播,只要所有的Consumer在同一个Group里即可。
Kafka的优势和劣势

Kafka 通过系统解耦、Partition(分片存储)、复制备份、持久化、缓存、集群和异步通信等策略提供了一个高性能、高可靠、可扩展的数据管道和消息系统。

  • 优势:高性能;高可靠;通过Kafka Conenector对接HDFS、Elasticsearch、JDBC等其它系统;支持水平扩展;社区活跃度高;文档资料丰富;依赖第三方库较少。
  • 劣势:依赖Zookeeper;需要自己实现客户端代码;数据过滤解析能力差。

Chukwa

Chukwa的介绍

chukwa 是一个用于监控大型分布式系统的数据收集系统,构建在 Hadoop 的 HDFS 和 map/reduce 框架之上的,继承了 hadoop 的扩展性和健壮性,还包含HICC,可用于展示、监控和分析已收集的数据。

Chukwa的结构
image.png
  • Agent:负责采集数据,并发送给Collector。agent采用“watchdog”的机制,自动重启终止的数据采集进程,防止数据丢失。
  • Adaptor:直接采集数据的接口和工具,支持命令行,log文件和httpSender输出,可以按自己的需求实现Adaptor,一个Agent可以管理多个Adaptor的数据采集。
  • Collectors:负责收集Agents发送过来的数据,并定时写入集群。
  • Map/Reduce jobs:定时启动,在此阶段,Chukwa提供了demux [dɪm'ju:ks]和archive [ˈɑ:kaɪv]两种内置的作业类型,其中,demux作为负责对数据分类、排序、去重,archive作业负责把同类型的数据合并。
  • HICC:负责数据的展示。
Chukwa的优势和劣势
  • 优势:高可靠,易扩展;社区活跃度较高;文档资料较丰富;
  • 劣势:依赖hadoop。

ELK

ELK的介绍

ELK 不是一款软件,而是Elasticsearch、Logstash和Kibana首字母的缩写。这三者是开源软件,通常配合一起使用,而且先后归于Elasic.co公司的名下,所以简称ELK Stack。根据Google Trend的信息显示,ELK已经成为目前最流行的的集中式日志解决方案。

  • Elasticsearch:是一个分布式搜索和分析引擎,具有高可伸缩、高可靠和易管理等特点。基于Apache Lucene构建,能对大容量的数据进行接近实时的存储、搜索和分析操作。通过简单的配置,Elasticsearch就会帮你管理集群、分片、故障转移、主节点选举等,还提供集群状态的监控接口。

  • Logstash:数据收集引擎。它支持从各种数据源收集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储到用户指定的位置。Logstash支持file、syslog、tcp、stdin、redis和kafka等多种接收方式。支持elasticrsearch、email、exec、nagios、tcp、hdfs等多种方式输出。

  • Kibana:数据分析和可视化平台。通常与Elasticsearch配合使用,对其中的数据进行搜索、分析并能以图表的方式显示。

  • Filebeat:ELK协议栈的新成员,一个轻量级开源日志文件数据搜集器。我们在需要采集日志数据的服务器上安装Filebeat,并指定日志目录或日志文件后,Filebeat就能读取数据,迅速发送到Logstash进行解析,亦或直接发送到Elasticsearch进行集中式存储和分析。FileBeat可以监听指定目录下是否新增文件,监听文件是否新增记录,文件在一定时间内没更新取消监听,支持批量数据传送,支持负载均衡的方式传送数据到Logstash或Elasticsearch。支持SSL/TLS协议传送。

ELK的结构
  • 最简单的结构模型:
最简单的结构模型

这种结构很简单,适合初学者。初学者可以搭建此结构,了解ELK如何工作。

  • Logstash作为日志收集器:
Logstash作为日志收集器

这种结构模型需要在各个应用服务器上部署Logstash,但Logstash比较消耗CPU和内存资源,所以比较适合资源丰富的服务器,否则可能会导致应用服务器无法工作。

  • Beats作为日志收集器,Beats包括四种:
    • Packetbeat(搜集网络流量数据)
    • Topbeat(搜集系统、进程、文件系统级别的CPU和内存使用情况等数据)
    • Filebeat(收集文件数据)
    • Winlogbeat(收集Window时间日志数据)
Beats作为日志收集器

这种结构解决了Logstash在各服务器节点上占用资源高的问题。另外,数据格式规范的情况下,可以移出Logstash节点,Beats直接发送数据到Elasticsearch,解决Logstash占用资源高的问题。

  • 引入消息队列机制
引入消息队列机制

这种结构适合日志规模比较大的情况。引入消息队列,将上下游服务解耦,减轻下游服务的压力,解决在巨量日志下,网络阻塞延迟、数据丢失的问题,使得网络传输更稳定、更高效,避免级联效应。在巨量日志的情况下,Logstash节点和Elasticsearch节点负荷比较重,可将它们配置成集群模式,分担负荷。在日志比较规范的情况下,可以去掉Logstash,Beats直接发送数据到Elasticsearch,解决Logstash占用资源高的问题。

ELK的优势和劣势
  • 优势:提供一套完整的日志收集、分析、存储和数据展示的解决方案;Logstash支持集群部署和水平扩展;Elasticsearch高可用,支持集群部署和水平扩展;社区活跃度高;文档资料较丰富;部署简单。
  • 劣势:Logstash占用资源比较高。

指标项对比

指标项对比

结论

结论

ELK告警策略

ELK告警策略

参考资料

Flume NG

http://blog.csdn.net/zhaodedong/article/details/52541688
http://www.gegugu.com/2016/04/11/5484.html

Scribe

http://www.itdadao.com/articles/c15a502872p0.html
http://www.36dsj.com/archives/66047

Kafka

http://www.cnblogs.com/likehua/p/3999538.html
http://www.infoq.com/cn/articles/kafka-analysis-part-1

Chukwa

http://www.it165.net/admin/html/201403/2507.html
http://f.dataguru.cn/thread-97612-1-1.html

ELK Stack 中文指南

http://kibana.logstash.es/content/

Logstash最佳实践

http://udn.yyuap.com/doc/logstash-best-practice-cn/index.html

Elasticsearch 权威指南

https://es.xiaoleilu.com/

Elasticsearche配置:

https://my.oschina.net/topeagle/blog/405149
https://my.oschina.net/Yumikio/blog/805877

Filebeat配置:

http://m.blog.csdn.net/article/details?id=53584173
http://michaelkang.blog.51cto.com/1553154/1864225

Search Guard:

https://github.com/floragunncom/search-guard-docs
http://www.cnblogs.com/Orgliny/p/6168986.html
http://kibana.logstash.es/content/elasticsearch/auth/searchguard-2.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容