Мониторинг сервиса DNS в ZABBIX

В стандартных шаблонах ZABBIX нет возможности мониторить DNS.

Это можно сделать через внешние скрипты.

Обычно они лежат в /usr/lib/zabbix/externalscripts

Создадим такой вот скрипт:

dns-check.sh
#!/bin/sh
HOST_QUERY=$1
if [ `host -W 1 $HOST_QUERY | grep "has address" | wc -l` -eq 0 ]; then
echo "0"
else
echo "1"
fi

Т.е. если у него получается разрезолвить адрес, он вернет 1, если нет, то 0.

Сделаем его исполняемым:

# chmod +x /usr/lib/zabbix/externalscripts/dns-check.sh

Теперь создадим item на том хосте где запущен сервис DNS, не важно какой, bind или Microsoft'овский:

Name:                     DNS service check
Type:                     External check
Key:                      dns-check.sh[google.com {HOST.HOST}]
Type of information:      Numeric unsigned
Data type:                Boolen
Update interval (in sec): 60

google.com можно заменить на любой адрес, который вам нравится.

Для этого item'а сделаем trigger:

Name:        DNS service check
Expression:  {hostname.domainname:dns-check.sh[google.com {HOST.HOST}].max(#3)}=0
Severity:    Average

Обратите внимание, триггер создается для хоста hostname.domainame, далее указан ключ, в котором видим наш item и условие, если три последние попытки были неудачны, то триггер сработает.

В конфиге сервера ZABBIX увеличьте timeout для внешних проверок:

### Option: Timeout
# Specifies how long we wait for agent, SNMP device or external check (in seconds).
#
# Mandatory: no
# Range: 1-30
# Default:
# Timeout=3
Timeout=30

Чтобы не делать итем и триггер в ручную, я запилил шаблон, его можно скачать по ссылке внизу страницы, там же и скрипт.