From c0636693697292a2c88b61f1f25c51e913240d6d Mon Sep 17 00:00:00 2001 From: Scott Hollenbeck Date: Mon, 9 Sep 2024 17:05:45 -0400 Subject: [PATCH] First version of the resolvectl munin plugin (#1450) * First version of the resolvectl munin plugin * Fixed autoconf check --------- Co-authored-by: Scott Hollenbeck --- plugins/resolvectl/resolvectl | 123 ++++++++++++++++++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100755 plugins/resolvectl/resolvectl diff --git a/plugins/resolvectl/resolvectl b/plugins/resolvectl/resolvectl new file mode 100755 index 00000000..a36a7c04 --- /dev/null +++ b/plugins/resolvectl/resolvectl @@ -0,0 +1,123 @@ +#!/bin/sh +# -*- sh -*- + +set -e + +: << =cut + +=head1 NAME + +resolvectl - Plugin to monitor resolvectl statistics. + +=head1 APPLICABLE SYSTEMS + +Any server running systemd-resolved + +=head1 CONFIGURATION + +[resolvectl] +user root + +=head1 NOTES + +Uses the command "resolvectl statistics" + +=head1 AUTHOR + +Scott Hollenbeck + +=head1 LICENSE + +GPLv2 + +=head1 VERSION + +1.0 + +=head1 MAGIC MARKERS + + #%# family=auto + #%# capabilities=autoconf + +=cut + +. "$MUNIN_LIBDIR/plugins/plugin.sh" + +if [ "$1" = "autoconf" ]; then + resolvectl statistics >/dev/null 2>&1 + ret=$? + if [ "$ret" -eq 0 ]; then + echo yes + exit 0 + else + if [ "$ret" -eq 1 ]; then + echo "no (could not run \"resolvectl\")" + exit 0 + else + echo "no (unknown resolvectl return value "$ret")" + exit 0 + fi + fi +fi + +if [ "$1" = "config" ]; then + + echo 'graph_title resolvectl statistics' + echo 'graph_args --base 1000 -l 0' + echo 'graph_vlabel count' + echo 'graph_category dns' + echo 'current-transactions.label current transactions' + echo 'current-transactions.type DERIVE' + echo 'current-transactions.min 0' + echo 'total-transactions.label total transactions' + echo 'total-transactions.type DERIVE' + echo 'total-transactions.min 0' + echo 'cache-size.label cache size' + echo 'cache-size.type DERIVE' + echo 'cache-size.min 0' + echo 'cache-hits.label cache hits' + echo 'cache-hits.type DERIVE' + echo 'cache-hits.min 0' + echo 'cache-misses.label cache misses' + echo 'cache-misses.type DERIVE' + echo 'cache-misses.min 0' + echo 'total-timeouts.label total timeouts' + echo 'total-timeouts.type DERIVE' + echo 'total-timeouts.min 0' + echo 'total-timeouts-stale.label total timeouts stale' + echo 'total-timeouts-stale.type DERIVE' + echo 'total-timeouts-stale.min 0' + echo 'total-failures.label total failures' + echo 'total-failures.type DERIVE' + echo 'total-failures.min 0' + echo 'total-failures-stale.label total failures stale' + echo 'total-failures-stale.type DERIVE' + echo 'total-failures-stale.min 0' + echo 'dnssec-secure.label dnssec secure' + echo 'dnssec-secure.type DERIVE' + echo 'dnssec-secure.min 0' + echo 'dnssec-insecure.label dnssec insecure' + echo 'dnssec-insecure.type DERIVE' + echo 'dnssec-insecure.min 0' + echo 'dnssec-bogus.label dnssec bogus' + echo 'dnssec-bogus.type DERIVE' + echo 'dnssec-bogus.min 0' + echo 'dnssec-indeterminate.label dnssec indeterminate' + echo 'dnssec-indeterminate.type DERIVE' + echo 'dnssec-indeterminate.min 0' + exit 0 +fi + +resolvectl statistics | awk '/Current Transactions/{print "current-transactions.value " $NF};\ +/Total Transactions/{print "total-transactions.value " $NF};\ +/Current Cache Size/{print "cache-size.value " $NF};\ +/Cache Hits/{print "cache-hits.value " $NF};\ +/Cache Misses/{print "cache-misses.value " $NF};\ +/Total Timeouts:/{print "total-timeouts.value " $NF};\ +/Total Timeouts \(Stale Data Served/{print "total-timeouts-stale.value " $NF};\ +/Total Failure Responses:/{print "total-failures.value " $NF};\ +/Total Failure Responses \(Stale Data Served/{print "total-failures-stale.value " $NF};\ +/Secure/{print "dnssec-secure.value " $NF};\ +/Insecure/{print "dnssec-insecure.value " $NF};\ +/Bogus/{print "dnssec-bogus.value " $NF};\ +/Indeterminate/{print "dnssec-indeterminate.value " $NF};'