@@ -85,7 +85,11 @@ func (d *DnsQuery) Gather(acc telegraf.Accumulator) error {
8585 "record_type" : d .RecordType ,
8686 }
8787
88- dnsQueryTime , err := d .getDnsQueryTime (domain , server )
88+ dnsQueryTime , rcode , err := d .getDnsQueryTime (domain , server )
89+ if rcode >= 0 {
90+ tags ["rcode" ] = dns .RcodeToString [rcode ]
91+ fields ["rcode_value" ] = rcode
92+ }
8993 if err == nil {
9094 setResult (Success , fields , tags )
9195 fields ["query_time_ms" ] = dnsQueryTime
@@ -130,7 +134,7 @@ func (d *DnsQuery) setDefaultValues() {
130134 }
131135}
132136
133- func (d * DnsQuery ) getDnsQueryTime (domain string , server string ) (float64 , error ) {
137+ func (d * DnsQuery ) getDnsQueryTime (domain string , server string ) (float64 , int , error ) {
134138 dnsQueryTime := float64 (0 )
135139
136140 c := new (dns.Client )
@@ -140,20 +144,20 @@ func (d *DnsQuery) getDnsQueryTime(domain string, server string) (float64, error
140144 m := new (dns.Msg )
141145 recordType , err := d .parseRecordType ()
142146 if err != nil {
143- return dnsQueryTime , err
147+ return dnsQueryTime , - 1 , err
144148 }
145149 m .SetQuestion (dns .Fqdn (domain ), recordType )
146150 m .RecursionDesired = true
147151
148152 r , rtt , err := c .Exchange (m , net .JoinHostPort (server , strconv .Itoa (d .Port )))
149153 if err != nil {
150- return dnsQueryTime , err
154+ return dnsQueryTime , - 1 , err
151155 }
152156 if r .Rcode != dns .RcodeSuccess {
153- return dnsQueryTime , errors . New ( fmt .Sprintf ("Invalid answer name %s after %s query for %s\n " , domain , d .RecordType , domain ) )
157+ return dnsQueryTime , r . Rcode , fmt .Errorf ("Invalid answer (%s) from %s after %s query for %s" , dns . RcodeToString [ r . Rcode ], server , d .RecordType , domain )
154158 }
155159 dnsQueryTime = float64 (rtt .Nanoseconds ()) / 1e6
156- return dnsQueryTime , nil
160+ return dnsQueryTime , r . Rcode , nil
157161}
158162
159163func (d * DnsQuery ) parseRecordType () (uint16 , error ) {
0 commit comments