Перейти к основному содержанию
 

Zabbix — срок действия домена

Zabbix

Одна из задач системного администратора - следить за сроком истечения оплаты домена. Автоматизируем процесс через заббикс.

Ссылки

Вторая версия скрипта мониторинга срока действия домена доступна здесь:

Zabbix - срок действия домена 2

Установка

Установим на заббикс сервер whois, у меня ubuntu:

apt-get install whois

В конфиге заббикс сервера смотрим путь к скриптам в переменной ExternalScripts:

ExternalScripts=/usr/lib/zabbix/externalscripts

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

cd /usr/lib/zabbix/externalscripts
touch checkdomainexpire.sh
chmod +x ./checkdomainexpire.sh
chown zabbix\: checkdomainexpire.sh

Содержимое скрипта:

#!/bin/bash

# получаем имя домена
DOMAIN=$1

#если домен не передан - выводим массив для автообнаружения
if [[ $DOMAIN = "" ]]; then
    #заполняем массив из файла и выводим в JSON
    readarray DOMAINLIST < /usr/lib/zabbix/externalscripts/checkdomainexpire_domain_list.txt
    if ((${#DOMAINLIST[*]}>0)); then
        echo "{"
        echo "  \"data\": ["
        for ((a=0; a < ${#DOMAINLIST[*]}; a++))
        do
            x=${DOMAINLIST[$a]};
            x=${x//[[:space:]]/};
            echo "    {"
            echo "      \"{#DOMAIN}\": \"${x}\""
            if ((a+1 < ${#DOMAINLIST[*]})); then
                echo "    },"
            else
                echo "    }"
            fi
        done
        echo "  ]"
        echo "}"
    fi
else

    # получаем имя зоны
    ZONE=`echo $DOMAIN | sed 's/\./ /' | awk '{ print $2 }'`

    # получаем дату протухания домена
    # Должна вернуться в формате ГГГГ-ММ-ДД (год-месяц-день)
    case "$ZONE" in
    ru|net.ru|org.ru|pp.ru|рф)
        DATE=`whois $DOMAIN | grep paid-till | awk '{ print $2 }' | sed 's/\./-/g'`
        ;;
    spb.ru|msk.ru)
        DATE=`whois -h whois.nic.ru $DOMAIN | grep paid-till | awk '{ print $2 }' | sed 's/\./-/g'`
        ;;
    re)
        DATE="$(whois $DOMAIN | awk '/[Ee]xpir.*[Dd]ate:/ || /[Tt]ill:/ || /expire/ {print $NF; exit;}')"
        DATE=`date --date=$DATE +%d/%m/%Y`
        ;;
    org|com|net)
        DATE=`whois $DOMAIN | grep "Registry Expiry Date:" | sed 's/Registry Expiry Date: //g;s/T/ /g' | awk '{ print $1 }'`
        ;;
    *)
        DATE="$(whois $DOMAIN | awk '/[Ee]xpir.*[Dd]ate:/ || /[Tt]ill:/ || /expire/ {print $NF; exit;}')"
    if test -z "$DATE"; then
    #Отсутствует информация в Whois для домена
    echo "-1"
    continue
    fi
    esac

    # считаем дни и выводим
    expr \( `date --date="$DATE" +%s` - `date +%s` \) / 60 / 60 / 24
fi

Обратите внимание на строку "readarray DOMAINLIST < /usr/lib/zabbix/externalscripts/checkdomainexpire_discovery.txt", езмените её, если ваш путь отличается.

Создаём файлик со списком проверяемых доменов:

cd /usr/lib/zabbix/externalscripts
touch checkdomainexpire_domain_list.txt
chown zabbix\: checkdomainexpire_domain_list.txt

Содержимое:

internet-lab.ru
mail.ru

Добавляем пользовательские параметры в конфиг заббикс агента. Создаём файл checkdomainexpire.conf в папке /etc/zabbix/zabbix_agentd.conf.d:

cd /etc/zabbix/zabbix_agentd.conf.d
touch checkdomainexpire.conf
chown zabbix\: checkdomainexpire.conf

Содержимое:

UserParameter=domainexpire[*],/usr/lib/zabbix/externalscripts/checkdomainexpire.sh $1
UserParameter=domainexpire.discovery,/usr/lib/zabbix/externalscripts/checkdomainexpire.sh

Измените пути к скрипту при необходимости.

Перезапускаем агент:

service zabbix-agent restart

Загружаем в заббикс шаблон: zbx_domain_expiration.xml

Привязываем шаблон к хосту заббикс сервера. Заббикс через автообнаружение создаст для каждого домена элемент данных и триггер.

zabbix

zabbix