Так уж случилось, что на одном из серверов порт net-snmp никак не хотел собираться, ругаясь на ошибки компиляции. Тратить время, разбираться и устранять причину не очень хотелось, поэтому решил воспользоваться возможностями штатного агента SNMP - bsnmpd.
bsnmpd (сокращено от Begemot SNMPD) - это минимальный агент SNMP, предусматривающий возможность расширения с помощью внешних модулей.
Файл конфигурации - /etc/snmpd.config, который довольно хорошо прокомментирован. После правки "под себя", получился следующий конфиг (комментарии удалены):
location := "Location 1" contact := "contact [at] example [dot] com" system := 1 # FreeBSD traphost := localhost trapport := 162 read := "read_community_here" write := "write_community_here" trap := "trap_community_here" NoAuthProtocol := 1.3.6.1.6.3.10.1.1.1 HMACMD5AuthProtocol := 1.3.6.1.6.3.10.1.1.2 HMACSHAAuthProtocol := 1.3.6.1.6.3.10.1.1.3 NoPrivProtocol := 1.3.6.1.6.3.10.1.2.1 DESPrivProtocol := 1.3.6.1.6.3.10.1.2.2 AesCfb128Protocol := 1.3.6.1.6.3.10.1.2.4 securityModelAny := 0 securityModelSNMPv1 := 1 securityModelSNMPv2c := 2 securityModelUSM := 3 MPmodelSNMPv1 := 0 MPmodelSNMPv2c := 1 MPmodelSNMPv3 := 3 noAuthNoPriv := 1 authNoPriv := 2 authPriv := 3 %snmpd begemotSnmpdDebugDumpPdus = 2 begemotSnmpdDebugSyslogPri = 7 begemotSnmpdCommunityString.0.1 = $(read) begemotSnmpdCommunityDisable = 1 begemotSnmpdPortStatus.0.0.0.0.161 = 1 begemotSnmpdLocalPortStatus."/var/run/snmpd.sock" = 1 begemotSnmpdLocalPortType."/var/run/snmpd.sock" = 4 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 begemotSnmpdModulePath."mibII" = "/usr/lib/snmp_mibII.so" begemotSnmpdModulePath."hostres" = "/usr/lib/snmp_hostres.so" begemotSnmpdModulePath."bridge" = "/usr/lib/snmp_bridge.so"  | 
Конфигурационный файл готов... Можно запускать сервис. Однако, тем кто не закрыл SNMP в файрволе, советую внести список разрешенных хостов в hosts.allow. Пример:
| snmpd : 127.0.0.1 : allow snmpd : ALL : deny  | 
Добавим запуск bsnmpd в rc.conf:
| # echo '# Begemot SNMPD' >> /etc/rc.conf # echo 'bsnmpd_enable="YES"' >> /etc/rc.conf  | 
Запускаем сервис и проверяем, запустился ли демон:
| # sh /etc/rc.d/bsnmpd start Starting bsnmpd. # ps -ax | grep snmpd | grep -v grep 7842 - Ss 0:00,08 /usr/sbin/bsnmpd -p /var/run/snmpd.pid  | 
Процесс запустился. Теперь можно снимать статистику работы сервера по SNMP, например, используя Cacti [1].
Итак, как уже оговаривалось вначале, расширение функциональных возможностей bsnmpd возможно с помощью внешних модулей. На момент написания статьи вместе с bsnmpd поставлялись следующие модули (их можно сразу подключать в конфигурационном файле без дополнительных манипуляций):
- bridge - доступ к функциям и ресурсам сетевого моста. Более подробно: man snmp_bridge.
 - hostres - реализация HOST-RESOURCES-MIB, описаных в RFC 2790. Более подробно: man snmp_hostres.
 - mibII - доступ к функциям и ресурсам сетевой подсистемы. Более подробно: man snmp_mibII.
 - netgraph - доступ к функциям и ресурсам Netgraph. Более подробно: man snmp_netgraph.
 - pf - доступ к функциям и ресурсам пакетного фильтра PF.
 - wlan - доступ к функциям и ресурсам беспроводной сети. Более подробно: man snmp_wlan.
 
Дополнительные модули можно найти в портах. Посмотрим, что на сегодня доступно в портах:
| 
 # ls /usr/ports/net-mgmt/ | grep bsnmp  | 
Теперь более детально:
- bsnmp-jails - модуль для bsnmpd, который позволяет получать статистику по Jail: сетевой трафик, использование процессорного времени, процессов, количество потоков и дисковая утилизация.
 - bsnmp-regex - модуль для bsnmpd, который позволяет создавать счетчики из лог-файлов, вывода программ или других текстовых данных. Счетчики используют регулярные выражения для подсчета количества совпадений или для получения конкретных данных. Полученые данные можно отобразить инструментами SNMP.
 - bsnmp-ucd - модуль для bsnmpd, который позволяет получать доступ к памяти, load average, использование CPU и другой системной статистике. Является частичной реализацией UCD-SNMP-MIB.
 - bsnmptools - инструменты для работы с SNMP, аналоги snmpget и snmpwalk.
 
Процесс установки и настройки модулей не рассматриваю - это уже тема для отдельной статьи.
