Так уж случилось, что на одном из серверов порт 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.
Процесс установки и настройки модулей не рассматриваю - это уже тема для отдельной статьи.