@@ -11,66 +11,71 @@ import (
1111)
1212
1313var (
14- dnsRequests = promauto .NewCounterVec (prometheus.CounterOpts {
14+ dnsRequestsCounter = promauto .NewCounterVec (prometheus.CounterOpts {
1515 Name : "observer_dns_requests" ,
1616 Help : "Total number of sent DNS requests" ,
1717 }, []string {"resolver" })
18- dnsFailures = promauto .NewCounterVec (prometheus.CounterOpts {
18+ dnsFailuresCounter = promauto .NewCounterVec (prometheus.CounterOpts {
1919 Name : "observer_dns_failures" ,
2020 Help : "Total number of failed DNS requests" ,
2121 }, []string {"resolver" })
22- dnsLatency = prometheus .NewGaugeVec (prometheus.GaugeOpts {
22+ dnsLatencyGauge = prometheus .NewGaugeVec (prometheus.GaugeOpts {
2323 Name : "observer_dns_latency" ,
2424 Help : "Latency of DNS reequest." ,
2525 }, []string {"resolver" })
26- dnsAge = prometheus .NewGaugeVec (prometheus.GaugeOpts {
26+ dnsAgeGauge = prometheus .NewGaugeVec (prometheus.GaugeOpts {
2727 Name : "observer_dns_age" ,
2828 Help : "Age of DNS healthcheck record." ,
2929 }, []string {"resolver" })
3030)
3131
3232func init () {
33- prometheus .MustRegister (dnsLatency )
34- prometheus .MustRegister (dnsAge )
33+ prometheus .MustRegister (dnsLatencyGauge )
34+ prometheus .MustRegister (dnsAgeGauge )
3535}
3636
37- func sampleDns (targets []string , qname string ) {
37+ func sampleDns (targets []string , qname string ) error {
3838 for _ , target := range targets {
39- f := dnsFailures .With (prometheus.Labels {
39+
40+ dnsFailures := dnsFailuresCounter .With (prometheus.Labels {
4041 "resolver" : target ,
4142 })
42- f . Add ( float64 ( 0 ))
43- dnsRequests .With (prometheus.Labels {
43+
44+ dnsRequestsCounter .With (prometheus.Labels {
4445 "resolver" : target ,
4546 }).Inc ()
46- c := dns.Client {}
47- m := dns.Msg {}
48- m .SetQuestion (qname , dns .TypeTXT )
49- start := time .Now ()
50- r , _ , err := c .Exchange (& m , fmt .Sprintf ("%s:53" , target ))
47+
48+ dnsClient := dns.Client {}
49+ dnsMessage := dns.Msg {}
50+ dnsMessage .SetQuestion (qname , dns .TypeTXT )
51+
52+ r , rtt , err := dnsClient .Exchange (& dnsMessage , fmt .Sprintf ("%s:53" , target ))
5153 if err != nil {
52- f .Inc ()
53- return
54+ dnsFailures .Inc ()
55+ return err
5456 }
55- dnsLatency .With (prometheus.Labels {
56- "resolver" : target ,
57- }).Set (time .Since (start ).Seconds ())
57+
5858 if len (r .Answer ) == 0 {
59- return
59+ return fmt . Errorf ( "dns message lenght %d" , len ( r . Answer ))
6060 }
61+
62+ dnsLatencyGauge .With (prometheus.Labels {
63+ "resolver" : target ,
64+ }).Set (rtt .Seconds ())
65+
6166 for _ , ans := range r .Answer {
6267 if t , ok := ans .(* dns.TXT ); ok {
6368 if len (t .Txt ) > 0 {
6469 stamp , err := strconv .Atoi (t .Txt [0 ])
6570 if err != nil {
66- fmt .Println ("Failed to parse healthcheck record" )
67- return
71+ return fmt .Errorf ("failed to parse healthcheck record" )
6872 }
69- dnsAge .With (prometheus.Labels {
73+ dnsAgeGauge .With (prometheus.Labels {
7074 "resolver" : target ,
7175 }).Set (float64 (int (time .Now ().Unix ()) - stamp ))
7276 }
7377 }
7478 }
7579 }
80+ return nil
7681}
0 commit comments