作者:杨泽华(玄飏)
引言
在庆祝 iLogtail 开源两周年这一里程碑时刻,我们不仅回顾了项目的成长历程和技术革新,还深入探讨了它如何不断重塑可观测性数据采集的技术疆界。但每一段辉煌旅程的背后,都离不开一群热爱技术、勇于探索的贡献者。他们以代码为砖石,以创意为梁柱,共同构建了 iLogtail 这座开放、强大、灵活的数据采集“大厦”。
这一期,我们将镜头转向那些默默耕耘在 iLogtail 社区的贡献人物。他们来自五湖四海,拥有不同的背景和专长,却因为对技术的共同热爱与追求汇聚一堂。我们邀请到了两位社区 Committer 进行分享。孙宇同学分享了他的心路历程,而阿柄同学则是接受了我们一对一的深度访谈。我们将揭秘这些开发者如何在日常工作中与 iLogtail 结缘,又如何在业余时间里为项目添砖加瓦,推动其不断向前发展。
社区 Committer 孙宇分享:iLogtail 的 Committer 成长之路
引言
时光飞逝,转眼间,iLogtail 已经开源快两周年了。作为 iLogtail 的贡献者,我个人也有许多感慨。在过去的两年里,iLogtail 持续不断地进行完善和改进,其社区贡献者和用户群体也日益壮大。开源以来,iLogtail 凭借其高性能和轻量级的特性,已经成为国内众多知名互联网企业日志采集的基础建设设施。
我与 iLogtail 的结缘
大概在 2019 年的时候,我在国内某 AI 科技公司负责一个 IoT 项目的 K8s 容器化落地。后来,在对日志采集方案进行调研时,我看到阿里云发布的一篇关于自研云原生日志采集器 logtail 的文章,其高性能的特性深深吸引了我,但当时 logtail 并没有开源,这让我感到有些遗憾,当然也对其开源充满了期待。最终,我们选择了社区相对成熟的 Filebeat 作为可观测性日志采集器,并基于 EFK 这套社区生态体系构建了当时业务的可观测性系统。这段经历为我后来参与 iLogtail 的贡献提供了宝贵的经验。
在我当前就职的公司同程旅行,我们团队负责的大数据云原生建设初期也采用了几乎相同的方案来采集大数据组件的日志。随着我们的大数据组件逐渐支持云原生化,并且随着业务量的提升,单个点需要采集的日志量也增大,到了 2022 年第二季度,日志采集问题开始逐渐暴露:
- Filebeat 在部分组件的日志采集上开始出现延迟,例如在 Yarn 日志采集上。
- 随着采集压力的上升,日志堆积也导致 Filebeat 占用了更多的内存和 CPU,这种资源占用方式显然是不可接受的。
- 基于 Filebeat 采集的数据,在 Flink 层面做消费处理提取存储时也出现了严重的延迟问题。
在 2022 年七月份,团队让我负责去处理日志消费延迟问题。此时恰逢 iLogtail 正式发布完整功能社区版不久,于是我在优化解决了延迟性问题后,开始调研刚开源不久的 iLogtail。这次调研让我与 iLogtail 结下了不解之缘,开启了我的 iLogtail 贡献之旅。
首次贡献
在调研 iLogtail 时,我用 iLogtail 结合当时我们使用 Filebeat 采集时的场景做了一些模拟日志的采集测试验证,在验证中我发现两点问题:
- iLogtail 不支持 Kafka 动态 topic 推送数据,我们有部分场景会识别日志内容的或者容器的一些标识去动态区分推送到 topic。
- iLogtail 推送到 Kafka 的数据是 key-value 对的形势存放的,对开源生态的接入非常不友好,用户想低成本使用第三方开源生态组件消费 Kafka 日志写入 ES 等检索系统非常的困难。
{
"Time": 1659110162,
"Contents": [{
"Key": "content",
"Value": "{\"date\":\"2022-07-29 23:56:02.131\"}"
}]
}
在参与 iLogtail 贡献之前,我个人也是一个社区开源项目的作者和持续维护者,在开源项目运营中也接触了解过很多社区用户对于开源项目支持开源生态组件的一些诉求。因此结合我对 Elastsearch+Filebeat+Kibana 生态组件使用经验和对开源社区项目的一些理解,我加入了 iLogtail 的社区群并反馈上面了问题,社区很快就接受了我提的意见,并非常友好的邀请我参与 iLogtail 共建,我也很荣幸成了社区的第一个贡献者。
接受了社区的共建邀请后,我和社区几位负责人做了几次的线上会议交流,开始接手 Kafka flusher 插件动态 topic 的支持和数据扁平化的写入改进的设计工作。
PR 设计文档 kafka flusher support dynamic topic and log fields extension:https://github.com/alibaba/ilogtail/discussions/280
对方案做了几次的讨论和确认后,我完成了开发给社区提交了第一个 PR,后续 PR 经过 review 和不断的优化和调整后被成功合并:https://github.com/alibaba/ilogtail/pull/443
这个 PR 对社区和我都具有重要的意义:
- 对于 iLogtail 社区来说,实现了 Kafka 动态 topic 的支持和数据扁平化处理后,iLogtail 变得更加用户友好,使得更多用户能够轻松地接入和使用 iLogtail。这不仅拓宽了用户范围,也降低了用户将 iLogtail 接入现有第三方开源生态的成本,从而更容易推广。
- 对于我个人而言,这是我第一次向非个人开源项目提交 PR 贡献,这不仅是一次宝贵的经验,也让我在参与其他项目共建的过程中学到了很多。
这次经历不仅对 iLogtail 社区产生了积极影响,也极大地促进了我的个人成长和在开源社区参与度。
成为 Committer
iLogtail 社区的 Committer 准则是:对 iLogtail 社区的某些特定领域做出显著贡献的人。
成为 Maintainer 的标准包括:
- 在某个模块中成为专家,长期并持续地贡献问题、拉取请求(包括代码、测试用例、文档、案例);
- 参与重要功能的讨论、设计、开发和测试;
- 参与代码审查。
在规模性和运营成熟的社区中,成为 Committer 并非易事,iLogtail 社区也不例外。因此,在最初参与 iLogtail 贡献时,我并未考虑过要成为 Committer。我参与社区的初衷相对简单,即把自己的想法反馈给社区,希望其功能更加完善。
在调研测试 iLogtail 时,它仍处于开源初期阶段,与下游开源生态的整合并不完善,甚至缺乏。例如,对于下游生态的 flusher 仅支持 Kafka,但支持能力较弱,数据写入也不友好。
自 2022 年 7 月下旬加入社区后,我利用业余时间参与到社区共建中,累计提交了 14 个 PR。主要贡献如下:
提交 Kafka 动态 topic 和数据扁平化支持设计,提交相关
prhttps://github.com/alibaba/ilogtail/discussions/280https://github.com/alibaba/ilogtail/pull/443
升级 Kafka 的 SDK,重构官方原始的 Input Kafka 插件
设计 iLogtail flusher pulsar 支持
输出 json 一级平铺
支持 elasticsearch 动态索引表达式格式化
除了直接的代码和文档贡献外,我还参与了社区 Flusher Clichhouse、Flusher Elasticsearch、Flusher RocketMQ 的设计讨论和审查,并在空闲时积极回复和解答用户问题。
后来,经过 PMC 的讨论,我被提名成为 Committer。随着这些问题的解决,社区在开源之初对下游生态支持的不足和不友好问题得到了极大改善,对于动态 topic 和动态索引表达式的支持也使得后续许多生态组件 flusher 能够快速开发和使用。
我的开源共建感受
参与开源项目共建,特别是像 iLogtail 这样的项目,能够带来多方面的价值,不仅对个人参与者有益,也对整个软件生态系统和社会产生积极影响。在参与 iLogtail 的开源共建过程中,我获得了许多宝贵的收获。
首先,在技术提升和学习方面,通过阅读和理解他人的代码,以及与社区中的其他大佬和用户交流,我不断学习了解到了很多新的知识和技能。这种学习经验对于我个人的技术成长极为有益。
其次,我的影响力也得到了提升。通过积极参与推动和持续贡献,我为社区的发展贡献了自己的力量,并因此获得了 iLogtail Committer,这对我个人的影响力是一个显著的提升。
最后,参与 iLogtail 的共建还帮助企业降低了成本。iLogtail 成功地替换了同程旅行大数据组件日志采集中过去的 Filebeat,解决了我们之前遇到的问题,降低了采集器对服务器资源的占用。这意味着我们无需自行研发所有功能进行替换,从而节省了大量资源和时间。
未来,我也将继续积极参与 iLogtail 的共建和宣传工作,为社区的发展贡献更多的力量。
致谢
我要特别感谢 iLogtail 社区,它不仅建设了一个对开发者和用户都极其友好的环境,还让我感受到了技术共享和开源文化的真正意义。我还想对 iLogtail PMC 及核心贡献者们表达我的深深感激,他们在我的贡献过程中给予了我宝贵的指导和支持,这使我能够更好地融入社区并做出我的贡献。同时,对所有 iLogtail 社区的贡献者和开发者表示诚挚的谢意,大家的努力和奉献构建了这个强大的高性能可观测数据采集器。
祝福
祝愿 iLogtail 社区随着时间的流逝越来越强大,不断吸引更多的热情和才华横溢的开发者和用户加入。希望 iLogtail 能够成为云原生领域可观测数据采集的全球化基础设施组件,为世界各地的开发者提供高效、可靠和易于使用的可观测数据采集管理解决方案。让我们共同期待 iLogtail 在未来的发展。再次祝贺 iLogtail 开源两周年取得的成功和进步,期待着看到它的持续成长和壮大!
社区 Commiter 阿柄采访
问:先做个自我介绍吧
答: 好的,我叫阿柄,是一名今年毕业的应届毕业生。在学校期间,我就对开源社区抱有很高的热情,积极参与了很多的开源项目,在 2020 年参与了 Google Summer of Code 项目,以及平时参与了一系列其他项目的日常开发。毕业后,我加入了阿里云,主要参与 iLogtail 相关的开发工作,可以在工作中继续为开源做贡献。
问:你接触、了解到 iLogtail 的最初理由、原因是什么?
答: 第一次接触到 iLogtail 时,我还在学校读书。虽然在课堂上学到了很多理论知识,但却缺乏实际应用的机会。iLogtail 作为开源项目,不仅拥有出色的设计和代码实现,在性能等多个方面表现优异,更让我看到了理论知识在实际应用中的最佳实践。例如,iLogtail 经常在多个开发者社区中分享技术文章,详细介绍了项目中的设计模式和无锁化设计等技术细节,让我对这些概念有了更加深刻的理解。通过积极参与 iLogtail 的开发,我逐步将书本上的知识与实际操作结合起来,从而进一步深化了我的技术水平。
问:iLogtail 在你的第一印象中,是个什么样的开源项目 or 社区?
答: 在我的第一印象中,iLogtai 是一个对各方面都有高标准要求,但同时又很开放包容的社区。iLogtail 项目的开发团队对于代码质量的严格把控给我留下了深刻印象,每一段提交的代码都会经过细致的 review,确保了代码库的高可靠性和可维护性。这种对技术的严谨态度,不仅保证了产品的稳定性,也促进了参与者技能的不断提升。
社区的活跃氛围同样令人印象深刻。无论是新手提问还是资深开发者的技术讨论,都能迅速得到响应和有价值的反馈。iLogtail 团队经常举办线上技术分享会,这些活动不仅覆盖了技术深度解析,还有对未来趋势的探讨,让人感受到这是一个持续学习和共同进步的环境。
问:是什么样的原因/动力,让你愿意持续参与到社区贡献中?在参与社区贡献的过程中,你有什么收获?
答: iLogtail 社区所拥有的开源精神对我产生了非常深远的影响。在参与 iLogtail 社区的过程中,我深切体会到协作与分享的力量。社区中,定期的周会和月会提供了宝贵的平台,让来自千行百业的大家在会上分享技术设计思路和最新进展。这些讨论极大地开阔了我的视野,提高了我的解决问题的能力。此外,社区活跃的讨论氛围也是我成长的重要来源,大家在群里积极讨论,互相帮助,共同进步。
接触到这样一群在可观测领域有着深厚积累的开源开发者,不仅让我学习了很多前沿知识,也激励我投身开源,回馈社区。通过持续参与和贡献,我不仅提升了自己的技术水平,还培养了良好的团队合作能力和解决问题的思维方式。这段经历不仅让我在技术上取得了长足进步,也让我更加坚信开源协作的力量,对我来说是一份宝贵的经历与财富。
问:作为新晋 Committer,你想对开源爱好者、iLogtail 社区同学说点什么?
答: 成为 iLogtail 社区的新晋 Committer,我深感荣幸。我想借此机会向所有开源爱好者和 iLogtail 社区的同学传达几点心得:
首先,勇敢迈出第一步至关重要。不论你是刚入门的新人,还是寻求技术突破的老手,积极参与开源项目都是一个不断学习与成长的过程。不要害怕提出问题或贡献代码,每一次尝试都是向前迈进的一大步。
其次,坚持与耐心是通往成功的钥匙。技术之路从无坦途,面对挑战和困难时,保持坚持不懈的精神和细致入微的态度,你将会发现自己的潜能远远超乎想象。在 iLogtail 社区,我们鼓励每一位成员保持韧性,勇于探索未知。
最后,重视沟通与合作。开源项目的价值很大程度上来源于多元化的思维碰撞。有效的沟通能够促进理解,深化合作,让项目朝着更加完善的方向发展。请珍惜每一次交流机会,无论是面对面的讨论,还是线上的文字往来,都可能成为灵感的火花。
结语
这一系列的社区贡献人物采访,不仅是对 iLogtail 两周年成就的致敬,更是一次向所有开源贡献者表达敬意的旅程。它们将展现技术背后的人文温度,以及开放共享精神如何成为推动技术和社会进步的重要力量。让我们一同聆听这些声音,感受每一位贡献者的热情与智慧,共同期待 iLogtail 更加辉煌的未来。
搜索钉钉群号: 35576244 加入 iLogtail 社区
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。