-
Notifications
You must be signed in to change notification settings - Fork 0
/
check_dns.py
95 lines (75 loc) · 2.47 KB
/
check_dns.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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#!/bin/env/python3
# -*- coding: utf-8 -*-
import dns
import dns.resolver
import argparse as arg
import prometheus_client as prom
# intialize variables
dns_output = {}
# initialize argparse
args = arg.ArgumentParser(description="Checks dns resolution")
args.add_argument("-H",
"--hostname",
help="The hostname to check",
type=str,
required=True)
args.add_argument("-a",
"--address",
help="The address to check",
type=str)
args.add_argument("-s",
"--server",
help="The server to check",
type=str,
default="8.8.8.8")
args.add_argument("--tcp",
help="Use tcp instead of udp",
action="store_true")
args.add_argument("-r",
"--record",
help="The record to check",
type=str,
default="A")
# parse arguements
args = args.parse_args()
# initialize prometheus
registry = prom.CollectorRegistry()
dns_check = prom.Gauge('dns_check',
'Checks if dns is reachable 0=OK, 1=TIMEOUT, 2=ERROR',
['hostname', 'address',
'server', 'port', 'record'])
# initialize dns resolver
resolver = dns.resolver.Resolver()
resolver.timeout = 5
resolver.lifetime = 5
if args.server:
resolver.nameservers = [args.server]
# register prometheus metrics
registry.register(dns_check)
try:
if args.tcp:
dns_output1 = dns.resolver.query(args.hostname, args.record, tcp=True)
else:
dns_output1 = dns.resolver.query(args.hostname, args.record)
print(dns_output1)
dns_check.labels(args.hostname,
args.address,
args.server,
args.tcp,
args.record).set(0)
except dns.exception.DNSException as e:
if e == dns.exception.Timeout:
dns_check.labels(args.hostname,
args.address,
args.server,
args.tcp,
args.record).set(1)
else:
dns_check.labels(args.hostname,
args.address,
args.server,
args.tcp,
args.timeout,
args.record).set(2)
# print the prometheus metrics
print(prom.generate_latest(registry).decode("utf-8"))