Begemot SNMPD - настройка штатного агента SNMP

  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:b60ee02d7eaf7af539dd1724ff7eb9ab' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p class=\"rtejustify\">Так уж случилось, что на одном из серверов порт <strong>net-snmp</strong> никак не хотел собираться, ругаясь на ошибки компиляции. Тратить время, разбираться и устранять причину не очень хотелось, поэтому решил воспользоваться возможностями штатного агента <strong>SNMP</strong> - <strong>bsnmpd</strong>.</p>\n<p class=\"rtejustify\"><strong>bsnmpd</strong> (сокращено от <strong>Begemot SNMPD</strong>) - это минимальный агент <strong>SNMP</strong>, предусматривающий возможность расширения с помощью внешних модулей.</p>\n<p class=\"rtejustify\">Файл конфигурации - <strong>/etc/snmpd.config</strong>, который довольно хорошо прокомментирован. После правки &quot;под себя&quot;, получился следующий конфиг (комментарии удалены):</p>\n<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:100%\">\n<tbody>\n<tr>\n<td style=\"background-color:rgb(51, 51, 51)\">\n<pre>\n<span style=\"color:#00FFFF\"><strong>location := &quot;</strong></span><span style=\"color:#FF0000\"><strong>Location 1</strong></span><span style=\"color:#00FFFF\"><strong>&quot;\ncontact := &quot;</strong></span><span style=\"color:#FF0000\"><strong><span class=\"spamspan\"><span class=\"u\">contact</span> [at] <span class=\"d\">example [dot] com</span></span></strong></span><span style=\"color:#00FFFF\"><strong>&quot;\nsystem := 1 # FreeBSD\ntraphost := localhost\ntrapport := 162\nread := &quot;</strong></span><span style=\"color:#FF0000\"><strong>read_community_here</strong></span><span style=\"color:#00FFFF\"><strong>&quot;\nwrite := &quot;</strong></span><span style=\"color:#FF0000\"><strong>write_community_here</strong></span><span style=\"color:#00FFFF\"><strong>&quot;\ntrap := &quot;</strong></span><span style=\"color:#FF0000\"><strong>trap_community_here</strong></span><span style=\"color:#00FFFF\"><strong>&quot;\nNoAuthProtocol := 1.3.6.1.6.3.10.1.1.1\nHMACMD5AuthProtocol := 1.3.6.1.6.3.10.1.1.2\nHMACSHAAuthProtocol := 1.3.6.1.6.3.10.1.1.3\nNoPrivProtocol := 1.3.6.1.6.3.10.1.2.1\nDESPrivProtocol := 1.3.6.1.6.3.10.1.2.2\nAesCfb128Protocol := 1.3.6.1.6.3.10.1.2.4\nsecurityModelAny := 0\nsecurityModelSNMPv1 := 1\nsecurityModelSNMPv2c := 2\nsecurityModelUSM := 3\nMPmodelSNMPv1 := 0\nMPmodelSNMPv2c := 1\nMPmodelSNMPv3 := 3\nnoAuthNoPriv := 1\nauthNoPriv := 2\nauthPriv := 3\n%snmpd\nbegemotSnmpdDebugDumpPdus = 2\nbegemotSnmpdDebugSyslogPri = 7\nbegemotSnmpdCommunityString.0.1 = $(read)\nbegemotSnmpdCommunityDisable = 1\nbegemotSnmpdPortStatus.0.0.0.0.161 = 1\nbegemotSnmpdLocalPortStatus.&quot;/var/run/snmpd.sock&quot; = 1\nbegemotSnmpdLocalPortType.&quot;/var/run/snmpd.sock&quot; = 4\nbegemotTrapSinkStatus.[$(traphost)].$(trapport) = 4\nbegemotTrapSinkVersion.[$(traphost)].$(trapport) = 2\nbegemotTrapSinkComm.[$(traphost)].$(trapport) = $(trap)\nsysContact = $(contact)\nsysLocation = $(location)\nsysObjectId = 1.3.6.1.4.1.12325.1.1.2.1.$(system)\nsnmpEnableAuthenTraps = 2\nbegemotSnmpdModulePath.&quot;mibII&quot; = &quot;/usr/lib/snmp_mibII.so&quot;\nbegemotSnmpdModulePath.&quot;hostres&quot; = &quot;/usr/lib/snmp_hostres.so&quot;\nbegemotSnmpdModulePath.&quot;bridge&quot; = &quot;/usr/lib/snmp_bridge.so&quot;</strong></span></pre></td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">Конфигурационный файл готов... Можно запускать сервис. Однако, тем кто не закрыл <strong>SNMP </strong>в файрволе, советую внести список разрешенных хостов в <strong>hosts.allow</strong>. Пример:</p>\n<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:100%\">\n<tbody>\n<tr>\n<td>snmpd : 127.0.0.1 : allow<br />\n snmpd : ALL : deny</td>\n</tr>\n</tbody>\n</table>\n<p>Добавим запуск <strong>bsnmpd</strong> в <strong>rc.conf</strong>:</p>\n<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:100%\">\n<tbody>\n<tr>\n<td># <strong>echo &#39;# Begemot SNMPD&#39; &gt;&gt; /etc/rc.conf</strong><br />\n # <strong>echo &#39;bsnmpd_enable=&quot;YES&quot;&#39; &gt;&gt; /etc/rc.conf</strong></td>\n</tr>\n</tbody>\n</table>\n<p>Запускаем сервис и проверяем, запустился ли демон:</p>\n<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:100%\">\n<tbody>\n<tr>\n<td>#<strong> sh /etc/rc.d/bsnmpd start</strong><br />\n Starting bsnmpd.<br />\n # <strong>ps -ax | grep snmpd | grep -v grep</strong><br />\n &nbsp;7842&nbsp; -&nbsp; Ss&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0:00,08 /usr/sbin/bsnmpd -p /var/run/snmpd.pid</td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">Процесс запустился. Теперь можно снимать статистику работы сервера по <strong>SNMP</strong>, например, используя <strong><a href=\"http://muff.kiev.ua/content/cacti-snimaem-statistiku-ustroistv-po-snmp\">Cacti</a></strong>.</p>\n<p class=\"rtejustify\">Итак, как уже оговаривалось вначале, расширение функциональных возможностей <strong>bsnmpd</strong> возможно с помощью внешних модулей. На момент написания статьи вместе с&nbsp; <strong>bsnmpd</strong> поставлялись следующие модули (их можно сразу подключать в конфигурационном файле без дополнительных манипуляций):</p>\n<ul>\n<li class=\"rtejustify\"><em><strong>bridge</strong></em> - доступ к функциям и ресурсам сетевого моста. Более подробно: <strong>man snmp_bridge</strong>.</li>\n<li class=\"rtejustify\"><em><strong>hostres</strong></em> - реализация <strong>HOST-RESOURCES-MIB</strong>, описаных в <strong>RFC 2790</strong>. Более подробно: <strong>man snmp_hostres</strong>.</li>\n<li class=\"rtejustify\"><em><strong>mibII</strong></em> - доступ к функциям и ресурсам сетевой подсистемы. Более подробно: <strong>man snmp_mibII</strong>.</li>\n<li class=\"rtejustify\"><em><strong>netgraph</strong></em> - доступ к функциям и ресурсам Netgraph. Более подробно: <strong>man snmp_netgraph</strong>.</li>\n<li class=\"rtejustify\"><em><strong>pf</strong></em> - доступ к функциям и ресурсам пакетного фильтра <strong>PF</strong>.</li>\n<li class=\"rtejustify\"><em><strong>wlan</strong></em> - доступ к функциям и ресурсам беспроводной сети. Более подробно: <strong>man snmp_wlan</strong>.</li>\n</ul>\n<p class=\"rtejustify\">Дополнительные модули можно найти в портах. Посмотрим, что на сегодня доступно в портах:</p>\n<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:100%\">\n<tbody>\n<tr>\n<td>\n<p># <strong>ls /usr/ports/net-mgmt/ | grep bsnmp</strong><br />\n drwxr-xr-x&nbsp;&nbsp;&nbsp; 2 root&nbsp; wheel&nbsp;&nbsp; 512 17 мар 16:34 <span style=\"color:#FF0000\">bsnmp-jails</span><br />\n drwxr-xr-x&nbsp;&nbsp;&nbsp; 2 root&nbsp; wheel&nbsp;&nbsp; 512 17 мар 16:34 <span style=\"color:#FF0000\">bsnmp-regex</span><br />\n drwxr-xr-x&nbsp;&nbsp;&nbsp; 2 root&nbsp; wheel&nbsp;&nbsp; 512 17 мар 16:34 <span style=\"color:#FF0000\">bsnmp-ucd</span><br />\n drwxr-xr-x&nbsp;&nbsp;&nbsp; 2 root&nbsp; wheel&nbsp;&nbsp; 512 17 мар 16:34 <span style=\"color:#FF0000\">bsnmptools</span></p>\n</td>\n</tr>\n</tbody>\n</table>\n<p>Теперь более детально:</p>\n<ul>\n<li class=\"rtejustify\"><strong>bsnmp-jails</strong> - модуль для <strong>bsnmpd</strong>, который позволяет получать статистику по <strong>Jail</strong>: сетевой трафик, использование процессорного времени, процессов, количество потоков и дисковая утилизация.</li>\n<li class=\"rtejustify\"><strong>bsnmp-regex</strong> - модуль для bsnmpd, который позволяет создавать счетчики из лог-файлов, вывода программ или других текстовых данных. Счетчики используют регулярные выражения для подсчета количества совпадений или для получения конкретных данных. Полученые данные можно отобразить инструментами <strong>SNMP</strong>.</li>\n<li class=\"rtejustify\"><strong>bsnmp-ucd</strong> - модуль для <strong>bsnmpd</strong>, который позволяет получать доступ к памяти, <strong>load average</strong>, использование <strong>CPU</strong> и другой системной статистике. Является частичной реализацией <strong>UCD-SNMP-MIB</strong>.</li>\n<li class=\"rtejustify\"><strong>bsnmptools</strong> - инструменты для работы с <strong>SNMP</strong>, аналоги <strong>snmpget</strong> и <strong>snmpwalk</strong>.</li>\n</ul>\n<p class=\"rtejustify\">Процесс установки и настройки модулей не рассматриваю - это уже тема для отдельной статьи.</p>\n', created = 1767618209, expire = 1767704609, headers = '', serialized = 0 WHERE cid = '2:b60ee02d7eaf7af539dd1724ff7eb9ab' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:07243fc0252056071eaa62af8c18d662' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p class=\"rtecenter\"><a class=\"thickbox\" href=\"/files/imagepicker/1/wake_up_ua.png\"><img alt=\"Вставай, Україно!\" class=\"imgp_img\" src=\"/files/imagepicker/1/thumbs/wake_up_ua.png\" style=\"height:200px; width:150px\" /></a></p>\n', created = 1767618209, expire = 1767704609, headers = '', serialized = 0 WHERE cid = '2:07243fc0252056071eaa62af8c18d662' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '3:cc913d232116f0426090404133377d88' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:d9a86123bfcbc57878743027b584400b' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p class=\"rtecenter\"><a href=\"http://muff.kiev.ua/rss.xml\"><img alt=\"RSS\" width=\"160\" height=\"60\" src=\"http://muff.kiev.ua/files/muf-rss.png\" /></a></p>\n', created = 1767618209, expire = 1767704609, headers = '', serialized = 0 WHERE cid = '2:d9a86123bfcbc57878743027b584400b' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '3:39649256b636e3d5ded656bc52bd8c01' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
