Returning the nodename as a label

This commit is contained in:
Justine 2022-07-03 17:27:57 +02:00
parent 9b65111a7a
commit 4c02456cd0

View File

@ -33,22 +33,30 @@ def gen_metrics():
Return them as a list Return them as a list
''' '''
metrics = [ metrics = [
Gauge('server_zone_count', 'Number of zones'), Gauge('server_zone_count', 'Number of zones', ['node']),
Gauge('mod_rrl', 'Queries that were truncated or dropped because of response rate limiting', ['type']), Gauge('mod_rrl', 'Queries that were truncated or dropped because of response rate limiting', ['type', 'node']),
Gauge('mod_stats_request_protocol', 'requests via udp or tcp in ipv4', ['protocol']), Gauge('mod_stats_request_protocol', 'requests via udp or tcp in ipv4', ['protocol', 'node']),
Gauge('mod_stats_server_operation', 'Total number of incoming queries', ['type']), Gauge('mod_stats_server_operation', 'Total number of incoming queries', ['type', 'node']),
Gauge('mod_stats_request_bytes', 'Bytes received responding to queries', ['type']), Gauge('mod_stats_request_bytes', 'Bytes received responding to queries', ['type', 'node']),
Gauge('mod_stats_response_bytes', 'Bytes sent responding to queries', ['type']), Gauge('mod_stats_response_bytes', 'Bytes sent responding to queries', ['type', 'node']),
Gauge('mod_stats_edns_presence', 'DNS Extension (EDNS) present in request or response', ['type']), Gauge('mod_stats_edns_presence', 'DNS Extension (EDNS) present in request or response', ['type', 'node']),
Gauge('mod_stats_flag_presence', 'Flag present in request', ['flag']), Gauge('mod_stats_flag_presence', 'Flag present in request', ['flag', 'node']),
Gauge('mod_stats_response_code', 'outgoing response code', ['code']), Gauge('mod_stats_response_code', 'outgoing response code', ['code', 'node']),
Gauge('mod_stats_request_edns_option', 'Extended DNS (EDNS) option in request', ['option']), Gauge('mod_stats_request_edns_option', 'Extended DNS (EDNS) option in request', ['option', 'node']),
Gauge('mod_stats_response_edns_option', 'Extended DNS (EDNS) option in response', ['option']), Gauge('mod_stats_response_edns_option', 'Extended DNS (EDNS) option in response', ['option', 'node']),
Gauge('mod_stats_reply_nodata', 'RFC 2308 Nodata in reply', ['type']), Gauge('mod_stats_reply_nodata', 'RFC 2308 Nodata in reply', ['type', 'node']),
Gauge('mod_stats_query_type', 'Number of queries by type', ['type']), Gauge('mod_stats_query_type', 'Number of queries by type', ['type', 'node']),
] ]
return metrics return metrics
def get_nodename():
'''
Returns the hostname.
'''
from socket import gethostname
hostname = gethostname()
return str(hostname)
def populate_metrics(stats, metrics): def populate_metrics(stats, metrics):
''' '''
Take dict of stats and list of metrics (all summaries) Take dict of stats and list of metrics (all summaries)
@ -56,10 +64,11 @@ def populate_metrics(stats, metrics):
Return the metrics Return the metrics
''' '''
#These metrics don't use labels #These metrics don't use labels
nolabel_metrics = ["server_zone_count"] nolabel_metrics = []
for statname in stats: for statname in stats:
statvalue = stats[statname] statvalue = stats[statname]
nodename = get_nodename()
if statname not in nolabel_metrics: if statname not in nolabel_metrics:
#Getting the statname, its label's value, and corresponding metric to set to it #Getting the statname, its label's value, and corresponding metric to set to it
#A metrics label value is implied by the last field in the stats name #A metrics label value is implied by the last field in the stats name
@ -75,8 +84,9 @@ def populate_metrics(stats, metrics):
if statname == metric._name and label != "Nolabel": if statname == metric._name and label != "Nolabel":
labelname = metric._labelnames labelname = metric._labelnames
for i in labelname: for i in labelname:
labelname = i if i != "node":
metric.labels(label).set(statvalue) labelname = i
metric.labels(label, nodename).set(statvalue)
elif statname == metric._name and label == "Nolabel": elif statname == metric._name and label == "Nolabel":
metric.set(statvalue) metric.set(statvalue)