This commit is contained in:
2018-06-07 16:30:31 +02:00
parent 0d2665bac5
commit d67283a560
4 changed files with 208 additions and 0 deletions

View File

@@ -0,0 +1,7 @@
{
"domains": [
"example.com",
"example.org",
"example.net"
]
}

31
zabbix-whois-check.py Normal file
View File

@@ -0,0 +1,31 @@
#!/usr/bin/env python3
# checks when a domain is going to expire
# and sends the time to zabbix
# new version that reads from a json file
import sys
import os
import json
import whois
from pyzabbix import ZabbixMetric, ZabbixSender
wwwhost = sys.argv[1]
dir_path = os.path.dirname(os.path.realpath(__file__))
with open(dir_path+'/whois/'+wwwhost+'.json', 'r') as read_file:
domains = json.load(read_file)
for domain in domains['domains']:
w = whois.whois(domain)
if isinstance(w.expiration_date, list):
packet = ZabbixMetric(wwwhost, 'domain.expiry['+domain+']', w.expiration_date[0].timestamp()),
else:
packet = ZabbixMetric(wwwhost, 'domain.expiry['+domain+']', w.expiration_date.timestamp()),
result = ZabbixSender(use_config=True).send(packet)
## some tests
#print(w)
#print(w.domain_name, w.expiration_date)
#print(packet)
#print(result)

39
zabbix-whois-discovery.py Normal file
View File

@@ -0,0 +1,39 @@
#!/usr/bin/env python3
# read domains from a json array
# and feed them into zabbix
import sys
import os
import json
from pyzabbix import ZabbixMetric, ZabbixSender
wwwhost = sys.argv[1]
asdf = ''
idx = 0
dir_path = os.path.dirname(os.path.realpath(__file__))
with open(dir_path+'/whois/'+wwwhost+'.json', 'r') as read_file:
domains = json.load(read_file)
for idx, thing in enumerate(domains['domains']):
if idx == 0:
asdf += '{"{#WHOISDOMAIN}":"'+thing+'"}'
else:
asdf += ',{"{#WHOISDOMAIN}":"'+thing+'"}'
done = '{"data":['+asdf+']}'
packet = ZabbixMetric(wwwhost, 'domain.expiry.item', done),
result = ZabbixSender(use_config=True).send(packet)
## some tests
#print(done)
#print(packet)
#print(result)
## another test
#f = open('/tmp/zabbix-whois.txt', 'w')
#f.write(done)
#f.close()

131
zabbix-whois-template.xml Normal file
View File

@@ -0,0 +1,131 @@
<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
<version>3.4</version>
<date>2018-06-04T11:01:41Z</date>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<templates>
<template>
<template>Template Whois Expiry</template>
<name>Template Whois Expiry</name>
<description/>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<applications>
<application>
<name>Domains</name>
</application>
</applications>
<items/>
<discovery_rules>
<discovery_rule>
<name>Whois Domain Discovery</name>
<type>2</type>
<snmp_community/>
<snmp_oid/>
<key>domain.expiry.item</key>
<delay>0</delay>
<status>0</status>
<allowed_hosts/>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<params/>
<ipmi_sensor/>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<filter>
<evaltype>0</evaltype>
<formula/>
<conditions/>
</filter>
<lifetime>1d</lifetime>
<description>This is a trapper item, which means that an external script sends data to Zabbix Server on its own. A bit like the active agent I suppose.</description>
<item_prototypes>
<item_prototype>
<name>Domain {#WHOISDOMAIN} expiry date</name>
<type>2</type>
<snmp_community/>
<snmp_oid/>
<key>domain.expiry[{#WHOISDOMAIN}]</key>
<delay>0</delay>
<history>3d</history>
<trends>365d</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units>unixtime</units>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<params/>
<ipmi_sensor/>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Domains</name>
</application>
</applications>
<valuemap/>
<logtimefmt/>
<preprocessing/>
<jmx_endpoint/>
<application_prototypes/>
<master_item_prototype/>
</item_prototype>
</item_prototypes>
<trigger_prototypes>
<trigger_prototype>
<expression>{Template Whois Expiry:domain.expiry[{#WHOISDOMAIN}].last()} - {Template Whois Expiry:domain.expiry[{#WHOISDOMAIN}].now()}&lt;14d</expression>
<recovery_mode>0</recovery_mode>
<recovery_expression/>
<name>Domain {#WHOISDOMAIN} is about to expire</name>
<correlation_mode>0</correlation_mode>
<correlation_tag/>
<url/>
<status>0</status>
<priority>4</priority>
<description/>
<type>0</type>
<manual_close>0</manual_close>
<dependencies/>
<tags/>
</trigger_prototype>
</trigger_prototypes>
<graph_prototypes/>
<host_prototypes/>
<jmx_endpoint/>
</discovery_rule>
</discovery_rules>
<httptests/>
<macros/>
<templates/>
<screens/>
</template>
</templates>
</zabbix_export>