From b7402d0dd67adb4be02b1ebdfbf7adcc121757f8 Mon Sep 17 00:00:00 2001 From: Christian Weiske Date: Sun, 23 Jun 2024 17:02:12 +0200 Subject: [PATCH] Add dnsperftest plugin to monitor response times of multiple DNS servers --- plugins/network/dns/dnsperftest | 114 ++++++++++++++++++ .../dns/example-graphs/dnsperftest-day.png | Bin 0 -> 34771 bytes 2 files changed, 114 insertions(+) create mode 100755 plugins/network/dns/dnsperftest create mode 100644 plugins/network/dns/example-graphs/dnsperftest-day.png diff --git a/plugins/network/dns/dnsperftest b/plugins/network/dns/dnsperftest new file mode 100755 index 00000000..3b12980e --- /dev/null +++ b/plugins/network/dns/dnsperftest @@ -0,0 +1,114 @@ +#!/bin/bash +# -*- bash -*- + +: << =cut + +=head1 NAME + +dnsperftest - Monitor response times of multiple DNS servers + +=head1 DESCRIPTION + +Query all name servers in /etc/resolv.conf for a list of domains +and report the average response time. + +=head1 CONFIGURATION + +DNS servers in /etc/resolv.conf are used automatically + +"env.resolvconf" can be used to pass a custom resolv.conf path + +A list of default domains is checked + +Example configuration: + + [dnsperftest] + env.resolvconf /etc/resolv.conf.cweiske + env.domains fsf.org fsfe.org munin-monitoring.org + +=head1 AUTHORS + +L + +based on https://github.com/cleanbrowsing/dnsperftest + +=back + +=head1 LICENSE + +GPLv3 + +=head1 MAGIC MARKERS + + #%# family=auto + #%# capatilities=autoconf + +=cut + +DIG=${dig:-dig} + +DOMAINS=${domains:-www.google.com amazon.com facebook.com www.youtube.com www.reddit.com wikipedia.org twitter.com gmail.com www.google.com whatsapp.com} + +RESOLVCONF=${resolvconf:-/etc/resolv.conf} + +if [ "$1" == "autoconf" ]; then + if ! which "$DIG" >/dev/null; then + echo "no (missing 'dig' executable)" + exit 0 + elif ! which "bc" >/dev/null; then + echo "no (missing 'bc' executable)" + exit 0 + elif ! test -f "$RESOLVCONF"; then + echo "no (resolvconf does not exist at $RESOLVCONF)" + exit 0 + fi + echo "yes" + exit 0 +fi + +if [ -f "$RESOLVCONF" ]; then + NAMESERVERS=$(grep ^nameserver "$RESOLVCONF" | cut -d " " -f 2) +fi + +if [ -z "$NAMESERVERS" ]; then + echo "No nameservers found" + exit 1 +fi + +if [ "$1" == "config" ]; then + echo "graph_title DNS server resonse times" + echo "graph_vlabel seconds" + echo "graph_category dns" + echo "graph_args --base 1000 -l 0" + for nameserverIp in $NAMESERVERS; do + fieldname=$(echo "$nameserverIp" | sed 's/[.:]/_/g') + echo "ns$fieldname.label $nameserverIp" + done + exit 0 +fi + +for nameserverIp in $NAMESERVERS; do + ftime=0 + + totaldomains=0 + for domain in $DOMAINS; do + totaldomains=$((totaldomains + 1)) + ttime=$( + "$DIG" +tries=1 +time=2 +stats @"$nameserverIp" "$domain"\ + | grep "Query time:"\ + | cut -d : -f 2-\ + | cut -d " " -f 2 + ) + if [ -z "$ttime" ]; then + #"time out" is 1s = 1000ms + ttime=1000 + elif [ "$ttime" = "0" ]; then + ttime=1 + fi + ftime=$((ftime + ttime)) + done + avg=$(bc -l <<< "scale=5; $ftime/$totaldomains / 1000") + + fieldname=$(echo "$nameserverIp" | sed 's/[.:]/_/g') + echo "ns$fieldname.value $avg" +done diff --git a/plugins/network/dns/example-graphs/dnsperftest-day.png b/plugins/network/dns/example-graphs/dnsperftest-day.png new file mode 100644 index 0000000000000000000000000000000000000000..7806fd5aa29696bacaccb7f5ec06ac026a65c8ca GIT binary patch literal 34771 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

