开源之夏2024
Published: 9/30/2024
编写项目申请书的时候,研究的不够深入。
与此同时,我去学习可观测方面的知识。
我记得大部分任务是在信息和媒体图书馆完成的。那里有显示器,可以连上用。
缘起
我选择项目的思路很简单,就是看哪个项目对未来就业有帮助,我当时想去大厂,所以重点看了蚂蚁相关的项目,然后就发现了铜锁社区的这个项目。
我在2021~2022开源实习中在openEuler社区的QA-SIG为Prometheus设计过测试样例。感觉这个项目应该不是非常难。
预研并编写项目申请书
学习 Rust语言
这个项目是用Rust语言编程,用Prometheus的库来对RustyVault进行插桩,采集指标。
我先开展了Rust的学习,看了几页Rust的官方教程。在两天之内放弃这个方法了,因为感觉这个学习路线不适于当前任务。我只想了解一些Rust的基础语法和知识即可,没有多余的时间深挖原理和设计理念。
学习可观测方法论
我发现Prometheus文档中对于插桩的介绍不足以让我学会如何进行这项任务,更别提用Rust语言来完成这个任务了,Rust语言的文档不如其他语言详细。
在一番搜索后,我发现了一个平台PromLab,这个平台上有门课程是教大家使用Prometheus进行可观测任务的。
这门课不光教我如何使用Prometheus这个工具,还教了我可观测的方法论。
可观测的方法论是这样的,首先确定目标服务的类型,再确定关键指标,最后用代码实现插桩。
RustyVault可视为一个在线服务,故可以使用RED(Rate、Error、Duration)方法进行可观测。对于系统性能的检测可以使用USE方法进行分析。
PromLab的课是用Go语言展开的。内容不冗余,让我很快就掌握了这类任务的方法论。
完成插桩的方式有几种:
- 自动插桩,目标应用服务使用流行的框架实现,这些框架已经内置了插桩代码
- 手动插桩,使用可观测框架的客户端对目标应用进行插桩,手动进行初始化、采集和导出
阅读项目源码
阅读源码方面,我想到一种之前没有用过的方法,即从第一个commit开始,依次看RustyVault这个项目的变化。
我尝试了几天,发现这个方式并不可行,性价比不高,时间消耗多,进度几乎没有感知。
思考后,我决定还是使用老方法,即基于最新版,用调试的方式从入口点下断点,不断前进,直至搞清楚这个软件的原理。
此项目的代码量不大,我在几天之内就搞懂了这个项目的初始化和运行逻辑,知道了应该在哪里初始化Prometheus的变量,在哪里将采集到的指标暴露出去。
实现
根据可观测方法论,先确定了一批需要监控的指标,我询问导师这些指标是否足够,还需要添加哪些指标。
我在RustyVault初始化的代码中初始化了Prometheus的xx组件。
为RustyVault实现了中间件,当进行HTTP通信的时候就会对各服务的状况进行统计。
最后从xx服务将采集到的数据进行暴露。
Promethues后端配置了应用的地址后,可以主动从应用提取采集到的数据。
结语
任务管理,要明确任务的目标是什么,实现的过程中要清晰的认识到当前的方法是否有助于任务完成,若没有就应当尽快纠正。
学习资料/正确的路线,适合的路线能够让人事半功倍。