Revert "log/forward plugins: Extend dns query logging (#2240)" (#2256)

This reverts commit 8045aa279b.
This commit is contained in:
Miek Gieben 2018-10-31 21:03:46 +00:00 committed by GitHub
parent e332c8d8cb
commit 1ef0a02b46
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 5 additions and 55 deletions

View file

@ -91,10 +91,6 @@ On each endpoint, the timeouts of the communication are set by default and autom
* dialTimeout by default is 30 sec, and can decrease automatically down to 100ms * dialTimeout by default is 30 sec, and can decrease automatically down to 100ms
* readTimeout by default is 2 sec, and can decrease automatically down to 200ms * readTimeout by default is 2 sec, and can decrease automatically down to 200ms
## Metadata
* forward/resolving_proxy : provide the IP address and port of the upstream resolver used to resolve the current DNS query.
## Metrics ## Metrics
If monitoring is enabled (via the *prometheus* directive) then the following metric are exported: If monitoring is enabled (via the *prometheus* directive) then the following metric are exported:

View file

@ -12,7 +12,6 @@ import (
"github.com/coredns/coredns/plugin" "github.com/coredns/coredns/plugin"
"github.com/coredns/coredns/plugin/debug" "github.com/coredns/coredns/plugin/debug"
"github.com/coredns/coredns/plugin/metadata"
clog "github.com/coredns/coredns/plugin/pkg/log" clog "github.com/coredns/coredns/plugin/pkg/log"
"github.com/coredns/coredns/request" "github.com/coredns/coredns/request"
@ -60,15 +59,6 @@ func (f *Forward) Len() int { return len(f.proxies) }
// Name implements plugin.Handler. // Name implements plugin.Handler.
func (f *Forward) Name() string { return "forward" } func (f *Forward) Name() string { return "forward" }
//declareMetadata adds to the context a metadata parameter which will return the passed value.
func (f *Forward) declareMetadata(ctx context.Context, name string, value string) bool {
label := f.Name()+"/"+name
if metadata.IsLabel(label) {
return metadata.SetValueFunc(ctx, label, func() string { return value })
}
return false
}
// ServeDNS implements plugin.Handler. // ServeDNS implements plugin.Handler.
func (f *Forward) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (int, error) { func (f *Forward) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (int, error) {
@ -158,12 +148,10 @@ func (f *Forward) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg
formerr := state.ErrorMessage(dns.RcodeFormatError) formerr := state.ErrorMessage(dns.RcodeFormatError)
w.WriteMsg(formerr) w.WriteMsg(formerr)
f.declareMetadata(ctx, "resolving_proxy", proxy.addr)
return 0, nil return 0, nil
} }
w.WriteMsg(ret) w.WriteMsg(ret)
f.declareMetadata(ctx, "resolving_proxy", proxy.addr)
return 0, nil return 0, nil
} }

View file

@ -72,10 +72,6 @@ The following place holders are supported:
* `{>do}`: is the EDNS0 DO (DNSSEC OK) bit set in the query * `{>do}`: is the EDNS0 DO (DNSSEC OK) bit set in the query
* `{>id}`: query ID * `{>id}`: query ID
* `{>opcode}`: query OPCODE * `{>opcode}`: query OPCODE
* `{local}`: server's IP address, for IPv6 addresses these are enclosed in brackets: `[::1]`
* `{A}`: number of the A type answers in the response
* `{AAAA}`: number of the AAAA type answers in the response
* `{forward/resolving_proxy}`: if the query was forwarded to a resolver, the IP address and port of that replied resolver, else empty. The metadata plugin needs to be enabled to use this placeholder
The default Common Log Format is: The default Common Log Format is:

View file

@ -57,7 +57,7 @@ func (l Logger) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg)
// If we don't set up a class in config, the default "all" will be added // If we don't set up a class in config, the default "all" will be added
// and we shouldn't have an empty rule.Class. // and we shouldn't have an empty rule.Class.
if rule.Class[response.All] || rule.Class[class] { if rule.Class[response.All] || rule.Class[class] {
rep := replacer.New(ctx, r, rrw, CommonLogEmptyValue) rep := replacer.New(r, rrw, CommonLogEmptyValue)
rule.Log.Println(rep.Replace(rule.Format)) rule.Log.Println(rep.Replace(rule.Format))
} }

View file