Версия для печатиОтправить другуPDF version

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

Итак, как уже оговаривалось вначале, расширение функциональных возможностей 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
drwxr-xr-x    2 root  wheel   512 17 мар 16:34 bsnmp-jails
drwxr-xr-x    2 root  wheel   512 17 мар 16:34 bsnmp-regex
drwxr-xr-x    2 root  wheel   512 17 мар 16:34 bsnmp-ucd
drwxr-xr-x    2 root  wheel   512 17 мар 16:34 bsnmptools

Теперь более детально:

  • bsnmp-jails - модуль для bsnmpd, который позволяет получать статистику по Jail: сетевой трафик, использование процессорного времени, процессов, количество потоков и дисковая утилизация.
  • bsnmp-regex - модуль для bsnmpd, который позволяет создавать счетчики из лог-файлов, вывода программ или других текстовых данных. Счетчики используют регулярные выражения для подсчета количества совпадений или для получения конкретных данных. Полученые данные можно отобразить инструментами SNMP.
  • bsnmp-ucd - модуль для bsnmpd, который позволяет получать доступ к памяти, load average, использование CPU и другой системной статистике. Является частичной реализацией UCD-SNMP-MIB.
  • bsnmptools - инструменты для работы с SNMP, аналоги snmpget и snmpwalk.

Процесс установки и настройки модулей не рассматриваю - это уже тема для отдельной статьи.

Ваша оценка: Нет Средняя: 4.2 (6 голосов)

Вставай, Україно!

Литература

У вас в инструкции написано: "Hажать . Hо нигде не сказано, когда отпустить!"