В процессе хардкорного БДСМ с древним FreeBSD 6.1 столкнулся с такой неприятностью, что порт net-snmp собирался, однако сам сервер при запуске ругался на ошибки в библиотеках. Конечно всё, что мог, пересобрал из исходников по-новой и переименовал все ссылки на библиотеки так, как хотел snmp-сервер. но сервер упорно находил к чему прицепиться снова и снова; хардкор быстро надоел. Решил попробовать встроенный в FreeBSD сервер snmpBegemot snmpd.
Настройка bsnmpd простая. В конфигурационном файле /etc/rc.d/snmpd.config изменяем community, а можно и не изменять. и раскомментируем модуль snmp_hostres. Выглядит файл примерно так:

# $FreeBSD: src/etc/snmpd.config,v 1.9.10.1.2.1 2009/10/25 01:10:29 kensmith Exp $
#
# Example configuration file bsnmpd(1).
#

#
# some common variables
#
location := "Room 200"
contact := "sysmeister@example.com"
system := 1 # FreeBSD
traphost := localhost
trapport := 162

# Change this!
read := "public_comm"
# Uncomment begemotSnmpdCommunityString.0.2 below that sets the community
# string to enable write access.
write := "write_comm"
trap := "trap_comm"

#
# Configuration
#
%snmpd
begemotSnmpdDebugDumpPdus = 2
begemotSnmpdDebugSyslogPri = 7

#
# the read and write communities.
#

# The default value of the community strings is NULL (note, that this is
# different from the empty string). This disables both read and write access.
# To enable read access only the read community string must be . Setting
# the write community string enables both read and write access with that
# string.
#
# Be sure to understand the security implications of SNMPv2 - the community
# strings are readable on the wire!
#
begemotSnmpdCommunityString.0.1 = $(read)
# begemotSnmpdCommunityString.0.2 = $(write)
begemotSnmpdCommunityDisable = 1

# open standard SNMP ports
begemotSnmpdPortStatus.0.0.0.0.161 = 1

# open a unix domain socket
begemotSnmpdLocalPortStatus."/var/run/snmpd.sock" = 1
begemotSnmpdLocalPortType."/var/run/snmpd.sock" = 4

# send traps to the traphost
begemotTrapSinkStatus.[$(traphost)].$(trapport) = 4
begemotTrapSinkVersion.[$(traphost)].$(trapport) = 2
begemotTrapSinkComm.[$(traphost)].$(trapport) = $(trap)

sysContact = $(contact)
sysLocation = $(location)
sysObjectId = 1.3.6.1.4.1.12325.1.1.2.1.$(system)

snmpEnableAuthenTraps = 2

#
# Load MIB-2 module
#
begemotSnmpdModulePath."mibII"<>= "/usr/lib/snmp_mibII.so"

# Force a polling rate the 64-bit interface counters case
# the automatic computation is wrong (which may be the case an interface
# announces the wrong bit rate via its MIB).
#%mibII
#begemotIfForcePoll = 2000

#
# Netgraph module
#
#begemotSnmpdModulePath."netgraph" = "/usr/lib/snmp_netgraph.so"
#
#%netgraph
#begemotNgControlNodeName = "snmpd"

#
# pf(4) module
#
#begemotSnmpdModulePath."pf"= "/usr/lib/snmp_pf.so"

#
# Host resources module
# This requires the mibII module.
#
begemotSnmpdModulePath."hostres" = "/usr/lib/snmp_hostres.so"
#
# Bridge module
# This requires the mibII module.
#
#begemotSnmpdModulePath."bridge" = "/usr/lib/snmp_bridge.so"

Сервер запускается на стандартном порту 161 udp на всех IP-адресах системы. Блокировать доступ приходится в файле /etc/hosts.allow.

snmpd : 127.0.0.1 : allow
snmpd : ALL : deny
ALL : ALL : allow

В файл /etc/rc.conf добавляем строку

bsnmpd_enable="YES"

и запускаем наше горе:

# /etc/rc.d/bsnmpd start

Посмотрев с другого хоста MIB (блокировку в hosts.allow временно убирал), я несколько озадачился. По сравнению с net-snmp очень бедно. По сути дела, есть только стандартный MIB статистики сетевых интерфейсов. Для определения загрузки процессора можно использовать hrProcessorLoad.5, однако фактически это усреднение за последние 30 секунд. Мне сложно представить систему мониторинга. которая бы смогла по умолчанию работать с таким бессмысленным параметром.
В общем у меня осталось негативное впечатление, мне кажется, что bsnmpd фактически бесполезен. Если используется локальный cacti, то статистику проще получать скриптами.
Кстати говоря, после перегрузки системы и пересборки из порта net-snmp сервер каким-то чудом запустился нормально.