code
This commit is contained in:
7
whois/example.host.name.json
Normal file
7
whois/example.host.name.json
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"domains": [
|
||||||
|
"example.com",
|
||||||
|
"example.org",
|
||||||
|
"example.net"
|
||||||
|
]
|
||||||
|
}
|
||||||
31
zabbix-whois-check.py
Normal file
31
zabbix-whois-check.py
Normal 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
39
zabbix-whois-discovery.py
Normal 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
131
zabbix-whois-template.xml
Normal 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()}<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>
|
||||||
Reference in New Issue
Block a user