如何从头开始收集系统统计信息?

How to collect system statistics from scratch?

我想获取一些系统统计信息。我知道我可以使用 collectd,但我这样做是为了娱乐和学习。我会通过检查 /proc/:id 中文件的内容来完成,最终通过解析某些命令的结果,比如 netstat。我只是想每 1 秒检查一次文件或命令输出的内容——因为我想对系统有详细的了解。这样的方法可以吗,或者它会减慢和错误的基准测试?

如果这是为了娱乐和学习,您将通过自己解析 /proc 获得更多乐趣并学到更多东西。另一个反对解析命令输出的论据是,根据我的经验,对于生产代码,这不是你的情况,它可能不可靠(即取决于工具的版本和 LOCALE)。

您可以通过研究现有工具的实现来学习。 Busybox 版本,当它们存在时,比完整版本更简单。

这就是 busybox 的 route 解析 /proc/net/route:

的方式

http://git.busybox.net/busybox/tree/networking/route.c#n516

netstat要复杂得多,这并不奇怪。

http://git.busybox.net/busybox/tree/networking/netstat.c

...虽然有时候,这不能通过解析 /proc 文件来完成。以下是 ifconfig 使用 IO 控件获取有关界面的一些信息的方法:

http://git.busybox.net/busybox/tree/networking/interface.c#n607

方法可以吗?

是的。

否则它会减慢和错误的基准?

好吧,这是反对解析现有命令输出的第三个论点:您越接近信息源,就越是最新的。使用快速语言也有帮助。如果你迟到几秒钟,这真的很重要吗?由你决定。如果这只是为了显示一些信息,那么到目前为止,路径中最慢的元素将是人脑读取结果并做出决定。