Задача: Хочу поставить на мониторинг Grace Period on Terminal Server
Предыстория: Есть терминальный сервер на базе Windows Server 2016 Standard
именуемый, как srv-ts00-abc
и он состоит в связки с сервисом Remote Desktop Gateway
, но вот он у меня без возможности задействовать активацию на удаленное подключение, а потому я использую полнофункциональное использования сроком на 120
дней, когда дни подходят к отметке "0"
, то задействую заметку: "Дополнение как сбросить grace period TS Windows Server 2016"
. Исходя из этого у меня появилась следующая заметка, я хочу параметр GracePeriod
поставить на мониторинг в Zabbix 5.0.9
который развернут на Ubuntu 18.04 Server.
Если система выполняет тот функционал, который мне нужен, то смысл гнаться за чем-то более новым в плане новых версий. По принципу ниже и все остальные терминальные сервера будет добавлены в Zabbix.
Начнем…
Шаг №1:
Проверка лицензии терминального сервера srv-ts00-host:
Login in srv-ts00-abc (Group: Domain Admins)
Win + X -> Command Prompt (Admin)
wmic /namespace:\\root\CIMV2\TerminalServices PATH Win32_TerminalServiceSetting where (__CLASS !="") call getgraceperioddays | findstr /I "DaysLeft"
Шаг №2:
На Терминальный сервер нужно установить Zabbix
агент (zabbix_agent-5.0.9-windows-amd64-openssl.msi
) со следующим конфигурационным файлом:
C:\Zabbix\zabbix_agentd.conf LogFile=C:\Zabbix\zabbix_agentd.log AllowKey=system.run[*] LogRemoteCommands=1 Timeout=30 Server=srv-zabbix.polygon.local Hostname=SRV-SHARES03 Include=C:\Zabbix\zabbix_agentd.conf.d\ #Include=C:\Zabbix\scripts\ UnsafeUserParameters=1 c:\Script>netstat -a | findstr /I :100 TCP 0.0.0.0:10050 edf:0 LISTENING TCP [::]:10050 srv-ts00-abc:0 LISTENING
Шаг №3:
Проверяем что с Zabbix
—сервера видим хост c Zabbix
—агентом:
На заметку: Синтаксис проверки
zabbix_get -s <host> -p <port:10050> -k <key> ekzorchik@srv-zabbix:~$ zabbix_get -s 192.168.11.14 -p10050 -k system.uptime zabbix_get [17739]: Get value error: ZBX_TCP_READ() failed: [104] Connection reset by peer zabbix_get [17739]: Check access restrictions in Zabbix agent configuration ekzorchik@srv-zabbix:~$
а в логах на Windows (C:\Zabbix\zabbix_agentd.log)
13916:20240802:083933.266 failed to accept an incoming connection: connection from "192.168.9.126" rejected, allowed hosts: "srv-zabbix.polygon.local" 9256:20240802:084033.276 failed to accept an incoming connection: connection from "192.168.9.126" rejected, allowed hosts: "srv-zabbix.polygon.local"
в этом случае и в своем случае мне нужно проверить а есть ли у меня правило на Mikrotik
на доступ из сети где хост (это сеть 192.168.11.14
) к Zabbix
-серверу (srv-zabbix.polygon.local [192.168.9.126])
Т.к. на системе 192.168.11.14
нет внутреннего DNS
то адрес серверу нужно указывать не по FQDN
-имени, а указывать IP
-адрес, изменил:
LogFile=C:\Zabbix\zabbix_agentd.log AllowKey=system.run[*] LogRemoteCommands=1 Timeout=30 Server=192.168.9.126 Hostname=SRV-TS00-ABC Include=C:\Zabbix\zabbix_agentd.conf.d\ #Include=C:\Zabbix\scripts\ UnsafeUserParameters=1
После перезапускаю службу "Zabbix Agent"
С сервера Zabbix
проверяю доступность:
ekzorchik@srv-zabbix:~$ zabbix_get -s 192.168.11.14 -p10050 -k system.uptime 5658698 ekzorchik@srv-zabbix:~$
и вот такое правило у меня на Mikrotik:
winbox - ip - user&pass - IP - Firewall
— вкладка Filter Rules
Chain: forward
Protocol: 6(tcp)
Dst.Port: 10050
In.Interface: VLAN 11
Dst. Address List: srv-zabbix.polygon.local (192.168.9.126)
Action: Accept
и правило на проверку через ICMP:
winbox - ip - user&pass - IP - Firewall
— вкладка Filter Rules
Chain: forward
Protocol: 1(icmp)
In.Interface: VLAN 11
Out. Interface: VLAN 9
Src. Address List: ! zabbix_host (192.168.11.14)
Dst. Address List: VLAN 9
Action: Drop
На заметку: в моем случае, сперва правило DROP
, а потом Forward.
Шаг №4:
Далее нужно на Zabbix
сервере завести хост на Мониторинг и прикрутить к нему шаблоны:
http://IP&DNS/zabbix - user&pass - Настройка - Узлы сети - Создать узел сети
Имя узла сети: srv-ts00-abc
Группы: GROUP_WINDOWS
Интерфейсы:
IP адрес: 192.168.11.14
Подключаться через: IP
Порт: 10050
Наблюдение через прокси: (без прокси)
Активировано: Отмечаю галочкой
Присоединенные шаблоны: Templates/Operating system - Template OS Windows by Zabbix agent
Шаг №5:
Создаю шаблон с именем Template_Grace:
http://IP&DNS/zabbix - user&pass - Настройка - Шаблоны - Создать шаблон
вкладка "Шаблон"
Имя шаблона: Template_Grace
Группы: GROUP_WINDOWS
вкладка "Макросы"
Макрос: {$SRVTS00ABC}
Значение: 192.168.11.14
и нажимаю "Добавить".
На заметку: В этой реализации заметки во вкладе "Макросы"
можно не создавать значения.
Шаг №6:
После в созданном шаблоне (Template_Grace)
создаю элемент данных:
http://IP&DNS/zabbix - user&pass - Настройка - Шаблоны
— перехожу в шаблон "Template_Grace"
и в "Элементы данных"
нажимаю "Создать элемент данных"
вкладка "Элемент данных"
Имя: Grace
Тип: Zabbix агент
Ключ: graceperiod
Тип информации: Текст
Интервал обновления: 1d
Пользовательские интервалы: Переменный
Период хранения истории: Период хранения 90d
Новая группа элементов данных: GracePeriod
Заполнение поля инвентаря узла сети: Нет
Активировано: Отмечаю галочкой
вкладка "Предобработка"
(Шаги предобработки)
— нажимаю "Добавить"
Имя: Обрезать справа
Параметры: ;
и нажимаю "Добавить"
На заметку: Но я бы посоветовал покуда отлаживаете собственные шаблоны не лишим будет использовать переход в "Тест"
ниже пример как это выглядит
Шаг №7:
Если на Windows (srv-ts00-abc)
при проверке выполнения ключа (Элемент данных с именем graceperiod
) ошибка:
c:\Zabbix>zabbix_get.exe -s 127.0.0.1 -p 10050 -k graceperiod zabbix_get.exe [7244]: Get value error: ZBX_TCP_READ() failed: [0x00002746] An existing connection was forcibly closed by the remote host. zabbix_get.exe [7244]: Check access restrictions in Zabbix agent configuration
нужно в C:\Zabbix\zabbix_agentd.conf
в параметр Server
добавить 127.0.0.1
тем самым мы даем понять, что обращаться к элементам данных можем с самой Windows
системы:
LogFile=C:\Zabbix\zabbix_agentd.log AllowKey=system.run[*] LogRemoteCommands=1 Timeout=30 Server=192.168.9.126,127.0.0.1 Hostname=SRV-TS00-ABC Include=C:\Zabbix\zabbix_agentd.conf.d\ #Include=C:\Zabbix\scripts\ UnsafeUserParameters=1 UserParameter=graceperiod,wmic /namespace:\\root\CIMV2\TerminalServices PATH Win32_TerminalServiceSetting where (__CLASS !="") call getgraceperioddays | findstr /I "DaysLeft" net stop "Zabbix Agent" && net start "Zabbix Agent"
Проверяю и вот результат:
c:\Zabbix>zabbix_get.exe -s 127.0.0.1 -p 10050 -k graceperiod DaysLeft = 54;
Изменил на вот так
LogFile=C:\Zabbix\zabbix_agentd.log AllowKey=system.run[*] LogRemoteCommands=1 Timeout=30 Server=192.168.9.126,127.0.0.1 Hostname=SRV-TS00-ABC Include=C:\Zabbix\zabbix_agentd.conf.d\ #Include=C:\Zabbix\scripts\ UnsafeUserParameters=1 #UserParameter=graceperiod,wmic /namespace:\\root\CIMV2\TerminalServices PATH Win32_TerminalServiceSetting where (__CLASS !="") call getgraceperioddays | findstr /I "DaysLeft" UserParameter=graceperiod,C:\Zabbix\Scripts\graceperiod.bat
где содержимое bat
файла:
rem @echo off set strGraceResult = C:\Zabbix\Scripts wmic /namespace:\\root\CIMV2\TerminalServices PATH Win32_TerminalServiceSetting where (__CLASS !="") call getgraceperioddays | findstr /I "DaysLeft" > %strGraceResult%\grace.txt for /f "tokens=3" %%g in (%strGraceResult%\grace.txt) do echo %%g c:\Zabbix>zabbix_get.exe -s 127.0.0.1 -p 10050 -k graceperiod 54; c:\Zabbix> ekzorchik@srv-zabbix:~$ zabbix_get -s 192.168.11.14 -p10050 -k graceperiod 54; ekzorchik@srv-zabbix:~$
На заметку: Когда все будет в боевом, то в graceperiod.bat
нужно вместо rem @echo off
сделать echo off
На заметку: Содержимое скрипта graceperiod.bat
@echo off set strGraceResult = C:\Zabbix\Scripts wmic /namespace:\\root\CIMV2\TerminalServices PATH Win32_TerminalServiceSetting where (__CLASS !="") call getgraceperioddays | findstr /I "DaysLeft" > %strGraceResult%\grace.txt for /f "tokens=3" %%g in (%strGraceResult%\grace.txt) do echo %%g
На заметку: Я средствами Zabbix
буду удалять символ точки с запятой, см. шаги выше, как я это делаю.
Шаг №8:
Проверяю, что у узла сети srv-ts00-abc
присоединен шаблон Template_Grace
или присоединяю:
http://IP&DNS/zabbix - user&pass - Настройка - узлы сети
— перехожу в узел srv-ts00-abc
, вкладка "Шаблоны"
и добавляю шаблон "Template_Grace"
, после принудительно командую получение значения Grace:
http://IP&DNS/zabbix - user&pass - Настройка - Узлы сети
— перехожу в узел srv-ts00-abc
, перехожу в "Элементы данных"
в этом узле, после перехожу в (Группы элементов данных) GracePeriod
, отмечаю галочкой элемент Template_Grace: Grace
и нажимаю сперва "Очистить историю"
, а после "Выполнить сейчас"
Получаю «Запрос успешно отправлен»
Шаг №9:
Проверяю, что все успешно отработало и я получил данные:
http://IP&DNS/zabbix - user&pass - Мониторинг - Последние данные
Группа элементов данных: выбираю "GracePeriod"
Узлы сети: srv-ts00-abc
и нажимаю "Применить"
, по итогу получаем:
Что мне и хотелось.
Шаг №10:
Задача: Как вынести результат элемента данных graceperiod
на Карту Zabbix:
Тип: Узел сети
Подпись: Grace:{{HOSTNAME}:graceperiod.last()}
Расположение подписи: По умолчанию
Узел сети: srv-ts00-abc
Группа элементов данных: GracePeriod
Иконки по умолчанию: Server_96
и нажимаю "Применить"
Шаг №11:
После того как получили значение оставшихся дней нужно в шаблоне Template_Grace
настроить триггер, что когда дней остается 7 или меньше, то срабатывает триггер:
http://srv-zabbix/zabbix - user&pass - Настройка - Шаблоны
— переходим в шаблон "Template_Grace" - Триггеры - Создать триггер
Имя: GracePeriod 7
Важность: Высокая
Выражение: {Template_Grace:graceperiod.last()}<=7
Генерация ОК событий: Выражение
Режим генерации событий ПРОБЛЕМА: Одиночная
ОК событие закрывает: Все проблемы
Разрешить закрывать вручную: Отмечаю галочкой
Описание: GracePeriod меньше или равно 7 дней, удаляем ключ в реестре и перезагружаем систему и опять 120 дней
Активировано: Отмечаем галочкой
и нажимаем "Добавить"
Отлично.
Итого я столько полезного для себя узнал и сделал, что на основе этого смогу еще что-нибудь разобрать в последствии.
На этом пока все, с уважением автор блога Олло Александр aka ekzorchik.