是否有可用于获取系统使用指标的跨平台 C API?
4 回答
不幸的是没有。
C 标准几乎仅限于动态分配、字符串操作、数学和文本 I/O。一旦超越了这一点,您就需要操作系统 API,这些 API 根据定义是特定于操作系统的,而不是跨平台的。
我以前使用过libstatgrab。通过 Cygwin 为您提供一些非常有用的系统统计信息,用于主要的类 Unix 变体和 Windows(据说 - 从未尝试过)。不同操作系统的工作方式如此不同——尤其是在使用指标方面——要获得你想要的东西可能会很困难。即使是听起来像“空闲内存”这样简单的东西,以跨平台的方式进行操作也可能很棘手。也许如果你把事情缩小一点,也许我们能找到一些东西。
根据您要收集的指标,您可能需要考虑查看PCP(绩效副驾驶)。这是一个开源性能框架,最初由 Silicon Graphics 开发,它从大量来源收集和整理大量可能的指标,让您可以从任何地方监控它们。
基本上,PCP 将涉及在您的系统中添加另一个“层”——例如,您可能会监控混合操作系统机器的分布式集群,每台机器都在本地安装了 PCP;一组“代理”收集每台机器上的性能数据,然后您的代码可以根据需要使用 libpcp 收集这些指标。
不知道您的确切使用场景很难说(如果您谈论的是在最终用户的机器上无缝运行的东西,PCP 可能不适合,但如果您想监控您控制的机器,并乐于运行 PCP 服务在他们身上,这是一个很棒的解决方案)。
我们非常高兴地使用 PCP 从 Windows 和 Linux 机器收集指标,以及我们应用程序的内部指标,并集中记录它们,报告它们,监控趋势等。
良好的旧SNMP为客户端和服务器端提供 C 库。如果你喜欢更新的东西,你应该试试Prometheus。他们有可供使用的Node Exporter和适用于包括C在内的多种语言的客户端库。
另请注意,PCP(在 Cowan 的回答中提到)自第 4 版起就支持 OpenMetrics 标准,因此如果您决定使用 Prometheus 作为扩展 PCP 的度量数据收集器或编写自定义 Prometheus 客户端,那么 SNMP 也是 Prometheus 通过SNMP支持的更好的解决方案Exporter,但由于它处理 MIB 和身份验证的方式,设置起来更加困难。