Появилась задача мониторить в Zabbix список зон доменов, с которыми настроены доверительные отношения. Поскольку зон было довольно много хотелось получить их список как-то автоматически чтобы использовать правила автообнаружения.
Экспорт WMI в JSON на PowerShell с произвольным именованием полей
На просторах интернета нашел простой скрипт как получить список зон на powershell с помощью WMI, добавил из другого решения переименование полей (ссылки на оригинал в конце статьи).
Заметку сохраняю здесь для себя и тех, кому это может быть так же полезно.
$DNSServer = "DC01"
$Zones = Get-WMIObject -Computer $DNSServer -Namespace "root\MicrosoftDNS" -Class "MicrosoftDNS_Zone"
write '{ "data":'
$Zones | Select-Object -property @{N='{#ZONENAME}';E={$_.Name}},ZoneType | where {$_.ZoneType -eq "4"} | ConvertTo-Json
write '}'
Данный скрипт получает имя зоны условной пересылки (ZoneType 4) домена с которым настроены доверительные отношения. Выводит данные в Json формате и поле сразу помечается макросом автообнаружения. Далее этот скрипт размещается на контроллере домена и настраивается в конфигурационном файле агента пользовательский параметр для автообнаружения.
Автообнаружение зон DNS условной пересылки на контроллере домена
В настройках хоста создается правило автообнаружения, которое генерит элементы проверки на основе вот такого прототипа:
net.dns[{HOST.IP},{#ZONENAME},NS,2,1]
Так же создается соответствующий ему прототип тригера сигнализирующий о том, что данная зона не резолвится на контроллере домена :
DNS Zone {#ZONENAME} not resolving on {HOSTNAME}
last(/tmn-sts-dc01.id-suenco.ru/net.dns[{HOST.IP},{#ZONENAME},NS,2,1],#3)=0
Решение не самое правильно и элегантное, было придумано и сделано на коленке для быстрого решения поставленной задачи. Минусов тут несколько. На каждый контроллер домена нужно разместить скрипт и произвести настройку и перезапуск агента. Можно сделать все то же самое без скрипта с использованием запроса непосредственно с Zabbix сервера что-то вроде такого.
wmi.getall[root\MicrosoftDNS,select * from MicrosoftDNS_Zone where ZoneType = '4']
На основе этого запроса производится автоматическое обнаружения и создание элементов без необходимости установки скриптов и настройки агентов на серверах. Но об этом в другой статье.
Источники:
- Оригинальный скрипт получения списка доменных зон: https://blog.it-kb.ru/2012/05/05/powershell-dns-get-conditional-forwarders-list/
- Переименование полей: https://question-it.com/questions/771661/pereimenovat-zagolovki-stolbtsov-v-fajle-csv-s-pomoschju-spetsialnyh-simvolov
Внимание! Нажимая кнопку "Отправить комментарий" вы соглашаетесь с политикой конфиденциальности сайта.