@@ -2,36 +2,27 @@ package main
22
33import (
44 "fmt"
5- "strconv"
6- "time"
7-
85 "github.com/miekg/dns"
96 "github.com/prometheus/client_golang/prometheus"
107 "github.com/prometheus/client_golang/prometheus/promauto"
118)
129
1310var (
1411 dnsRequestsCounter = promauto .NewCounterVec (prometheus.CounterOpts {
15- Name : "observer_dns_requests" ,
1612 Help : "Total number of sent DNS requests" ,
1713 }, []string {"resolver" })
1814 dnsFailuresCounter = promauto .NewCounterVec (prometheus.CounterOpts {
1915 Name : "observer_dns_failures" ,
2016 Help : "Total number of failed DNS requests" ,
2117 }, []string {"resolver" })
22- dnsLatencyGauge = prometheus .NewGaugeVec (prometheus.GaugeOpts {
23- Name : "observer_dns_latency " ,
18+ dnsRttGauge = prometheus .NewGaugeVec (prometheus.GaugeOpts {
19+ Name : "observer_dns_rtt " ,
2420 Help : "Latency of DNS reequest." ,
2521 }, []string {"resolver" })
26- dnsAgeGauge = prometheus .NewGaugeVec (prometheus.GaugeOpts {
27- Name : "observer_dns_age" ,
28- Help : "Age of DNS healthcheck record." ,
29- }, []string {"resolver" })
3022)
3123
3224func init () {
33- prometheus .MustRegister (dnsLatencyGauge )
34- prometheus .MustRegister (dnsAgeGauge )
25+ prometheus .MustRegister (dnsRttGauge )
3526}
3627
3728func sampleDns (targets []string , qname string ) error {
@@ -52,30 +43,17 @@ func sampleDns(targets []string, qname string) error {
5243 r , rtt , err := dnsClient .Exchange (& dnsMessage , fmt .Sprintf ("%s:53" , target ))
5344 if err != nil {
5445 dnsFailures .Inc ()
55- return err
46+ return fmt . Errorf ( "could not complete dns exchange: %w" , err )
5647 }
5748
5849 if len (r .Answer ) == 0 {
59- return fmt .Errorf ("dns message lenght %d " , len (r .Answer ))
50+ return fmt .Errorf ("dns message %d : %s " , len (r .Answer ), r . Answer )
6051 }
6152
62- dnsLatencyGauge .With (prometheus.Labels {
53+ dnsRttGauge .With (prometheus.Labels {
6354 "resolver" : target ,
6455 }).Set (rtt .Seconds ())
6556
66- for _ , ans := range r .Answer {
67- if t , ok := ans .(* dns.TXT ); ok {
68- if len (t .Txt ) > 0 {
69- stamp , err := strconv .Atoi (t .Txt [0 ])
70- if err != nil {
71- return fmt .Errorf ("failed to parse healthcheck record" )
72- }
73- dnsAgeGauge .With (prometheus.Labels {
74- "resolver" : target ,
75- }).Set (float64 (int (time .Now ().Unix ()) - stamp ))
76- }
77- }
78- }
7957 }
8058 return nil
8159}
0 commit comments