diff options
author | 2022-06-23 12:40:13 +0200 | |
---|---|---|
committer | 2022-06-23 03:40:13 -0700 | |
commit | 501e50312e27c2aca18d50a8cb3c189b0bfcbab1 (patch) | |
tree | 392011cfb094b3c49f93a9dd5204f763288971d8 | |
parent | c9eedcb7d11a5c4c90aa4c538cbb07f3bffaaee5 (diff) | |
download | coredns-501e50312e27c2aca18d50a8cb3c189b0bfcbab1.tar.gz coredns-501e50312e27c2aca18d50a8cb3c189b0bfcbab1.tar.zst coredns-501e50312e27c2aca18d50a8cb3c189b0bfcbab1.zip |
plugin/trace: make zipkin and datadog reporters log errors using CoreDNS logger (#5452)
-rw-r--r-- | plugin/trace/logger.go | 20 | ||||
-rw-r--r-- | plugin/trace/trace.go | 11 |
2 files changed, 28 insertions, 3 deletions
diff --git a/plugin/trace/logger.go b/plugin/trace/logger.go new file mode 100644 index 000000000..649938715 --- /dev/null +++ b/plugin/trace/logger.go @@ -0,0 +1,20 @@ +package trace + +import ( + clog "github.com/coredns/coredns/plugin/pkg/log" +) + +// loggerAdapter is a simple adapter around plugin logger made to implement io.Writer and ddtrace.Logger interface +// in order to log errors from span reporters as warnings +type loggerAdapter struct { + clog.P +} + +func (l *loggerAdapter) Write(p []byte) (n int, err error) { + l.P.Warning(string(p)) + return len(p), nil +} + +func (l *loggerAdapter) Log(msg string) { + l.P.Warning(msg) +} diff --git a/plugin/trace/trace.go b/plugin/trace/trace.go index 6bfd94dae..5c69b9249 100644 --- a/plugin/trace/trace.go +++ b/plugin/trace/trace.go @@ -4,6 +4,7 @@ package trace import ( "context" "fmt" + stdlog "log" "net/http" "sync" "sync/atomic" @@ -12,7 +13,7 @@ import ( "github.com/coredns/coredns/plugin" "github.com/coredns/coredns/plugin/metadata" "github.com/coredns/coredns/plugin/pkg/dnstest" - "github.com/coredns/coredns/plugin/pkg/log" + clog "github.com/coredns/coredns/plugin/pkg/log" "github.com/coredns/coredns/plugin/pkg/rcode" _ "github.com/coredns/coredns/plugin/pkg/trace" // Plugin the trace package. "github.com/coredns/coredns/request" @@ -35,6 +36,8 @@ const ( metaTraceIdKey = "trace/traceid" ) +var log = clog.NewWithPlugin("trace") + type traceTags struct { Name string Type string @@ -90,10 +93,11 @@ func (t *trace) OnStartup() error { case "datadog": tracer := opentracer.New( tracer.WithAgentAddr(t.Endpoint), - tracer.WithDebugMode(log.D.Value()), + tracer.WithDebugMode(clog.D.Value()), tracer.WithGlobalTag(ext.SpanTypeDNS, true), tracer.WithServiceName(t.serviceName), tracer.WithAnalyticsRate(t.datadogAnalyticsRate), + tracer.WithLogger(&loggerAdapter{log}), ) t.tracer = tracer t.tagSet = tagByProvider["datadog"] @@ -105,7 +109,8 @@ func (t *trace) OnStartup() error { } func (t *trace) setupZipkin() error { - reporter := zipkinhttp.NewReporter(t.Endpoint) + logOpt := zipkinhttp.Logger(stdlog.New(&loggerAdapter{log}, "", 0)) + reporter := zipkinhttp.NewReporter(t.Endpoint, logOpt) recorder, err := zipkin.NewEndpoint(t.serviceName, t.serviceEndpoint) if err != nil { log.Warningf("build Zipkin endpoint found err: %v", err) |