15 авг. 2013 г.

Windows 2008 R2 + Zabbix + SNMP

После обновления одного из серверов до Windows 2008 R2 в системе мониторинга (Zabbix) отвалилась статистика входящего/исходящего трафика по сетевым интерфейсам. Так как товарищ, который следит за заббиксом, в отпуске, пришлось ковырять проблему самому. Оказалось, что заббикс тащит информацию об этой паре параметров по SNMP. Так как в интерфейсе настройки узлов напротив заданного сервера иконка snmp подсвечена красным, значит, там меня никто не ждет, первый шаг понятен - нужна запущенная служба SNMP Service на win-сервере.
Установка: 
Открываем Server Manager - Features - Add features, ставим галку на пункте SNMP Services, жмем Install. Перезагрузки не требуется.
Далее следует настроить свежеустановленную службу. Для этого в том же Server Manager-е открываем Services, находим SNMP Service (уже должна быть в состоянии Started), и в ее свойствах открываем вкладку Security. В ней в поле Accepted community names добавляем имя public с правами READ ONLY. В этой же вкладке ниже перечисляем все хосты, с которых следует ожидать snmp-запросов (как минимум, следует внести IP сервера мониторинга). Перезапуска службы не требуется, настройки применяются сразу.
После этих манипуляций заббикс должен увидеть возможность получения информации по SNMP (соответствующая иконка должна позеленеть). Однако описанные элементы данных перешли в состояние "Не поддерживается" - после апгрейда ОС на сервере сменились OID-ы, которые отдают нужную заббиксу информацию. Теперь нужно найти их актуальные значения.
Для запроса данных по SNMP потребуется следующий софт - net-snmp. Это пакет утилит для работы с данными по протоколу SNMP, имеются сборки как для Windows, так и для всяких разных линуксов. Запрашивать информацию о доступных OID-ах будем с помощью snmpwalk.exe.
Наша задача - определить OID сетевого интерфейса, данные о трафике через который мы хотим получить. Для этого запросим все данные, содержащие OID ifEntry, и сделаем выборку по названию интерфейса (в моем случае это две Broadcom-овские сетевухи, объединенные в team-интерфейс "BASP Virtual Adapter"):
PS C:\usr> .\bin\snmpwalk.exe -On -v 2c -c public server.example.org ifEntry | Select-String BASP

.1.3.6.1.2.1.2.2.1.2.17 = STRING: BASP Virtual Adapter
.1.3.6.1.2.1.2.2.1.2.21 = STRING: BASP Virtual Adapter-QoS Packet Scheduler-0000
.1.3.6.1.2.1.2.2.1.2.22 = STRING: BASP Virtual Adapter-WFP LightWeight Filter-0000
Нас интересует выделенная цифра. Зная ее, можно составить конкретный запрос как по входящему трафику:
PS C:\usr> .\bin\snmpget.exe -On -v 2c -c public oik1-kirv IF-MIB::ifInOctets.17
.1.3.6.1.2.1.2.2.1.10.17 = Counter32: 2510490472
 так и по исходящему:

PS C:\usr> .\bin\snmpget.exe -On -v 2c -c public oik1-kirv IF-MIB::ifOutOctets.17
.1.3.6.1.2.1.2.2.1.16.17 = Counter32: 1543992988

Теперь осталось исправить значения OID-ов в нужных элементах, подставив новые значения, и проблема решена.