Просматривая мою любимую ветку портов /usr/ports/net-mgmt внезапно наткнулся на порты-расширения для «бегемот»-snmp, заинтересовало расширение bsnmp-jails. Если верить мануалу, оно добавляет новый MIB с систему, в которм доступны следующие OID:

  • jails.jailCount — количество запущенных в системе jail;
  • jails.jailTable.jailEntry.jailIndex.X — индекс jail — номер по порядку загрузки;
  • jails.jailTable.jailEntry.jailHost.X — имя хоста jail;
  • jails.jailTable.jailEntry.jailInOctets.X — количество байт, принятых jail по сети (собирается с помощью libpcap на сетевых интерфейсах), ВАЖНО, что для корректного мониторинга IP-адреса хостов jail должны быть написаны алиасом на физическом интерфейсе, через который основная машина общается с сетью, при использовании виртуального loop-back интерфейса (например lo1), получите в статистике нули;
  • jails.jailTable.jailEntry.jailInPackets.X — количество пакетов, принятых jail по сети;
  • jails.jailTable.jailEntry.jailOutOctets.X — количество байт, отправленных jail в сеть;
  • jails.jailTable.jailEntry.jailOutPackets.X — количество пакетов, отправленных jail в сеть;
  • jails.jailTable.jailEntry.jailProcesses.X — количество процессов, запущенных в jail;
  • jails.jailTable.jailEntry.jailThreads.X — количество потоков, запущенных в jail;
  • jails.jailTable.jailEntry.jailCpuTime.X — использование jail процессорного времени в отсчетах SNMP;
  • jails.jailTable.jailEntry.jailDiskSpace.X — дисковое пространство, занимаемое jail;
  • jails.jailTable.jailEntry.jailDiskFiles.X — количество файлов (inodes), используемых jail;
  • jails.jailNetworkFilter — фильтр трафика в стиле tcpdump, учитывается трафик, удовлетворяющий фильру;
  • jails.jailRefreshInterval — интервал обновления информации о процессах и состоянии jail;
  • jails.jailMeasureInterval — интервал обновления информации о дисковом пространстве и файлах jail

Сразу же предупреждаю, на нормальную работу статистики использования дискового пространства не надейтесь, при попытке мониторинга на хосте с количеством jail порядка 300 процесс bsnmpd плавно перетекает в процесс jail-measure, который слушает 161 порт udp. К счастью с этим можно бороться, путем удаления файла /usr/local/libexec/jail-measure.

В конфигурационный файл bsnmpd /etc/snmpd.config добавляем строки

begemotSnmpdModulePath."jails" = "/usr/local/lib/snmp_jails.so"
%jails
jailNetworkFilter = "net 0.0.0.0/0"
jailMeasureInterval = 7200

Запускаем bsnmpd и проверяем работу :

# snmpwalk -Os -c public -v 1 192.168.0.3 .1.3.6.1.4.1.12325.1.1111 |less
enterprises.12325.1.1111.1.0 = INTEGER: 313
enterprises.12325.1.1111.2.1.0.1 = INTEGER: 1
enterprises.12325.1.1111.2.1.0.2 = INTEGER: 2

Вот так вот, целых 313 машин у меня виртуальных, да-с.

Переходим ко второй части «марлезонского балета» — настройке хранения данных и их визуализации на основе нашего любимого cacti. Создаем шаблон jail.xml:

Get JAIL stats
Queries a host for a list of monitorable jails
numeric
jailHost
.1.3.6.1.4.1.12325.1.1111.2.1.0

Index
walk
<source />value
input
.1.3.6.1.4.1.12325.1.1111.2.1.0

Hostname
walk
<source />value
input
.1.3.6.1.4.1.12325.1.1111.2.1.1

InOctets
walk
<source />value
output
.1.3.6.1.4.1.12325.1.1111.2.1.10

InPackets
walk
<source />value
output
.1.3.6.1.4.1.12325.1.1111.2.1.11

OutOctets
walk
<source />value
output
.1.3.6.1.4.1.12325.1.1111.2.1.12

OutPackets
walk
<source />value
output
.1.3.6.1.4.1.12325.1.1111.2.1.13

Processes
walk
<source />value
output
.1.3.6.1.4.1.12325.1.1111.2.1.20

Threads
walk
<source />value
output
.1.3.6.1.4.1.12325.1.1111.2.1.21

CpuTime
walk
<source />value
output
.1.3.6.1.4.1.12325.1.1111.2.1.25

Скачиваем шаблончик хоста (для версии 0.8.7g) и импортируем его, если всё нормально, то наблюдаем ответ cacti:

Cacti has imported the following items:

CDEF
[success] Turn Bytes into Bits [update]

GPRINT Preset
[success] Normal [update]

Data Input Method
[success] Get SNMP Data (Indexed) [update]

Data Template
[success] Interface - Traffic [update]
[success] Interface - Unicast Packets [update]
[success] Jail - CPU Usage [new]
[success] Jail - Processes [new]
[success] Jail - Threads [new]

Graph Template
[success] Interface - Traffic (bits/sec) [update]
[success] Interface - Unicast Packets [update]
[success] Jail - CPU Usage [new]
[success] Jail - Processes [new]
[success] Jail -Threads [new]

Data Query
[success] SNMP - Jail [new]

Host Template
[success] Jail [new]

В шаблон я добавил графики загрузки сети (в байтах/сек и пакетах/сек), количества процессов, потоков и загрузки процессора для jail. Загрузка процессора автоматически получилась в единицах процентов от нагрузки каждого ядра. У меня получается примерно 1,5%; на шестиядерном процессоре 313 jail загружают систему примерно на 75%, что соответствует общесистемной статистике. Так что как-то так — наслаждайтесь новой порцией графиков.