玩弄日志归集于手掌之中

上面蓝色 一猿小讲 ”点击加关注

觉得好看,记得再设置“ 星标 ”哦

【这是一猿小讲的第 30  篇原创分享】

关注“一猿小讲”公众号的粉丝都清楚,在《傻瓜也能玩转日志归集》一文中,分享过一个业界使用成熟的日志归集方案 EFK。 而今天,咱们再谈日志归集,但是今天的分享,却不再傻瓜般的 EFK,而是一款可定制开发的日志归集工具 Flume。

请准备好小板凳,我们的故事开始。

01. 缘起

9012 年 4 月 1 日,为了庆祝上次 EFK 日志归集,在生产投入使用,BOSS 召集大家开个庆功会。

大家都面带微笑的走进会议室,依次而坐,期待着 BOSS 给大家发奖励。

只见 BOSS 也面带微笑的走进了会议室。 伴随哼哼的两声,便开始了庆功讲话: 「大家都到齐了,首先庆祝 EFK 日志归集,正式投产使用,并且轻量、易用、落地实践效果非常好,很值得表扬啊。

大家齐刷刷、哗啦啦的掌声响起,也是给自己的努力付出,而鼓励。

BOSS 接着说: 「但是据我所知,日志采集工具 Filebeat 是用 Go 语言开发的,考虑到咱们的基础框架,都是用 Java 研发的,那么能否打造一款 Java 语言开发的日志归集工具?

大家感觉这会议的画风,要变成项目启动会,齐刷刷的沉默... ...

BOSS 又说: 「如果能打造一款 Java 语言开发的日志归集工具,然后再集成到咱们的基础框架中,这样一来技术栈就统一啦,部署起来也简单,这个时间紧、任务重,还是交给你们团队负责吧。

伴随着大家的再次沉默,领到了 BOSS 的奖(任)励(务),庆(项目)功(启动)会也结束啦。

02. 干呗

天下武功,唯快不破。 于是我们迅速调研了开源的日志归集轮子,而且语言限定为 Java。 没成想,日志归集的后宫,可谓是佳丽三千,而我们偏偏又宠上了 Flume。

03. 是啥

Flume 是 Cloudera 提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,目前是 Apache 下的一个孵化项目。 Flume 支持在日志系统中定制各类数据发送方,用于收集数据; 同时,Flume 提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力 ——摘自百度百科。

说的是个啥呀? 还是没有搞懂啊,自打小咱们语文课,就锻炼看图说话,那咱们还是上个图吧。

哦,原来 flume 可以用来归集数据,然后能发到存储的一个技术轮子,感觉上还不错。

不知道你是否好奇,这个轮子里面是咋运作的呢,反正我是很好奇。 那不妨再来个看图说话吧。

哦,原来 flume 是通过 source 来定义采集的数据源,粗暴的讲就是要采谁; 然后把采集的东东放在 channel 里面,这玩意不就是一个缓冲队列吗; 然后 sink 从 channel 中拿数据,可以直接推向存储啦。

不知道你是否好奇,这玩意在实际场景中该如何应用呢?

哦,如上图所示,考虑到与《傻瓜也能玩转日志归集》一文中落地的 EFK 的技术栈相吻合,那么可以继续使用 elasticsearch 做存储,然后用 Kibana 做展示,如果条件允许的情况下,可以进行自研日志查询组件。

好了,到这你应该对“如何用 flume 做日志采集”有了一定的理论了解,但是依据上面的几张图,也不得不提一嘴,flume 模块设计划分,确实很明确; 功能职责也很清晰; 可插拔性做的确实好( 好奇的你们,体会到了没? )。

04. 咋用

一切技术轮子都是纸老虎,而打破纸老虎的方式,莫过于亲身实践,动手搞起。

后宫佳丽三千,而 flume 你值得拥有,flume 目前最新版本为 1.9.0,而我们采用的是 1.7.0 版本,不要问为什么,就因为王八看绿豆,看对眼了。 选择适合自己的,才是最好的。

按照常规,你肯定会认为,我今天带着你从头到尾,体验一下日志采集 flume、日志存储 elasticsearch 以及日志展示 Kibana,很不幸的告诉你,让你失望了。 因为在《傻瓜也能玩转日志归集》一文中已经带着你搭建过 EFK 从 0 到 1,其实 flume + es + kibana 这个步骤甚是相同,你只需照猫画虎,遇坑填坑即可。

而今天,我们重点谈谈基于 flume 做了哪些改动?

05. 狂造

能用就用,不能用咱也别将就,一言不合,咱们就可以扩展二次开发。

按照 flume 的设计思路,应该有个地方配置 source、channel 以及 sink,如果到这一步,你对这三个英文单词还不理解,那么请从头再看一篇(捂嘴笑)。

果然不出所料,打开配置文件来个全景视图,一探究竟,看看到底都改了啥?

友情提示: 注重关注红色部分,因为下面的灵魂发问皆是出自红色部分。

灵魂 采集日志肯定要有所采,有所不采,如何支持配置排除的日志文件名?

我有妙招:通过配置文件,配置哪些日志文件不做采集;然后通过 flume 启动的时候,读取规则配置;然后通过缓存日志文件的时候,进行匹配是否采集。还是截点图留个念想吧。

上面截图看不懂没关系,知道我们能重写 flume 的 source 来自定义排除日志文件就行了。

灵魂 问: 好奇的你们,有没有好奇 flume 读日志读到哪一行了?日志从哪儿来的?日志文件的路径是个啥?

我有妙招:分门别类,各个击破,主要在于扩展 TailFile 支持 lineNum、IP 、Path,截个图做个引子,留作你们用到时再深入,今天也不多费口舌。

灵魂 问: 大家用技术都习惯性的喜新厌旧,而由于 ElasticsearchSink 的版本支持的 es 版本过于低,何解?

我有妙招:全新定义一个 ElasticSearchHighSink,而我们只需要把里面的访问 es 的 client 换成 RestHighLevelClient,再稍微润色一下,就 OK。其中这个度娘也会告诉答案,搜之一大堆,也不在此费口舌啦。

最后,针对 flume 二次开发,扩展来扩展去,一个字“爽”,两个字“倍爽”。

06. 团建

经过一周的苦苦寻觅,终于与框架集成到一起,虽有小 Bug 存在,但是不影响大局。劳累的大家,要求来个愉快的轰趴玩耍,为什么要去轰趴,为什么要去玩耍?因为大家都明白一个道理:不懂玩的人等于会上班的猪。

最后,就用下面这个公式来结束今天的分享吧,恰逢周末,我们一起乐呵乐呵。


 

人 = 吃饭 + 睡觉 + 上班 + 玩。

猪 = 吃饭 + 睡觉。

代入:人 = 猪 + 上班 + 玩。

那么:人 - 玩 = 猪 + 上班。

结论:不懂玩的人 = 会上班的猪。

推荐阅读:

傻瓜也能玩转日志归集

一篇文章讲透线上应用监控

Java系列爱情故事推荐:

爱情36技之追美妹的技术

爱情36技之暗送秋波的技术

爱情36技之趣味相投

爱情36技之Bug大战

我来评几句
登录后评论

已发表评论数()

相关站点

+订阅
热门文章