mirror of
				https://github.com/coredns/coredns.git
				synced 2025-10-27 08:14:18 -04:00 
			
		
		
		
	Metrics (#1579)
* plugin/metrics: set server address in context
Allow cross server block metrics to co-exist; for this we should label
each metric with the server label. Put this information in the context
and provide a helper function to get it out.
Abstracting with entirely away with difficult as the release client_go
(0.8.0) doesn't have the CurryWith functions yet. So current use is like
so:
define metric, with server label:
	RcodeCount = prometheus.NewCounterVec(prometheus.CounterOpts{
		Namespace: plugin.Namespace,
		Subsystem: "forward",
		Name:      "response_rcode_count_total",
		Help:      "Counter of requests made per upstream.",
	}, []string{"server", "rcode", "to"})
And report ith with the helper function metrics.WithServer:
	RcodeCount.WithLabelValues(metrics.WithServer(ctx), rc, p.addr).Add(1)
			
			
This commit is contained in:
		| @@ -245,6 +245,11 @@ func (s *Server) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) | ||||
| 		} | ||||
|  | ||||
| 		if h, ok := s.zones[string(b[:l])]; ok { | ||||
|  | ||||
| 			// Set server's address in the context so plugins can reference back to this, | ||||
| 			// This will makes those metrics unique. | ||||
| 			ctx = context.WithValue(ctx, plugin.ServerCtx{}, s.Addr) | ||||
|  | ||||
| 			if r.Question[0].Qtype != dns.TypeDS { | ||||
| 				if h.FilterFunc == nil { | ||||
| 					rcode, _ := h.pluginChain.ServeDNS(ctx, w, r) | ||||
| @@ -287,6 +292,10 @@ func (s *Server) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) | ||||
|  | ||||
| 	// Wildcard match, if we have found nothing try the root zone as a last resort. | ||||
| 	if h, ok := s.zones["."]; ok && h.pluginChain != nil { | ||||
|  | ||||
| 		// See comment above. | ||||
| 		ctx = context.WithValue(ctx, plugin.ServerCtx{}, s.Addr) | ||||
|  | ||||
| 		rcode, _ := h.pluginChain.ServeDNS(ctx, w, r) | ||||
| 		if !plugin.ClientWrite(rcode) { | ||||
| 			DefaultErrorFunc(w, r, rcode) | ||||
| @@ -359,11 +368,11 @@ const ( | ||||
| 	maxreentries = 10 | ||||
| ) | ||||
|  | ||||
| // Key is the context key for the current server | ||||
| type Key struct{} | ||||
|  | ||||
| // loopKey is the context key for counting self loops | ||||
| type loopKey struct{} | ||||
| type ( | ||||
| 	// Key is the context key for the current server | ||||
| 	Key     struct{} | ||||
| 	loopKey struct{} // loopKey is the context key for counting self loops | ||||
| ) | ||||
|  | ||||
| // enableChaos is a map with plugin names for which we should open CH class queries as | ||||
| // we block these by default. | ||||
|   | ||||
		Reference in New Issue
	
	Block a user