@ -1,13 +1,11 @@
package replacer package replacer
import ( import (
"context"
"strconv" "strconv"
"strings" "strings"
"time" "time"
"github.com/coredns/coredns/plugin/pkg/dnstest" "github.com/coredns/coredns/plugin/pkg/dnstest"
"github.com/coredns/coredns/plugin/metadata"
"github.com/coredns/coredns/request" "github.com/coredns/coredns/request"
"github.com/miekg/dns" "github.com/miekg/dns"
@ -33,7 +31,7 @@ type replacer struct {
// values into the replacer. rr may be nil if it is not // values into the replacer. rr may be nil if it is not
// available. emptyValue should be the string that is used // available. emptyValue should be the string that is used
// in place of empty string (can still be empty string). // in place of empty string (can still be empty string).
func New(ctx context.Context, r *dns.Msg, rr *dnstest.Recorder, emptyValue string) Replacer { func New(r *dns.Msg, rr *dnstest.Recorder, emptyValue string) Replacer {
req := request.Request{W: rr, Req: r} req := request.Request{W: rr, Req: r}
rep := replacer{ rep := replacer{
replacements: map[string]string{ replacements: map[string]string{
@ -47,8 +45,6 @@ func New(ctx context.Context, r *dns.Msg, rr *dnstest.Recorder, emptyValue strin
"{size}": strconv.Itoa(req.Len()), "{size}": strconv.Itoa(req.Len()),
"{remote}": addrToRFC3986(req.IP()), "{remote}": addrToRFC3986(req.IP()),
"{port}": req.Port(), "{port}": req.Port(),
"{local}": addrToRFC3986(req.LocalIP()),
"{forward/resolving_proxy}": getMetadata(ctx, "forward/resolving_proxy"),
}, },
emptyValue: emptyValue, emptyValue: emptyValue,
} }
@ -62,8 +58,6 @@ func New(ctx context.Context, r *dns.Msg, rr *dnstest.Recorder, emptyValue strin
rep.replacements["{duration}"] = strconv.FormatFloat(time.Since(rr.Start).Seconds(), 'f', -1, 64) + "s" rep.replacements["{duration}"] = strconv.FormatFloat(time.Since(rr.Start).Seconds(), 'f', -1, 64) + "s"
if rr.Msg != nil { if rr.Msg != nil {
rep.replacements[headerReplacer+"rflags}"] = flagsToString(rr.Msg.MsgHdr) rep.replacements[headerReplacer+"rflags}"] = flagsToString(rr.Msg.MsgHdr)
rep.replacements["{A}"] = answersCount(rr.Msg, dns.TypeA)
rep.replacements["{AAAA}"] = answersCount(rr.Msg, dns.TypeAAAA)
} }
} }
@ -169,30 +163,6 @@ func addrToRFC3986(addr string) string {
return addr return addr
} }
//getMetadata will return value from Metadata or empty string
func getMetadata(ctx context.Context, label string) string {
if ctx != nil {
valueFunc := metadata.ValueFunc(ctx, label)
if valueFunc != nil {
return valueFunc()
}
}
return ""
}
//answersCount will calculate a number of answers which have the type passed
func answersCount(m *dns.Msg, rtype uint16) string {
count := 0
if m != nil {
for i := 0; i < len(m.Answer); i++ {
if m.Answer[i].Header().Rrtype == rtype {
count++
}
}
}
return strconv.Itoa(count)
}
const ( const (
timeFormat = "02/Jan/2006:15:04:05 -0700" timeFormat = "02/Jan/2006:15:04:05 -0700"
headerReplacer = "{>" headerReplacer = "{>"

View file

@ -17,7 +17,7 @@ func TestNewReplacer(t *testing.T) {
r.SetQuestion("example.org.", dns.TypeHINFO) r.SetQuestion("example.org.", dns.TypeHINFO)
r.MsgHdr.AuthenticatedData = true r.MsgHdr.AuthenticatedData = true
replaceValues := New(nil, r, w, "") replaceValues := New(r, w, "")
switch v := replaceValues.(type) { switch v := replaceValues.(type) {
case replacer: case replacer:
@ -47,7 +47,7 @@ func TestSet(t *testing.T) {
r.SetQuestion("example.org.", dns.TypeHINFO) r.SetQuestion("example.org.", dns.TypeHINFO)
r.MsgHdr.AuthenticatedData = true r.MsgHdr.AuthenticatedData = true
repl := New(nil, r, w, "") repl := New(r, w, "")
repl.Set("name", "coredns.io.") repl.Set("name", "coredns.io.")
repl.Set("type", "A") repl.Set("type", "A")

View file

@ -22,7 +22,7 @@ const (
NotMatch = "not_match" NotMatch = "not_match"
) )
func newReplacer(r *dns.Msg) replacer.Replacer { return replacer.New(nil, r, nil, "") } func newReplacer(r *dns.Msg) replacer.Replacer { return replacer.New(r, nil, "") }
// condition is a rewrite condition. // condition is a rewrite condition.
type condition func(string, string) bool type condition func(string, string) bool