Мониторинг Microsoft Windows на базе Zabbix
03.09.2019 Update
Кстати новые шаблоны уже доступны
Сегодня мы расскажем о том, как мы ведем мониторинг Windows систем (в скором времени планируем такой же обзор про Linux и как обычно с доступным шаблоном).
Наш путь начался, как часто бывает, со штатного шаблона Zabbix «Template OS Windows Active» для мониторинга Windows-клиентов (рабочие станции и сервера), но ровно через неделю активного использования поняли, в нем много чего не хватает.
Так мы и начали его кардинальную переделку, часть оставили и добавили много чего нового.
Общая концепция
1. Отдельные настройки шаблона в файле os_windows_active.conf
2. Отдельный скрипт PowerShell — os_windows_active.ps1 для работы шаблона, при этом скрипт должен быть универсальным и работать на большинстве операционных систем с минимумом внешних зависимостей.
3. Шаблон должен быть не зависимым от языка операционной системы, поэтому лучше всего снимать данные со счётчиков используя либо WMI, либо скрипт + zabbix trapper.
4. Шаблон должен давать максимум полезной информации по своему назначению, поэтому он объединяется как мониторинг физических параметров оборудования, так и операционной системы и даже инвентаризации.
Основные возможности
- логических дисков;
- физических дисков;
- сетевых адаптеров;
- системных сервисов.
Triggers
Мы включили и оттестировали, только самые критичные триггеры, которые реально показывают проблемы. Но добавили и некоторых других, для более детальной информации.
- Продолжительная нагрузка на процессор в течении часа.
Physical Memory
- Объём доступной физической памяти меньше заданного лимита;
- Объём Commited памяти больше физической.
Physical disk
- Скорость доступа к дискам на чтение и запись.
Logical disk
- Критический объём дисков с возможностью прогноза на 12 часов.
Network
- Смена MAC-адреса сетевого адаптера (для виртуальных машин очень актуально, если не поставили статический MAC-адрес);
- Отключение Link-а сетевого адаптера;
- Отброшенные пакеты на сетевом адаптере.
Operation system
- Дата последней установки обновлений Windows
- Изменение статуса Firewall
Инвентаризация
Так как клиенты имеют разные компьютеры, нам требуется получать краткую инвентаризацию по ним, поэтому мы добавили в шаблон сбор данных о компьютере, и этими данными заполняем стандартные поля Zabbix Inventory:
- OS
- tag
- Chassis
- Desktop
- Model
- HW architecture
- Vendor
- Host networks
Графики
Мы сделали несколько полезных общих графиков, чтобы наглядно видеть общее состояние клиента и отдельных его подсистем.
OS overview performance
OS detail performance
Где скачать
Данный шаблон и скрипт вы можете бесплатно скачать с GitHub, а также в Zabbix Share.
Наши шаблоны мы продолжим выкладываем в открытый доступ в наш репозитарий Zabbix.
Системное администрирование серверов и DevOps
Сайт ARNY.RU
Zabbix SNMP — после того, как настройка SNMP на сетевом устройстве CISCO изучена, пора применить этот опыт на практике. Предварительные данные были приведены в записи Настройка SNMP.
Предисловие
Производить мониторинг SNMP нужно в какой-то специализированной сетевой среде. На текущий момент без сомнения самой популярной системой для мониторинга является Zabbix.
Есть и другие, например OpenView от HP, NOC Project так далее, почему именно Zabbix? Причин много — простота установки и настройки, хорошая документация на русском и английском языках, свободно распространяемое ПО, назначение — в первую очередь это именно система мониторинга, а не хелп-деск или какое-то другое многофункциональное ПО со встроенной системой мониторинга «в нагрузку» или же в виде отдельного модуля. Мониторинг сетевых устройств — основной профиль для Zabbix.
Для мониторинга будем использовать маршрутизатор CISCO c3725 в среде GNS3, связанный через Облако GNS3 с виртуальной машиной (VM) Hyper-V, на которой запущен Zabbix:
- IP маршрутизатора F0/0 192.168.137.2/24;
- IP VM 192.168.137.40/24.
Настройка маршрутизатора
Для простоты будем настраивать SNMP версии 2c:
Почему, а как же новая и безопасная версия 3? В теории — это одно, на практике — другое. Не ошибусь, если скажу, что в 90% компаний нет необходимости такого высокого уровня защиты для пакетов SNMP. Из-за этого, а также из-за простоты настройки на практике преимущественное распространение получила версия 2c. Кому интересна именно версия 3 — настройка (безотносительно Zabbix) довольно подробно была рассмотрена в в записи Настройка SNMP.
Основы Zabbix
Для начала рекомендую посмотреть довольно-таки неплохое обзорное видео по Zabbix (если не обращать внимание на вещи вроде «сэсэха агент» и другие ляпы). Рассматривается уже новый Zabbix 3.0, то есть визуально такой же, какой будет использоваться в данной записи. Смотреть можно здесь. Установку лучше пропустить, так как используем готовое решение и смотреть тогда нужно с
12.30. Основные моменты и понятия рассказаны.
Установка
Версия готового решения Zabbix | Версия Ubuntu |
3.2.0 | 14.04.3 |
Всё преднастроено, а установка в VM занимает 15 минут. Несмотря на то, что это решение построено на Ubuntu 14.04, поддержки виртуальных машин 2 поколения для Hyper-V нет. Не так страшно.
Если что-то не нравится, данную установку всегда можно быстро донастроить на свой вкус. Быстро обновить:
В общем и целом — удобно использовать именно это решение.
Настройка CLI
Прежде чем производить настройку в Веб-интерфейсе нужно потратить какое-то время и найти нужные OIDs для мониторинга.
Подключаемся через SSH к VM, реквизиты входа (напоминаю, что действия от root, если такое действие нужно — выполняем через sudo):
Первый вариант — можно использовать те OIDs, которые указаны в документации Zibbix.
Тут нужно также научиться пользоваться очень полезной командой snmpwalk. Команда непосредственно позволяет выбирать OIDs из наблюдаемого сетевого устройства:
Видно, что последняя цифра OID — это номер интерфейса (понадобится дальше).
Второй вариант — используем snmpwalk, а также значения, по которым можно делать отбор:
Третий вариант — можно скопировать весь вывод команды snmpwalk:
То есть копируем все OIDs со своими последними значениями в файл, забираем его через WinSCP и потом изучаем, допустим, в Notepad++.
Четвёртый вариант — использовать специальное ПО для чтения OIDs с устройства, например OiDViEW (есть бесплатная версия: //www.oidview.com/oidview.html ).
Наверняка есть ещё варианты, рассказал о том, что знаю и использую сам.
Изучение MIBs
Таким образом можно посмотреть какие MIBs применяются в устройстве, затем поискать информацию что это за MIBs. Если, допустим, хотим работать с интерфейсами, то сначала прям в файле бросается в глаза — IF-MIB, а IF тут понятно — Interfaces. Далее ищем данный MIB через CISCO IOS MIB Locator или же информацию по этому MIB в интернете:
//www.cisco.com/c/en/us/td/docs/switches/wan/mgx/mgx_8850/software/mgx_r2-0-10/pxm/reference/guide/pxm/ifmib.pdf
Внутри pdf-файла есть таблица параметров с подробным описанием каждого из параметров, например:
ifOperStatus | Integer | Indicates the current operational state of the interface.. |
Внизу описания параметра 2 важных значения:
Уровень доступа показывает как можно обращаться к данному параметру/разделу, например, для ifTable уровень доступа not-accessible показывает, что обращаться нельзя никак — это только контейнер, для ifOperStatus — можно считывать значение, записывать нельзя, ifAdminStatus — можно и считывать, и записывать.
Статус в большинстве случаев — текущий, то есть именно на момент запроса.
Обратиться из консоли к конкретному параметру можно, к примеру, как IF-MIB::ifOperStatus — текущий статус интерфейса. Ранее было видно, что F0/0 имеет порядковый номер 1 среди интерфейсов, поэтому:
Чтобы попутно проверять получаемую информацию по параметрам MIB и получать OIDs в цифровом выражении, есть вторая полезная команда:
- snmpget — позволяет давать запросы к сетевому устройству, как это делает диспетчер SNMP, тоже прямо из консоли.
Пример.
Ещё раз — на этом этапе и до настройки Веб необходимо получить больше сведений об OIDs, которые будут мониториться — числовое представление для OID, формат вывода значения параметра — числа, текст, целые, дробные и так далее. При настройке Веб все эти данные понадобятся.
Небольшое отступление
Последние 2 параметра ifInOctets и ifOutOctets описываются как: общее число октетов полученных на интерфейсе, включая служебные. Это точное описание. Октет в информатике — восемь двоичных разрядов, то есть байт. Такое же определение дано в документации Zabbix для ifInOctets/ifOutOctets: Полное число полученных байтов, включая символы заголовков:
- Чтобы перевести октеты в биты — их нужно умножить на 8;
- Чтобы получить загрузку интерфейса за промежуток времени — нужно из конечного значения счётчика октетов вычесть начальное и разделить на промежуток времени.
Следующая важная вещь:
- Счётчик октетов имеет конечное значение 2 32 и при переполнении сначала обнуляется, потом начинает заполняться снова. Если это не учесть, то при обнулении значения счётчика будет разово выведена неверная величина загрузки интерфейса. Учтено это или нет в Zabbix? Не могу сказать, не знаю, но при составлении собственных скриптов для расчёта, данный момент необходимо учитывать.
Настройка WEB
Настройка Веб состоит из нескольких несложных шагов, всё подробно рассказано на странице проекта — нужно потратить время и хорошо изучить данное описание. Моя адаптация:
- Создать узел сети. Ввести имя, выбрать или создать группу для узла, в пункте Интерфейсы добавить интерфейс SNMP, ввести IP, интерфейс для агента — удалить:
Галка Use bulk request позволяет запрашивать у устройства несколько SNMP параметров за 1 запрос, для версии 2c это нормальный режим работы, поэтому галку на чекбоксе оставляем.
Зайти в созданный узел и далее на закладку Items и тут нужно будет создать элементы данных — как минимум 1 элемент для SNMP агента и как минимум 1 для ловушек SNMP. На самом деле элементов будет больше.
Элемент данных — это тот параметр, который будем мониторить.
Элементы данных для агента SNMP
Сначала создадим элементы данных для входящей и исходящей загрузки интерфейса F0/0 и сформируем график.
Для элемента входящей загрузки используем следующие параметры:
Два последних значения гарантируют формирование правильного графика загрузки интерфейса F0/0 в битах в секунду. Множитель 8 переводит байты в биты, а Delta speed per second (изменение в пересчёте на секунду) — разница между начальным и конечным значением, делённая на интервал. Проверить очень просто, можно менять как угодно значение Update interval (in sec) при этом показания на графике остаются неизменными.
Другой вариант выбрать следующие параметры:
В чём разница? Delta simple change (простое изменение) — конечное значение минус начальное, поэтому «разделить на интервал» нужно заложить в множитель. Множитель вышел 2 целых 6 в периоде — специально взял эти значения чтобы показать, что не всегда этот вариант удобен. А так принципиальной разницы нет. Для определённости используем 1 метод.
Теперь аналогично создадим элемент данных для исходящей загрузки F0/0.
Затем на закладке Graphs для R1 добавляется график с обоими параметрами. График есть, можно смотреть насколько загружен интерфейс.
Теперь создадим запись элемента данных для мониторинга статуса порта S0/0 — это ещё 1 порт на маршрутизаторе, к нему ничего не подключено, его номер равен 2 и OID для статуса это F-MIB::ifOperStatus.2 или .1.3.6.1.2.1.2.2.1.8.2 в числовом выражении:
Ещё полезные OIDs:
- .1.3.6.1.4.1.9.2.1.56.0 — средняя загрузка CPU за 5 секунд;
- .1.3.6.1.4.1.9.2.1.57.0 — средняя загрузка CPU за 60 секунд;
- .1.3.6.1.4.1.9.2.1.58.0 — средняя загрузка CPU за 5 минут;
- .1.3.6.1.4.1.9.2.1.8.0 — объём свободной памяти.
Триггер
На основе созданной записи для S0/0 на закладке Triggers для узла R1 теперь можно создать триггер, который будет обрабатывать изменения в состоянии интерфейса S0/0. Можно задать множество условий и даже комбинаций из условий, возьму одно из самых простых выражений:
Тут 1 — (как было показано выше) цифровое выражение статуса Up для интерфейса и триггер мониторит среднее значение для статуса интерфейса за 30 секунд, если оно не 1, тогда условие срабатывает.
Проходит 30 секунд, проверяем что триггер сработал.
Теперь добавляем в GNS3 ещё 1 маршрутизатор, соединяем его интерфейс S0/0 c интерфейсом S0/0 R1, включаем эти интерфейсы на обоих маршрутизаторах и ждём 30 секунд.
Элемент данных для ловушек SNMP
Если не брать готовое решение Zabbix, то много чего нужно настраивать дополнительно. В случае готового решения уже всё настроено, необходимо лишь завести саму запись элемента данных для ловушек. Идём снова на закладку Items для R1:
Теперь на R1 поднимаем интерфейс S0/1, к нему ничего не подключено и смотрим события в Monitoring — Latest Data, сделав отбор по нашему устройству или по группе:
Тут собственно видно, что графики в общем-то формируются автоматически — для статуса F0/0 график не создавался — и доступны из этого меню, но для удобства и более точной настройки лучше создавать графики вручную.
Нажимаем кнопку History для более детального просмотра пришедших ловушек:
На что тут надо обратить внимание:
- Неверное задание 1 из параметров нарушает работу всего создаваемого объекта;
- Отдельно про параметр Ключ (Key) — где-то ключ задаётся произвольно и его функция только в дополнительном описании создаваемого объекта, а где-то верное задание ключа — необходимо для правильной работы.
Работа с большим числом узлов
Все элементы данных (Items) и график (Graphs) создавались непосредственно в узле R1. А что делать, когда узлов десятки? Тогда нужно в начале создать вначале шаблон/шаблоны, далее внутри шаблона создать элементы данных и графики, а затем уже шаблон применять к узлам. Это избавит от рутинной работы по добавлению одних и тех же настроек в узлы.
Чтобы не добавлять узлы вручную, можно воспользоваться закладкой Configuration — Discovery, создав там элементы для автоматического поиска узлов по заданным критериям.
На этом с SNMP в Zabbix всё — простая, базовая настройка рассмотрена.
Дополнение от 16.03.2018
Zabbix 3.4 уже довольно давно вышел и на момент хорошо отлажен. В нём есть готовые, очень хорошие шаблоны для сетевого оборудования (CISCO, Qtech, прочее). Соответственно про версию 3.2 и тем более ниже — нужно забыть и использовать только 3.4.