SNMP 如何在 Linux 上获取 CPU 使用率?

niv*_*vek 3 linux snmp

用于获取 Linux 机器的 CPU 使用率的 SNMP 调用最终是否只是读取 /proc/stat 文件?

HBr*_*ijn 9

叹息1。幸运的是你不需要/proc/stat

man 5 proc

/proc/loadavg

此文件中的前三个字段是平均负载数字,它给出了运行队列(状态 R)或等待磁盘 I/O(状态 D)中的作业数平均超过 1、5 和 15 分钟。 它们与 uptime(1) 和其他程序给出的平均负载数相同。 第四个字段由用斜杠 (/) 分隔的两个数字组成。其中第一个是当前可运行的内核调度实体(进程、线程)的数量。斜线后面的值是系统上当前存在的内核调度实体的数量。第五个字段是最近在系统上创建的进程的 PID。

但是您可能需要查阅http://www.net-snmp.org/的来源以确定它们实际使用的内容:

net-snmp-5.7.3/agent/mibgroup/ucd-snmp/loadave.c :

#elif defined(linux)
{
    FILE           *in = fopen("/proc/loadavg", "r");
    if (!in) {
        NETSNMP_LOGONCE((LOG_ERR, "snmpd: cannot open /proc/loadavg\n"));
        return (-1);
    }
Run Code Online (Sandbox Code Playgroud)

脚注 1. 有时您真的无法选择与谁合作。

回应你的评论,再次叹息。由于只有内核知道它实际在做什么,因此任何监控都需要以一种或另一种方式与内核交互以检索此类信息。与内核交互的通用接口是/proc/虽然其他方法也可以设计(auditdkerneltap想到)。但那些根本算不上“更轻量级”......

监测总会有一定程度的观察者效应和影响。

唯一的零影响方法是根本不进行任何监控。然后任何有寻呼机职责的人都可以声称,由于没有观察到警报,系统也没有关闭。
我会称之为胜利!