Go to content Go to menu Go to search

Мониторинг даты освобождения домена в Zabbix при помощи whois

Постановка задачи

Имеем несколько доменов, необходимо мониторить не просрочена ли оплата и продлен ли домен.

Обычно если домен не продлен, то через 30 дней он освобождается. Нижеприведенный скрипт и шаблон для zabbix проверяют дату "Expire" домена, и если до нее осталось менее чем 28 дней (это значит домен не продлен), то срабатывает триггер.

Скрипты

Список доменов кладем в файл /etc/zabbix/scripts/domains.txt

domain1.ru
domain2.com

Discovery - cкрипт /etc/zabbix/scripts/domain_discovery.sh

1
2
3
4
5
#!/bin/bash
JSON=$(for i in `cat /etc/zabbix/scripts/domains.txt | grep -v '#'`; do printf "{\"{#DOMAIN}\":\"$i\"},"; done | sed 's/^\(.*\).$/\1/')
printf "{\"data\":["
printf "$JSON"
printf "]}"

Скрипт мониторинга /etc/zabbix/scripts/domain_left_days_before_expire.pl

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#!/usr/bin/perl
use strict;
use warnings;
use DateTime;
use DateTime::Format::DateParse; # yum install perl-DateTime-Format-DateParse
use DateTime::Format::Natural;   # yum install perl-DateTime-Format-Natural
use Data::Dumper;

# ====== Preferences and constants ====== #
my $debug=0;
my $WHOIS = '/usr/bin/whois';
my $expire;
# ========= End of preferences ========== #

my $domain = shift;
die "Usage: $0 <domain>\n" if !$domain;
exit if $domain eq '#';

my @OUT = `$WHOIS $domain`;

foreach my $line (@OUT) {
    chomp $line;
    # Registry Expiry Date: 2021-10-13T20:03:46Z
    if ($line =~ /.*Expiry.*:\s(.+)$/i) {
        print "Rule nuber 1 faired! \n" if $debug;
        $expire = DateTime::Format::DateParse->parse_datetime($1)->epoch;
    }
    # Record expires on: Sat Feb  8 16:51:25 2020
    if ($line =~ /.*expires.*:\s(.+)$/i) {
        print "Rule nuber 2 faired! \n" if $debug;
        $expire = DateTime::Format::DateParse->parse_datetime($1)->epoch;
    }
    # free-date:     2020-01-14
    if ($line =~ /.*free-date.*:\s(.+)$/i) {
        print "Rule nuber 3 faired! \n" if $debug;
        $expire = DateTime::Format::DateParse->parse_datetime($1)->epoch;
    }
    # expire:       22.10.2020
    if ($line =~ /expire:\s+(.+)$/i) {
        print "Rule nuber 4 faired! \n" if $debug;
        my $parser = DateTime::Format::Natural->new;
        $expire = $parser->parse_datetime($1)->epoch;
    }
    # Expiration Date: 10-oct-2020
    if ($line =~ /^Expiration Date:\s(\d+-\S+-\d+)$/) {
        print "Rule nuber 5 faired! \n" if $debug;
        $expire = DateTime::Format::DateParse->parse_datetime($1)->epoch;
    }
    # Expiration Date:22-Oct-2021 10:32:44 UTC
    if ($line =~ /^Expiration Date:(\d+-\S+-\d+ \d+:\d+:\d+ \S+)$/) {
        print "Rule nuber 6 faired! \n" if $debug;
        $expire = DateTime::Format::DateParse->parse_datetime($1)->epoch;
    }
}
die "Unable get expire for domain $domain" if !$expire;
print "Doman: $domain expire: $expire \n" if $debug;


#print $expire->strftime('%F %T'),"\n";
my $now = time;
my $time_left=int(($expire-$now)/60/60/24);
print "$time_left \n";

Конфиг userparameter /etc/zabbix/zabbix_agentd.d/domain.conf

UserParameter=domain.discovery[*], /bin/bash /etc/zabbix/scripts/domain_discovery.sh
UserParameter=domain.expire[*], /etc/zabbix/scripts/domain_left_days_before_expire.pl $1

Шаблон для zabbix:

Шаблон для версии Zabbix 4.0.6: Domain_Expiration.zip

Enjoy!


при публикации материалов с данного сайта обратная ссылка на сайт обязательна.
valynkin.ru © no rights reserved