В этой статье мы рассмотрим особенности использования Zabbix для мониторинга Windows хостов, начиная с установки агента, подключения Windows узла к Zabbix серверу, до сбора специфических метрик и настройки алертов.
Установка Zabbix агента в Windows
Итак, у нас имеется хост с Windows Server 2022, который мы хотим мониторить через Zabbix. Для этого на хосте нужно установить и настроить агент Zabbix. Скачать MSI установщик с агентом Zabbix нужно с официального сайта (https://www.zabbix.com/download_agents). Выберите версию Zabbix агента в зависимости от версии Windows. Доступен как MSI установщик, так и бинарные файлы для ручного распространения агента. Обратите внимание, что доступны версии Zabbix Agent 1 и Agent2, но для современных систем имеет смысл использовать Agent 2 (если ваш сервер Zabbix поддерживает его).

При установке MSI пакета с агентом Zabbix нужно указать имя компьютера (HostName) и IP адрес/ DNS имя вашего сервера Zabbix.
В нашем случае клиент Zabbix находится за NAT и напрямую с сервера не доступен, поэтому мы не может использовать режим стандартный (пассивный) режим агента (подключение сервера к клиенту на порт
10050
). Поэтому нужно использовать Active режим работы агента. Для этого в поле Server for active checks указать адрес вашего сервера Zabbix (или прокси, если используется).

Для TLS шифрования трафика между сервером и клиентом мы воспользуемся PSK (Pre-Shared Key). Задайте идентификатор PSK ключа (позволит вам идентифицировать ключ), затем сгенерируйте рандомное значение PSK с помощью PowerShell и вставьте его в поле установщика агента.
[guid]::NewGuid().ToString("N")

После установки проверьте, что в списке служб появилась служба Zabbix Agent 2.

Настройка агента Zabbix в Windows хранятся в файле
"C:\Program Files\Zabbix Agent 2\zabbix_agent2.conf"
. В дальнейшем любые изменения в конфигурацию агента вносятся через этот текстовый файл. В нашем случае задано всего несколько параметров:
LogFile=C:\Program Files\Zabbix Agent 2\zabbix_agent2.log
– лог действий агента
Server=123.45.67.8
– адрес сервера Zabbix для пассивных проверок (запросы с любых других серверов Zabbix будут отклоняться)
ServerActive=123.45.67.8
— адрес сервера Zabbix (или прокси) для активных проверок
Hostname=S-DC01
– имя хоста, под которым он будет виден на сервере Zabbix
TLSConnect=psk
– включено обязательное шифрование трафика TLS
TLSAccept=psk
TLSPSKIdentity=PSK_s_dc01
– идентфикатор PSK
TLSPSKFile=C:\Program Files\Zabbix Agent 2\psk.key
– текстовый файл, в котором хранится созданный вами ранее ключ PSK

После внесения любых изменений в конфигурационный файл Zabbix, нужно перезапускать службу:
Restart-Service "Zabbix Agent 2"
Проверьте, что с Windows хоста доступен ваш сервер Zabbix по порту 10051:
Test-NetConnection 123.45.67.8 -Port 10051

Добавление нового узла Windows на сервере Zabbix
После того, как агент Zabbix установлен на Windows Server, можно добавить новый узел в веб интерфейсе сервера Zabbix.
- Перейдите в Configuration -> Hosts -> Create Host
- Укажите имя хоста (должно соответствовать
hostname, заданному в агенте) - Назначьте хосту нужный шаблон (для начала можно выбрать стандартный шаблон Windows by Zabbix agent active) и группу хостов, к которой он должен относится.
- Добавьте интерфейс Add -> тип Agent . Укажите IP/адрес агента для пассивных проверок (если используется).

- Затем переходим на вкладку Encryption, разрешаем подключение только по ключу, копируем название и значение PSK ключа, созданного на клиенте.

Если все настроено корректно, то через несколько минут в разделе Monitoring -> Latest Data вы должны увидеть данные, полученные с Windows сервера через агента Zabbix.

Сбор метрик с Windows узла через Zabbix
Далее рассмотрим, как настроить мониторинг только определенных метрик на сервере Windows. Допустим, вы хотите отслеживать только доступность агента Zabbix на сервере, занятое место в (%) на дисках и количество активных сетевых подключений к веб серверу.
Во встроенных шаблонах Zabbix может содержаться большое количество элементов. Кроме того, за счет функции низкоуровневого обнаружения (Low Level Discovery, LLD), Zabbix может добавлять для хоста десятки дополнительных элементов (отдельные item-ы для каждой службы, по несколько метрик для каждого обнаруженного диска, сетевого интерфейса и т.д.). Если вам не нужные некоторые данные, вы можете отключить их как в самом шаблоне (глобально), так и в настройках конкретного узла Zabbix.
Правила автообнаружения можно отключить как в самом шаблоне, так и для конкретного хоста. Перейдите в Hosts -> выберите ваш хост Windows -> Items -> вкладка Discovery Rules. Например, я решил отключить правила Low Level Discovery для служб, сетевых интерфейсов и физических дисков.

Затем на вкладке Items можно временно отключить или совсем удалить некоторые метрики для хоста.
Таким образом мы получаем значения следующих метрик:
- Занятое место на дисках через встроенные ключи
vfs.fs.size[C:,pused]иvfs.fs.size[G:,pused] - Доступность агента Zabbix – через ключ
agent.ping

Следующую метрику — количество активных HTTPS подключений к Windows серверу, мы получим непосредственно из Windows с помощью PowerShell. Для этого на хосте Windows будет выполняться команда или скрипт, которая будет получать необходимые данные, а Zabbix агент передавать их в виде метрики на сервер.
На хосте Windows нужно отредактировать файл конфигурации агента (zabbix_agent2.conf) и создать параметр (метрику), который будет отправлять агент:
UserParameter=ActiveHTTPSSessions,powershell -NoProfile -ExecutionPolicy bypass -Command "(Get-NetTCPConnection -LocalPort 443|measure).count"
Также увеличьте в конфигурации
Timeout=30
(значение по умолчанию 3 секунды, чего не всегда хватает для медленных PowerShell команд/скриптов).

Перезапустите агент:
Restart-Service "Zabbix Agent 2"
Проверьте с помощью встроенной утилиты zabbix_get.exe, что вы можете получить значение вашей метрики от агента Zabbix:
cd 'C:\Program Files\Zabbix Agent 2\'
.\zabbix_get.exe -s 127.0.0.1 -p 10050 --tls-connect=psk --tls-psk-identity="SRV01_PreShared_Key" --tls-psk-file="C:\Program Files\Zabbix Agent 2\psk.key" -k ActiveHTTPSSessions

Теперь новую метрику можно добавить в шаблон (для массового использования), либо на конкретный узел Zabbix.
Перейдите на вкладку Items и добавьте:
- Имя: Количество HTTPS сессий
- Type: Zabbix Agent (active)
- Key: ActiveHTTPSSessions
- Type of information: Numeric (unsigned)
- Update Interval: 5m
- History: 90d
- Trenfd: 365d

Проверьте на сервере Zabbix, что в Monitoring -> Latest data появились значение метрики из PowerShell скрипта.
Теперь создадим триггер, который будет генерировать warning, когда количество активных HTTPS сессий к серверу Windows превысило 400 (возможная DDoS атака на веб сервер Windows).
Идем на вкладку Trigger и создаем новый триггер:
- Name: Аномально высокое количество HTTPS сессий
- Problem expression:
last(/SRV01/ActiveHTTPSSessions,#3)>=400(последние три проверки вернули, что количество сессий более 400) - Recovery expression:
last(/SRV01/ActiveHTTPSSessions,#2)< 400(если две последние проверки вернули, что количество подключений меньше, считаем что метрика восстановилась в нормальное состояние)

Итак, мы показали, как вручную установить и настроить агент Zabbix на сервере Windows, получить с него данные с помощью стандартных метрик и отключили часть ненужных. Также рассмотрено настройка получения произвольного значения через агент Zabbix и PowerShell скрипта на Windows и отправка значения в виде метрики на сервер Zabbix.

