mirror of
				https://github.com/coredns/coredns.git
				synced 2025-11-03 18:53:13 -05:00 
			
		
		
		
	* 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)
		
	
		
			
				
	
	
		
			25 lines
		
	
	
		
			677 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			25 lines
		
	
	
		
			677 B
		
	
	
	
		
			Go
		
	
	
	
	
	
package metrics
 | 
						|
 | 
						|
import (
 | 
						|
	"github.com/coredns/coredns/plugin"
 | 
						|
 | 
						|
	"golang.org/x/net/context"
 | 
						|
)
 | 
						|
 | 
						|
// WithServer returns the current server handling the request. It returns the
 | 
						|
// server listening address: <scheme>://[<bind>]:<port> Normally this is
 | 
						|
// something like "dns://:53", but if the bind plugin is used, i.e. "bind
 | 
						|
// 127.0.0.53", it will be "dns://127.0.0.53:53", etc. If not address is found
 | 
						|
// the empty string is returned.
 | 
						|
//
 | 
						|
// Basic usage with a metric:
 | 
						|
//
 | 
						|
// <metric>.WithLabelValues(metrics.WithServer(ctx), labels..).Add(1)
 | 
						|
func WithServer(ctx context.Context) string {
 | 
						|
	srv := ctx.Value(plugin.ServerCtx{})
 | 
						|
	if srv == nil {
 | 
						|
		return ""
 | 
						|
	}
 | 
						|
	return srv.(string)
 | 
						|
}
 |