我有两台运行FreeBSD变种的服务器:一台是pfSense路由器,一台是FreeNAS 8服务器。 这两个服务器都运行SNMP,我正在使用第三台Cacti服务器收集和绘制他们的信息。
来自pfSense服务器和FreeNAS服务器的SNMP数据不包括内存使用情况,CPU使用情况和平均负载情况。
pfSense服务器的stream量图看起来很好。 FreeNAS服务器的磁盘使用情况报告看起来很漂亮。 我只是没有得到任何数据的内存使用情况,CPU使用率,也没有负载平均。 我知道这两个服务器应该能够提供这些数据,因为在pfSense和freeNAS的networkingpipe理员中,我可以查看图表。 但是我更愿意在Cacti中拥有所有的图表,以便于pipe理。
如何让我的pfSense服务器通过SNMP提供内存使用情况,CPU使用情况和Load Average数据? 我如何让我的FreeNAS服务器通过SNMP提供内存使用,CPU使用率和Load Average数据? 我假设相同的程序将适用于两台服务器。
经过多次研究,我发现问题是什么。 pfSense和FreeNAS都通过FreeBSD begemot SNMP守护进程(bsnmpd)提供SNMP支持。 为了提供内存使用情况,CPU使用情况和Load Average信息,begemot SNMP守护进程需要有一个额外的模块,加载了snmp_ucd.so 。
我发现下面的论坛线程解释加载snmp_ucd.so ,但是它不是我的两个系统上。
为了解决这个问题,我创build了一个虚拟机,并安装了FreeBSD 8.3。 在这个虚拟机内部,我使用FreeBSD Ports系统下载和构build所需的snmp_ucd.so库,使用:
cd /usr/ports/net-mgmt/bsnmp-ucd make all install clean cd /usr/ports/net-mgmt/bsnmptools make all install clean
之后,我使用scp将FreeBSD虚拟机中的/usr/local/lib/snmp_ucd.so复制到我的pfSense服务器以及我的FreeNAS服务器上。
然后,我使用FreeNAS GUI来添加以下辅助参数 :
begemotSnmpdModulePath."ucd" = "/mnt/Garrison/jail/usr/local/lib/snmp_ucd.so"

这将自动添加到FreeNAS服务器上的/etc/snmpd.config ,我能够得到graphics!
pfSense服务器比较棘手,因为它不允许我使用GUI来应用更改,pfSense脚本会自动重build/etc/snmpd.config ,覆盖我的更改。 为了让pfSense工作,我必须编辑/etc/inc/services.inc 。 在阅读之前:
fwrite($fd, $snmpdconf);
我添加了以下内容:
//Josh Additions: Make load avg and CPU usage work: $snmpdconf .= <<<EOD # Josh additions: begemotSnmpdModulePath."ucd" = "/usr/local/lib/snmp_ucd.so" EOD;
然后,禁用和重新启用SNMP应用更改和CPU使用率图现在工作! 这种改变几乎肯定不会在pfSense升级中持续存在,但我找不到一个更简单,更稳定的方式来应用这个改变。