Мониторинг DNS в Zabbix 7.2
Понадобилось на серверах Windows с ролью DNS мониторить DNS-сервера провайдера которые указанны в DNS Forwarding. Мониторить все это дело нужно посредством Zabbix.
Поискав варианты в интернет на предмет готовых решений, я ничего не нашел, поэтому проработал свой вариант решения. Zabbix может через через своего агента выполнять запросы для проверки dns с подчиненной машины:
Выдержка из документации 1
net.dns[<ip>,name,<type>,<timeout>,<count>,<protocol>]
Checks the status of a DNS service.
Return values: 0 — DNS resolution failed (DNS server did not respond or returned an error); 1 — DNS resolution succeeded.
Parameters:
ip(ignored on Windows unless using Zabbix agent 2) — the IP address of DNS server (leave empty for the default DNS server);name— the DNS name to query;type— the record type to be queried (default is SOA);timeout(ignored on Windows unless using Zabbix agent 2) — the timeout for the request in seconds (default is 1 second);count(ignored on Windows unless using Zabbix agent 2) — the number of tries for the request (default is 2);protocol— the protocol used to perform DNS queries: udp (default) or tcp.
Поэтому возникло решение такое что на целевую машину с ролью DNS устанавливаем агента Zabbix, добавляем скрипт и правило для LLD 2 , далее на сервере Zabbix создаем шаблон и путем задания в макросах шаблона параметров (какие DNS-узлы и через какие DNS-серверы мониторить).
Шаг 1. Подготовка агента Zabbix
Устанавливаем Zabbix-агента (обязательно zabbix-agent2).
В файл конфигурации zabbix_agent2.conf вносим в самый конец следующий параметр:
AllowKey=system.run[*]В каталоге C:\Program Files\Zabbix Agent 2\zabbix_agent2.d создаем текстовый файл userparams_dns.conf со следующим содержанием:
UserParameter=dns.discovery[*], powershell -NoProfile -ExecutionPolicy Bypass -File "C:\Program Files\Zabbix Agent 2\dns.discovery.ps1" "$1" "$2" "$3" "$4" "$5" "$6"В каталоге C:\Program Files\Zabbix Agent 2 создаем текстовый файл dns.discovery.ps1 со следующим содержанием:
param(
[string]$DNSServers,
[string]$DNSNames,
[string]$DNSType,
[string]$DNSTimeout,
[string]$DNSCount,
[string]$DNSProto
)
$servers = $DNSServers -split ','
$names = $DNSNames -split ','
$data = @()
foreach ($server in $servers) {
foreach ($name in $names) {
$data += @{
"{#DNSSERVER}" = $server.Trim()
"{#DNSNAME}" = $name.Trim()
"{#DNSTYPE}" = $DNSType
"{#DNSTIMEOUT}" = $DNSTimeout
"{#DNSCOUNT}" = $DNSCount
"{#DNSPROTOCOL}" = $DNSProto
}
}
}
$result = @{ data = $data } | ConvertTo-Json -Compress
Write-Output $resultПерезапускаем службу Zabbix Agent 2:
net stop "Zabbix Agent 2"
net start "Zabbix Agent 2"Шаг 2. Настройка шаблона Zabbix
Скачиваем шаблон и импортируем его в Zabbix
Zabbix->Сбор данных->Шаблоны->Импорт
Заводим узел сети и применяем к нему импортированный шаблон:

В «Макросы» переопределяем значения на нужные нам:

Додидаемся пока отработает LLD или можно форсировать его. Ниже пример как это выглядт на продуктиве:

- https://www.zabbix.com/documentation/7.2/en/manual/config/items/itemtypes/zabbix_agent#net.dns ↩︎
- https://jakondo.ru/sozdanie-polzovatelskih-low-level-discovery-pravil-v-zabbix/ ↩︎
ПОНРАВИЛАСЬ ИЛИ ОКАЗАЛАСЬ ПОЛЕЗНОЙ СТАТЬЯ, ПОДДЕРЖИ АВТОРА ДОНАТОМ
Обсуждение
Нет комментариев.