Сегодня предстоит решением такой интересной задачки, как определение срока делегирования домена.
На первый взгляд особых трудностей не заметно — спарсить вывод whois и делов.
По началу так и было, пока количесто доменов было 2 и все они находились в зоне .com.ua
Как только в список добавился домен зоны .com тут то обнаружение и перестало работать.
Первым делом искал какие то whois-сервисы, которые отдавали бы все доменные зоны и даже что то нашел. И уже через 10 минут столкнулся с ограничением по частотности и предложением купить премиум акк… Отпадает.
Недолгие размышления и гуглинья привели к идее выкинуть стандартный whois и заменить его классным gem-ом (библиотека в языке программирования Ruby)
Этот гем поддерживается сообществом и периодически обновляется. Кроме того имеет хорошую документаху и всё такое. Решено было использовать именно его
Приступим
Для работы этого гема необходимо установить Ruby версии старше чем 2.2.0
Я использовал готовый rpm
CentOS 7:
# wget https://github.com/feedforce/ruby-rpm/releases/download/2.3.3/ruby-2.3.3-1.el7.centos.x86_64.rpm # rpm -Uvh ruby-2.3.3-1.el7.centos.x86_64.rpm
CentOS 6:
# wget https://github.com/feedforce/ruby-rpm/releases/download/2.3.3/ruby-2.3.3-1.el6.x86_64.rpm # rvm ruby-2.3.3-1.el6.x86_64.rpm
После этого установим гем, о котором говорилось выше
# gem install whois whois-parser # gem list | grep whois whois (4.0.1) whois-parser (1.0.0)
Создаём структуру файлов и каталогов
# mkdir -p /etc/zabbix/scripts/domain # touch /etc/zabbix/scripts/domain/domain_discovery.sh # touch /etc/zabbix/scripts/domain/domain_left.rb # touch /etc/zabbix/scripts/domain/domain_list.txt # chown -R zabbix:zabbix /etc/zabbix/scripts/domain/ # chmod +x /etc/zabbix/scripts/domain/domain_discovery.sh # chmod +x /etc/zabbix/scripts/domain/domain_left.rb
Листинг главного скрипта:
# cat /etc/zabbix/scripts/domain/domain_left.rb require 'whois-parser' record = Whois.whois(ARGV[0]) parser = record.parser expire = parser.expires_on.strftime("%Y-%m-%d") today = Time.now.strftime("%Y-%m-%d") expire_date = DateTime.parse(expire) today_date = DateTime.parse(today) left = (expire_date - today_date).to_i puts left
Листинг скрипта обнаружения. Обнаружение происходит с помощью чтения файла со списком доменов с последующим преобразованием в JSON-формат, который понимает zabbix
# cat /etc/zabbix/scripts/domain/domain_discovery.sh #!/bin/bash JSON=$(for i in `cat /etc/zabbix/scripts/domain/domain_list.txt`; do printf "{\"{#DOMAIN}\":\"$i\"},"; done | sed 's/^\(.*\).$/\1/') printf "{\"data\":[" printf "$JSON" printf "]}"
Список доменов. Специально добавил по одному с распространённых зон для проверки.
# cat /etc/zabbix/scripts/domain/domain_list.txt tradenark.com.ua google.com i.ua bash.im habrahabr.ru bitcoin.org
Расширяем возможности заббикса, создав кастомные ключи. Этот параграф очень хорошо описан в документации
# cat /etc/zabbix/zabbix_agentd.d/domain.conf UserParameter=domain.discovery,/bin/bash /etc/zabbix/scripts/domain/domain_discovery.sh UserParameter=domain.expire[*],/usr/bin/ruby /etc/zabbix/scripts/domain/domain_left.rb $1
После перезапуска агента можно проврять все ли конфигурации применились:
# zabbix_agentd -t 'domain.discovery' domain.discovery [t|{"data":[{"{#DOMAIN}":"bash.im"},{"{#DOMAIN}":"bitcoin.org"},{"{#DOMAIN}":"habrahabr.ru"},{"{#DOMAIN}":"i.ua"},{"{#DOMAIN}":"google.com"},{"{#DOMAIN}":"tradenark.com.ua"}]}] # zabbix_agentd -t 'domain.expire[bash.im]' domain.expire[bash.im] [t|178] # zabbix_agentd -t 'domain.expire[bitcoin.org]' domain.expire[bitcoin.org] [t|2178] # zabbix_agentd -t 'domain.expire[habrahabr.ru]' domain.expire[habrahabr.ru] [t|230] # zabbix_agentd -t 'domain.expire[i.ua]' domain.expire[i.ua] [t|570] # zabbix_agentd -t 'domain.expire[google.com]' domain.expire[google.com] [t|1840] # zabbix_agentd -t 'domain.expire[tradenark.com.ua]' domain.expire[tradenark.com.ua] [t|147]
Готовый шаблон тут
Это решение оказалось более гибким, к тому же дополнительный опыт написания кода на любимом Ruby
Спасибо, годная инструкция. Давно хотел что-то подобное настроить.