缘起
我很喜欢在终端里挂着 btop,但看久了总会好奇面板上跳动的数字到底是怎么从内核里算出来的。于是干脆绕开现成的跨平台系统信息库,直接从 Linux 的 /proc 开始手写采集层:自己读原始文本、自己转单位、自己兜底脏数据。
做这个项目的目的很单纯,就是想亲手把系统监控的黑盒拆开走一遍:面板上每显示一个指标,底下的采集代码都得能一行行指回内核里的原始字段。
解码
比如 /proc/net/tcp 里的网络地址,内核直接按小端序的十六进制写了出来。下面这行数据取自本机的回环监听,要想把它还原成人类能读的 IP 和端口,得先把前四个字节按序反转,再把冒号后面的端口号按大端序转成十进制。
sl local_address rem_address st
0: 0100007F:1F90 00000000:0000 0A
1: 00000000:0050 00000000:0000 0A 0100007F127.0.0.1按字节反转
1F9080800x1F90 = 8080
0ALISTENTCP 状态码
inode/proc/[pid]/fd映射回进程
解析 /proc/meminfo 也是同样的路数:不同内核版本下字段可能缺失、格式可能异常、单位换算时如果直接往 uint64 里塞,遇到边界输入就会算出一串离谱的天文数字。因此把溢出保护和缺省兜底写进采集层,是从第一天就定下的规矩。
证据
19个测试函数
360次真实采样
4种负载场景
仓库里留存了四种不同负载场景下的 360 次真实采样快照,配套写了 19 个测试函数,专门用来盯住底层的文本解析与异常边界。
项目的 /proc 采集层与测试由我本人独立主导完成;外层的前端图表界面则借助 AI 快速搭起来。哪部分是自己啃下来的、哪部分借了工具的力,在文档里都留了明确的记录。
边界
项目属于早期探索,离完整的桌面系统监视器还有不少距离:
- 采集层仅针对 Linux procfs 编写,没有做 macOS 或 Windows 的原生系统调用适配。
- 前端界面目前只做到了数据能看,交互细节与图表体验还没有仔细打磨。
- 不打算替代成熟的终端监控工具,也没有去做极限性能压测。
- 核心收获全在底层采集的可解释性上:至少现在看监控面板时,我知道每个数字背后经历了什么。