我有两台运行 FreeBSD 变体的服务器:一台是 pfSense 路由器,另一台是 FreeNAS 8 服务器。这两台服务器都运行 SNMP,我正在使用第三台 Cacti 服务器收集和绘制它们的信息。
pfSense 服务器和 FreeNAS 服务器的 SNMP 数据不包括内存使用情况、CPU 使用情况和平均负载。
pfSense 服务器的流量图表看起来不错。FreeNAS 服务器的磁盘使用情况报告看起来很漂亮。我只是没有得到任何有关内存使用情况、CPU 使用情况或平均负载的数据。我知道这两个服务器都应该能够提供这些数据,因为在 pfSense 和 freeNAS Web 管理员中我可以查看图表。但我希望在 Cacti 中拥有所有图表,以便于管理。
如何让我的 pfSense 服务器通过 SNMP 提供内存使用情况、CPU 使用情况和平均负载数据?如何让我的 FreeNAS 服务器通过 SNMP 提供内存使用情况、CPU 使用情况和平均负载数据?我假设相同的程序适用于这两台服务器。
答案1
经过大量研究,我发现了问题所在。pfSense 和 FreeNAS 都通过以下方式提供 SNMP 支持:FreeBSD begemot SNMP 守护进程(bsnmpd). 为了提供内存使用情况、CPU 使用情况和平均负载信息,begemot SNMP 守护进程需要snmp_ucd.so
加载附加模块。
我发现以下论坛主题解释加载snmp_ucd.so
,但是它在我的两个系统上不存在。
为了解决这个问题,我创建了一个虚拟机并在其上安装了 FreeBSD 8.3。在这个虚拟机中,我使用 FreeBSD Ports 系统下载并构建所需的snmp_ucd.so
库:
cd /usr/ports/net-mgmt/bsnmp-ucd
make all install clean
cd /usr/ports/net-mgmt/bsnmptools
make all install clean
之后,我经常从 FreeBSD 虚拟机scp
复制/usr/local/lib/snmp_ucd.so
到我的 pfSense 服务器和 FreeNAS 服务器。
然后我使用 FreeNAS GUI 添加以下内容辅助参数:
begemotSnmpdModulePath."ucd" = "/mnt/Garrison/jail/usr/local/lib/snmp_ucd.so"
这会自动将该行添加到/etc/snmpd.config
FreeNAS 服务器上,这样我就能够获得图表了!
pfSense 服务器更棘手,因为它不允许我使用 GUI 应用更改,并且 pfSense 脚本会自动重建/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 升级后持续存在,但我找不到更简单、更稳定的方法来应用这种变化。