SCROLL
Среднее время на прочтение: 3 мин.

Мониторинг 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 вносим в самый конец следующий параметр:

C:\Program Files\Zabbix Agent 2\zabbix_agent2.conf
AllowKey=system.run[*]

В каталоге C:\Program Files\Zabbix Agent 2\zabbix_agent2.d создаем текстовый файл userparams_dns.conf со следующим содержанием:

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 со следующим содержанием:

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:

PowerShell
net stop "Zabbix Agent 2"
net start "Zabbix Agent 2"

Шаг 2. Настройка шаблона Zabbix

Скачиваем шаблон и импортируем его в Zabbix

  • Zabbix -> Сбор данных -> Шаблоны -> Импорт
Скачать “zbx_template_dns_checks.yaml” zbx_template_dns_checks-1.yaml – Загружено 0 раз – 3,21 КБ

Заводим узел сети и применяем к нему импортированный шаблон:

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

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

  1. https://www.zabbix.com/documentation/7.2/en/manual/config/items/itemtypes/zabbix_agent#net.dns ↩︎
  2. https://jakondo.ru/sozdanie-polzovatelskih-low-level-discovery-pravil-v-zabbix/ ↩︎
 

ПОНРАВИЛАСЬ ИЛИ ОКАЗАЛАСЬ ПОЛЕЗНОЙ СТАТЬЯ, ПОДДЕРЖИ АВТОРА ДОНАТОМ

Обсуждение

0 комментариев

Нет комментариев.