且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

zabbix企业应用之监控域名过期时间与ssl证书过期时间

更新时间:2022-09-19 10:22:23

如果各位维护过n多个域名,可能会对备案与续费有所了解,备案是十分麻烦,各种流程,而续费的话,虽然比较简单,但如果你没有提前续费,可能导致域名不可用,甚至被他人给恶意注册,为了解决这样的问他,我今天给各位分享一下,如何使用zabbix监控域名过期时间与ssl证书过期时间,默认的触发器是在域名或ssl证书要过期前60天通知。

下面是监控域名过期时间的效果图

zabbix企业应用之监控域名过期时间与ssl证书过期时间

下面是监控ssl证书过期时间效果图

zabbix企业应用之监控域名过期时间与ssl证书过期时间

如何实现:

一、客户端

1、修改zabbix_agentd.conf文件

在zabbix_agentd.conf最后添加以下内容

1
2
UserParameter=check_domain_beian[*],python /usr/local/zabbix_server/bin/check_domain_beian.py $1
UserParameter=check_ssl_cert_expire[*],/bin/bash usr/local/zabbix_server/bin/check_ssl_cert_expire.sh $1 $2

其中check_domain_beian是监控域名过期时间,check_ssl_cert_expire是监控ssl证书过期时间

2、把下面脚本放入客户端的bin里(我的是放在/usr/local/zabbix_server/bin)

监控域名过期时间的脚本/usr/local/zabbix_server/bin/check_domain_beian.py内容为

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
#/usr/bin/env python
#author:denglei
#email:dl528888@gmail.com
import urllib2
import urllib
import sys
import datetime
import time
import re
check_api='http://whomsy.com/api/%s?output=json'%sys.argv[1]
header={"User-Agent""Mozilla-Firefox5.0"}
result = urllib2.urlopen(check_api)
check_result = result.read()
print check_result
c=re.findall("GODADDY.COM*",check_result)
cc=re.findall("GoDaddy*",check_result)
if len(c) == 0 and len(cc) == 0:
    c=re.findall("Registrar Registration Expiration Date.*",check_result)
    if len(c) == 0:
        c=re.findall("Expiration Date.*",check_result)
    m=re.search("\d+-\d+-\d+..\d+:\d+:\d+",c[0])
    d=m.group()
    e=re.sub('T',' ',d)
elif len(c) ==0 and len(cc) != 0:
    c=re.findall("Record expires on.*",check_result)
    m=re.search("\d+-\d+-\d+",c[0])
    d=m.group()
    e=time.strftime("%Y-%m-%d %T",time.strptime(d,'%Y-%m-%d'))
else:
    c=re.findall("Expiration Date.*",check_result)
    m=re.search("\d+-\w+-\d+",c[0])
    if m is None:
        m=re.search("\w+ \w+ \d+ \d+:\d+:\d+ \w+ \d+",c[0])
        d=m.group()
        e=time.strftime("%Y-%m-%d %T",time.strptime(d,'%a %b %d %H:%M:%S %Z %Y'))
    else:
        d=m.group()
        e=time.strftime("%Y-%m-%d %T",time.strptime(d,'%d-%b-%Y'))
if len(c) == 0:
    e=''
def conver_time(start_time):
    start_time=start_time
    now_time=time.strftime('%Y-%m-%d %H:%M:%S')
    warn_start=datetime.datetime.strptime(start_time,"%Y-%m-%d %H:%M:%S")
    warn_finish=datetime.datetime.strptime(now_time,"%Y-%m-%d %H:%M:%S")
    #td=warn_finish - warn_start
    td=warn_start - warn_finish
    warn_continue=(td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) / 10**6
    if warn_continue >= 86400 :
    day = warn_continue // 86400
    return day
if  len(e) != 0:
    print conver_time(e)
else:
    print '1'

我是使用python来实现,使用whomsy接口获取信息,然后通过正则过滤出结果。

ps:网上虽然有很多接口可以使用,但好多都是过期或者需要花钱的,免费的话,也限制了监控的频率,我的域名比较多所以只能自己弄了。

下面是监控ssl证书的脚本check_ssl_cert_expire.sh内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#/bin/bash
host=$1
port=$2
end_date=`openssl s_client -host $host -port $port -showcerts </dev/null 2>/dev/null |
          sed -n '/BEGIN CERTIFICATE/,/END CERT/p' |
      openssl x509 -text 2>/dev/null |
      sed -n 's/ *Not After : *//p'`
if [ -n "$end_date" ]
then
    end_date_seconds=`date '+%s' --date "$end_date"`
# date指令format字符串时间。
    now_seconds=`date '+%s'`
    echo "($end_date_seconds-$now_seconds)/24/3600" bc
fi

ps:这个脚本是我在网上找的,非原创

重要:如果想使用这个脚本监控ssl证书,需要ssl证书在服务器里使用,否则没办法监控的。

3、重启zabbix客户端服务

1
2
ps -ef|grep zabbix|grep -v grep|awk '{print $2}'|xargs kill -9
/usr/local/zabbix/sbin/zabbix_agentd -c /usr/local/zabbix/conf/zabbix_agentd.conf

二、服务端

1、域名过期时间的项目

zabbix企业应用之监控域名过期时间与ssl证书过期时间

我是1小时监控一次,大家可以设置更长,但别大于一天。

2、监控域名过期时间的触发器

zabbix企业应用之监控域名过期时间与ssl证书过期时间

只要还有60天就过期报警,报警级别是“一般严重”,我这里报警级别为”一般严重“为短信或邮件通知,”严重“报警为语音报警通知。

3、监控ssl证书过期时间项目

zabbix企业应用之监控域名过期时间与ssl证书过期时间

4、监控ssl证书过期时间的触发器

zabbix企业应用之监控域名过期时间与ssl证书过期时间

我监控的话,是一个主机监控多个域名或者ssl证书,所以我没有弄成模板,如果你想一个主机监控一个域名,可以弄成模板。有问题留言,我会及时反馈。







 本文转自 reinxu 51CTO博客,原文链接:http://blog.51cto.com/dl528888/1609028,如需转载请自行联系原作者