专栏首页一猿小讲玩弄日志归集于手掌之中

玩弄日志归集于手掌之中

【这是一猿小讲的第 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 存在,但是不影响大局。劳累的大家,要求来个愉快的轰趴玩耍,为什么要去轰趴,为什么要去玩耍?因为大家都明白一个道理:不懂玩的人等于会上班的猪。

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

人 = 吃饭 + 睡觉 + 上班 + 玩。
猪 = 吃饭 + 睡觉。
代入:人 = 猪 + 上班 + 玩。
那么:人 - 玩 = 猪 + 上班。
结论:不懂玩的人 = 会上班的猪。

本文分享自微信公众号 - 一猿小讲(yiyuanxiaojiangV5),作者:一猿小讲

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-07-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 经验分享一箩筐,从此再也不入坑

    多用户并发情况下,CPU 利用率长期为100%,DUMP 线程信息,发现 CPU 利用率高的线程都与 HashMap 操作相关。

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

    “线上服务停了,要重启一下”?久经职场做研发的程序员,视线会逐渐转移到线上应用的运行状态。设想一下,如果你在半夜两点正在酣眠美梦时,微信群里突然炸开锅:“服务停...

    一猿小讲
  • 傻瓜也能玩转日志归集

    关注"一猿小讲"的猿友们都知道,前段时间我在《一文讲懂线上应用系统监控》给大家简单提到了日志归集,埋下了伏笔,今天的这篇分享是来给大家还债的,主要从整体到局部,...

    一猿小讲
  • 为了听技术干货,小伙伴们也够拼的!

    Rainbond开源
  • MySQL 8.0 新特性:NOWAIT and SKIP LOCKED

    在过去,出现秒杀,抢购等业务场景时,很多产品、程序、架构师都会优先考虑 redis,memcache 这类 NoSQL 数据库,或者是 zookeeper 这类...

    王文安@DBA
  • 【机器学习】机器学习在电商文本挖掘中的应用浅析

    电商平台中有海量的非结构化文本数据,如商品描述、用户评论、用户搜索词、用户咨询等。这些文本数据不仅反映了产品特性,也蕴含了用户的需求以及使用反馈。通过深度挖掘,...

    陆勤_数据人网
  • Log4j 2配置指南

    以前都是直接在项目中使用网上的log4j2.xml,大概能用就行,结果用Storm的时候,项目中的log4j2.xml文件失效,必须在Storm目录的配置文件中...

    Java识堂
  • 斯坦福AI实验室机器学习编程新范式:弱监督

    近年来,机器学习对现实世界的影响突飞猛进。这主要是因为深度学习模型的出现,它让从业者在没有任何手动设计特征的情况下就能够在基准测试数据集上得到当前最佳得分。由于...

    机器之心
  • 监督学习/无监督学习-看完吴恩达机器学习视频的总结

    监督学习: 定义:根据已有的数据集,知道输入和输出结果之间的关系。根据这种已知的关系,训练得到一个最优的模型。也就是说,在监督学习中训练数据既有特征(featu...

    逐梦的青春
  • 手势交互+多人协作,Nreal积极布局MR内容生态

    (VRPinea2020年3月7日电)2020年初,Nreal在CES上发布了混合现实(MR)环境下的3D操作系统——星云。在近日,Nreal宣布将加入手势识别...

    VRPinea

扫码关注云+社区

领取腾讯云代金券