Мониторинг Bind9 в Zabbix

На примере опишу вариант мониторинга DNS сервера Bind9 в Zabbix.

Для начала включим статистику Bind9, откроем файл конфигурации в текстовом редакторе, например nano (Ctrl+X для выхода, y/n для сохранения или отмены изменений):

sudo nano /etc/bind/named.conf

И добавим следующие строки (где первый IP и порт — интерфейс на котором будет видна статистика, а следующие — с которых разрешен к ней доступ):

statistics-channels {
     inet 192.168.10.1 port 8053 allow { 127.0.0.1; 192.168.10.1; 192.168.10.15;};
};

Но лучше запускать только на локальном адресе:

statistics-channels {
     inet 127.0.0.1 port 8053 allow { 127.0.0.1; };
};

И перезапустим Bind чтобы применить изменения:

sudo /etc/init.d/bind9 restart
netstat -tulpn | grep :8053

После этого в браузере набрав http://192.168.10.1:8053/ можно увидеть статистику Bind9.

Установим необходимые компоненты необходимые для получения статистики из терминала:

sudo apt-get install xml2 curl

Проверим отображается ли статистика:

curl -s http://localhost:8053/ 2>/dev/null | xml2 | grep -A1 -E 'queries|=Qry'
curl http://192.168.5.5:8053/ 2>/dev/null | xml2 | grep -A1 queries

Если возникла ошибка: error «Extra content at the end of the document», то вероятно вы указали не тот IP адрес.

Теперь допишем к конфигурацию Zabbix агента /etc/zabbix/zabbix_agentd.conf параметры которые будем мониторить:

# Количество udp соединений к DNS:
UserParameter=bind.net.udp,netstat -nua | grep :53 | wc -l
# Количество tcp соединений к DNS:
UserParameter=bind.net.tcp,netstat -nta | grep :53 | wc -l
# Количество входящих и исходящих запросов:
#UserParameter=bind.queries.in[*],curl http://192.168.10.1:8053/ 2>/dev/null | xml2 | grep -A1 "/isc/bind/statistics/server/queries-in/rdtype/name=$1$" | tail -1 | cut -d= -f2
#UserParameter=bind.queries.out[*],curl http://192.168.10.1:8053/ 2>/dev/null | xml2 | grep -A1 "/isc/bind/statistics/views/view/rdtype/name=$1$" | tail -1 | cut -d= -f2
UserParameter=bind.queries.in[*],curl http://127.0.0.1:8053/ 2>/dev/null | xml2 | grep -A1 "/statistics/server/counters/counter/@name=$1$" | tail -1 | cut -d= -f2
UserParameter=bind.queries.out[*],curl http://127.0.0.1:8053/ 2>/dev/null | xml2 | grep -A1 "/statistics/views/view/counters/counter/@name=$1$" | tail -1 | cut -d= -f2
UserParameter=bind.queries.query[*],curl http://127.0.0.1:8053/ 2>/dev/null | xml2 | grep -A1 "/statistics/server/counters/counter/@name=Qry$1$" | tail -1 | cut -d= -f2

И перезапустим Zabbix агент чтобы применить изменения:

sudo /etc/init.d/zabbix-agent restart

Добавим элементы данных и графики в новый шаблон на Zabbix сервере (тип — Zabbix агент, примеры ключей ниже):

bind.queries.in[A]
bind.queries.out[A]
bind.queries.in[AAAA]
bind.queries.out[AAAA]
bind.queries.in[NS]
bind.queries.out[NS]
bind.queries.in[MX]
bind.queries.out[MX]
bind.queries.in[PTR]
bind.queries.out[PTR]
bind.queries.in[SOA]
bind.queries.out[SOA]
bind.queries.in[TXT]
bind.queries.out[TXT]
bind.queries.in[ANY]
bind.queries.out[ANY]
bind.queries.in[SPF]
bind.queries.out[SPF]
bind.queries.in[CNAME]
bind.queries.out[CNAME]
bind.queries.in[DS]
bind.queries.out[DS]
bind.queries.in[DNSKEY]
bind.queries.out[DNSKEY]
bind.queries.in[RRSIG]
bind.queries.out[RRSIG]
...
bind.queries.query[AuthAns]
bind.queries.query[Dropped]
bind.queries.query[Duplicate]
bind.queries.query[Failure]
bind.queries.query[FORMERR]
bind.queries.query[NoauthAns]
bind.queries.query[NXDOMAIN]
bind.queries.query[Nxrrset]
bind.queries.query[Recursion]
bind.queries.query[Referral]
bind.queries.query[SERVFAIL]
bind.queries.query[Success]

Чтобы часто не дергать Bind9, можно сохранять статистику в файл через cron, например каждые 2 минуты:

*/2  *   *   *   *  root  curl -s http://localhost:8053/ | xml2 > /tmp/bind_stat.txt

А потом из файла передавать данные в Zabbix:

UserParameter=bind.queries.in[*],cat /tmp/bind_stat.txt | grep -A1 "/statistics/server/counters/counter/@name=$1$" | tail -1 | cut -d= -f2
UserParameter=bind.queries.out[*],cat /tmp/bind_stat.txt | grep -A1 "/statistics/views/view/counters/counter/@name=$1$" | tail -1 | cut -d= -f2
UserParameter=bind.queries.query[*],cat /tmp/bind_stat.txt | grep -A1 "/statistics/server/counters/counter/@name=Qry$1$" | tail -1 | cut -d= -f2

Смотрите также мои статьи:
Мониторинг DNS из Zabbix
Установка и настройка DNS-сервера BIND9
IPTables правила для DNS

Оставьте комментарий

Добавить комментарий