NlWk zto?R0UV&IQ5HlO6F!kAOB*Op9w01ShPVS~jFPN9@Mat0$${*%YYb(rl4cJcbS0ZNr z^;cG>crteUnC!?Qvg+iW@MxCsBm!K>YG~fO3b9mY*LGD_MMN{^Nn~@`cysf$4pptX zS8sp#9Hf?SO)RNI_1N&5lzx^TcJU6v-2v~Vd^^4$oK$D8Toash@xl+?vHIr4Kb@o2 zGTlL50eMn(YO7-8xLSMq`Q!hmD}o~tG1p6nh4?=L*wATCS$h(i#9;!m*(h`n9KHB^ za!)Ned|^9^pZ)mQW9+j#PKsJ>vYCLtF9xx^rABqEK*O#NWuMEd=Gj`G6;?QcU z94B;j*r6)&CT(m?%;wfvR{%6FaSTjO>M^~>z{He@X(rR9X2pjmivECk%6(%Ze&ur? zx%KMQ8DV&$yU12|nF|H_Z3rozpB-Pth2M6MqZ<}iLue61s}~k7Zyz=d2^rEESM!p| z#bpFN54{C95W`_b?{#)&YA10`*m)+)VvYw(S_`76##gUKsCPijWbEDRcW^87eg4JNP( zF~V=pS`_<0HW-v+);#JVGEL}+yA_s|1qWfI4xk2Y2XCF5@$&F|#r|NkWLas|M`#5J zlpAoA^dBeoIoDnOM|o^F5J>qcNh@PJ!ulxuIpBNPzwqcv>5HJnaH) z&{&0xHMK;L7{a*L^(VxUZ-mo}h@3)M1sfY1!yqN6X(Ks8x7bk5?02E|CtNClSG`?u zkZytE7U?WkNJBw+$Hz~fD0yvEK-V2X4Jyz3zk0!WSWb=KPOmEc`}c2J8g=eNVLznZ z2;SQ>JQd1Q95}1%8*Mv@Led>l<5)LuaWC~eTWCcxa2_Utf8ut zD|hHKjl6HT^lieZflP^;2zW-&-phShE@IIad(F`-qH4AIt6Q|CQ9#KqHk|*g0woMcZIw*-#*BN@*7G)XJePyv6l6%jSb}@CKzb2 zOv{+%S6WmstTBfJcEzwkmzVDWB%YzAtEdBhQqBQ@n12tm0IM5qz1a0dM<$3b=%=U&rRGr(SC_{FfzSY;UO%Y|n5*|xzkk9|N9f_{+2nuhY;I2HC@P&* zR#>RakxX^rSYK6DRZ=oAIJon>|J}0MMmRQ^h=|DYlR6b9-U-p{QmE&EWH=;2{QUio z86TeF)Kv!j`bJW&4?-Cx@Ezdeo3lOCefr^cmkLY7XPSE5|426Yh+*Gfs4n7sA_j3% zeKVmhxf+?|^1h!kSL<8_nVA^RnGPlt(ne7)Uml(xPqw}C|4tvjx|W|gVO!Wu8yo-? z5RgDP3=%;=>X!(FZIo10VlMJtwzOP=Py);pdC>Cq*)>NzkBTyA@N)9-;OmKl0D{L( zOf#5xIKc=y%`hbQf>?1V2KHAHHnn5GW3viX0di03Uv4gK84r7USP%vt5yYRf=r2xlm9D;Xfv( z2(f)*EiK+hU-9+y^oVpoq)s}EoXZ?>ez(rp)XWU32AUch;rR{+=>+)rKziy$r{%d` zMNL)J`1p8yW_x=(>}YT?kX{Eb73w&q6^aQuVt?4?JYO1tw~UQ}kP_H)aHSy)+1}Qs zvf@zz`!}rh)>g^=0MMbdv$wyFjSW6FO#GN+N2thZYim;^oOG!2h9nIZ7S~=EUFZ}I zAf}Yf+4X$9Lqt+SEkB@h*9Nf8c2NZ*)vvzlP zxx|?9v5>g?K4SMXO9dmD6CXg(52SUswjgef<6i$D_lcX^uvy~k7ZIwrpQD8yj}ibv zr9Hc@Zn|TYIT9wF*oi(!*0k(SPHEP-=H~Slrz(>itP$_sdF;hi$cA=wcW(qA?(WvY3e(Xcabo6E zg=qmLQA*z+@d_6MelAqBK