写点什么

终端闲思录(1)- k8s 日志引发的联想

作者:黑客不够黑
  • 2023-12-19
    江苏
  • 本文字数:1126 字

    阅读完需:约 4 分钟

终端闲思录(1)- k8s 日志引发的联想

终端是我们习焉不察,日用而不知的一种工具,如果去问一个 Linux 爱好者:“Linux 中最神秘的东西是什么?” 我相信回答“终端”的人一定不在少数。黑洞洞的窗口,像音符一样跳动的命令与输出,适时闪烁的光标,无一不弥漫着古老而又神秘的气息!



促使我 dig 终端的原因是我所在的公司要上线一个新项目,要求采用 k8s 作为运行平台,那么,日志处理方面就需要一个合理的方案。


我注意到 k8s 官方给出了几个可行方案



其中,前两个方案都要求应用或者边车将日志写入标准输出和标准错误,相应的容器运行时负责将其转储为文件,最后由节点级的日志代理统一收集整理。后面两个方案其资源成本和开发成本都比较可观,并且将无法使用kubectl logs访问日志。


很明显可以看出,k8s 是偏向于应用将日志写入标准输出和标准错误的,这让我想起一位架构师朋友曾经说:“我不想把日志打到控制台,因为控制台是同步的,这会影响性能。”


这段话即便不是错误的,至少也是不准确的。鉴于长久以来都对终端、控制台、标准输入与标准输出以及标准错误(Unix 世界竟然没有一个简单的概念来统称这三个文件描述符,为了方便称呼,后续我将在这三者同时出现的地方以标准三剑客来代替)等概念笼统对待,为破除这一刻板印象,并理顺 k8s 中处理日志的思路,搞清楚打印到标准输出与标准错误是否合理,我做了一些研究工作,清理了如下三个障碍:


  1. 终端与标准三剑客的关系

  2. 标准三剑客与缓冲

  3. k8s 是如何重定向标准三剑客的 ?


这些问题真的那么重要吗?不妨假想一下:


k8s 建议你将日志打印到标准输出和标准错误,而你是一个略微有点计算机文化积淀的人,你知道在 C 标准库里标准三剑客的 I/O 缓冲各不相同,缓冲最大的也就是个行缓冲,你会狐疑着说:"我都不确定我所用语言的缓冲设计,我能放心地往标准输出和标准错误写吗?你把那些优秀的高吞吐日志框架至于何地?"

这时,一位大腹便便的中年人慢悠悠踱到你面前,语重心长地说道:“少侠,稍安勿躁,谁说往标准输出和标准错误写就一定写往终端 ?就一定是行缓冲 ?就一定要用‘printf’‘fmt.Print’‘system.out.println’ ?”

一连串的反问让你内心掠过一丝不快,但望着他稀疏的额头和有些混浊却不失坚毅的眼睛,你最终只是微微张了张嘴,没能说出一个字。

他肥胖的身躯坐了下来,用手捋着下巴上一撮小胡须,施施然道:“闻道有先后,不知道并不可怕,一知半解才可怕,我看你方才只是‘狐疑’着发问,并未理直气壮、斩钉截铁、目空一切,而且也不曾顶撞老夫,说明孺子可教,我就拣重点与你说说吧!”

说罢,便开始了涛涛雄辩。


言归正传,我将用一系列文章争取把这三个问题讲清楚,下一篇即进入终端的神秘世界!


用户头像

感而后应,迫而后动,不得已而后起 2018-11-20 加入

非著名程序员,任职过测试,前端,devops,DBA、Go 后端开发等等 个人网站: https://liupzmin.com 联系方式: liupzmin@gmail.com

评论

发布
暂无评论
终端闲思录(1)- k8s 日志引发的联想_终端_黑客不够黑_InfoQ写作社区