upd: Обновлено, т.к. каждый отдельный запрос выполнялся очень долго и жутко грузил заббикс ожиданиями 😀, теперь нужная статистика «выгружается» по крону, а потом забирается из текстового файлика агентом. Плюс маленько переделан сам шаблон, т.к. в элементах данных стоял некорректный тип хранения значения «дельта», а не «как есть». Забирайте, допиливайте под свои нужды, ссылка дальше по тексту.
Используемый в данной статье шаблон я скачал где-то на просторах интернета и несколько допилил под себя, автору оригинала «Спасибо». В данном шаблоне столько триггеров потому, что в своё время сервис named у меня любил падать и/или не заводиться при перезагрузке. После организации мониторинга и толковой настройки всё стало хорошо.
Имеем сервер с CentOS (для Debian просто скорректируйте пути) с работающим сервисом Named (он же Bind).
Чтобы всё взлетело нужно установить пакеты: zabbix и zabbix-agent (для Debian только zabbix-agent) и xml2. Пакеты заббикса можно взять тут: http://repo.zabbix.com/zabbix/2.4/ (или смотрите там другие версии).
Редактируем необходимые переменные в /etc/zabbix/zabbix_agentd.conf
sudo nano /etc/zabbix/zabbix_agentd.conf
LogFileSize=15 DebugLevel=3 Server=<ip адрес zabbix сервера> ServerActive=<ip адрес zabbix сервера> Hostname=<ip адрес данной машины> - <имя машины> # Hostname = Имя хоста на Zabbix сервере HostMetadataItem=system.uname Timeout=30 Include=/etc/zabbix/zabbix_agentd.d/ UserParameter=bind.worksdig,cat /tmp/zabbix.named.dig UserParameter=bind.worksnslookup,cat /tmp/zabbix.named.nslookup UserParameter=bind.queries.in[*],cat /tmp/zabbix.named.statistics | grep -A1 -i "/isc/bind/statistics/server/queries-in/rdtype/name=$1$" | tail -1 | cut -d= -f2 UserParameter=bind.queries.out[*],cat /tmp/zabbix.named.statistics | grep -A1 -i "/isc/bind/statistics/views/view/rdtype/name=$1$" | tail -1 | cut -d= -f2 UserParameter=bind.stats.query[*],cat /tmp/zabbix.named.statistics | grep -A1 -i "/isc/bind/statistics/server/nsstat/name=Qry$1" | tail -1 | cut -d= -f2 UserParameter=bind.net.udp,netstat -nua | grep :53 | wc -l UserParameter=bind.net.tcp,netstat -nta | grep :53 | wc -l
Добавляем в крон задания:
sudo crontab -e -u root
# Записываем значение параметра в файлы для прочтения zabbix агентом */2 * * * * echo "0" > /tmp/zabbix.named.nslookup ; timeout -s 9 3 nslookup google.ru ip_адрес_вашего_DNS_сервера | grep -c "Name:" > /tmp/zabbix.named.nslookup ; sleep 5 ; /etc/zabbix/scripts/zabbix.named.check.sh >> /tmp/zabbix.named.log */2 * * * * echo "0" > /tmp/zabbix.named.dig ; timeout -s 9 3 dig google.ru @ip_адрес_вашего_DNS_сервера | grep -c "google.ru" > /tmp/zabbix.named.dig # Расширенная статистика по-новому */5 * * * * curl -s http://localhost:8053/ | xml2 | grep -E "server\/queries-in\/rdtype|views\/view\/rdtype|server\/nsstat" 1>/tmp/zabbix.named.statistics_temp 2>/dev/null ; cp -f /tmp/zabbix.named.statistics_temp /tmp/zabbix.named.statistics
Дальше скрипт перезапуска сервиса при зависании или ещё каких-то проблемах.
sudo nano /etc/zabbix/scripts/zabbix.named.check.sh
Или напишите свой красивый велосипед 😏.
#!/bin/bash named_nslookup=`cat /tmp/zabbix.named.nslookup` named_dig=`cat /tmp/zabbix.named.dig` datenow=`/bin/date` if [[ "$named_nslookup" = 0 && "$named_dig" = 0 ]] then echo -e "\n\nNOW: $datenow And at response of zabbix.named.nslookup we have: $named_nslookup, at zabbix.named.dig: $named_dig" echo "Copy date to zabbix.named.date_fail and create flag" /bin/date >> /tmp/zabbix.named.date_fail /bin/touch /tmp/zabbix.named.flag_dontwork # Если флаг существует значит надо остановить сервис или убить процесс if [ -e /tmp/zabbix.named.flag_dontwork ] then /bin/rm -f /tmp/zabbix.named.flag_dontwork tokill=`ps axu | grep "usr\/sbin\/named" | awk '{print $2}' | head -n1` echo -e "\nOk, Flag exist PID of named: $tokill Try to stop service named" timeout -s 9 10 /etc/init.d/named stop tokillbypid=`ps axu | grep "usr\/sbin\/named" | awk '{print $2}' | head -n1` # Если строка пустая, то служба остановлена while [ "$tokillbypid" ] do echo "Service don't stopped, try to kill by PID $tokillbypid" # Через kill -HUP почему-то именно named не дохнет kill -9 $tokillbypid tokillbypid=`ps axu | grep "usr\/sbin\/named" | awk '{print $2}' | head -n1` done echo "Service named stopped" fi echo -e "\nLet's start service named!" /etc/init.d/named start fi exit 0
sudo chmod 775 /etc/zabbix/scripts/zabbix.named.check.sh sudo chown zabbix:root /etc/zabbix/scripts/zabbix.named.check.sh
Как видите, сервис перезапускается если перестаёт нормально работать. После настройки не забываем перезапустить сервис zabbix-agent.
sudo service zabbix-agent restart
Теперь импортируем шаблон на сервере, старая кривая версия — экспортирована из Zabbix 2.4, новая версия — экспортирована из Zabbix 3.2 (но, я думаю, будет работать и на младших релизах, ничего особо не менялось) и добавляем его на хост нашего DNS сервера.
Через 5 минут можно смотреть графики. Для просмотра лучше создать отдельный Комплексный экран и добавить туда все графики.
Т.к. команды с curl тяжёлые по времени выполнения, в конфиге агента и сервера лучше отредактировать переменную отвечающую за время выполнения скриптов. В принципе, это уже не нужно.
Timeout=30
На этом всё.
Нужно еще активировать статистику в /etc/bind/named.conf
statistics-channels {
inet 127.0.0.1 port 8053 allow { 127.0.0.1; };
};
Спасибо за дополнение.