Răsfoiți Sursa

don't register metrics in loops

Jay Wren 11 luni în urmă
părinte
comite
f29e21b411
2 a modificat fișierele cu 14 adăugiri și 5 ștergeri
  1. 1 2
      inside.go
  2. 13 3
      interface.go

+ 1 - 2
inside.go

@@ -3,7 +3,6 @@ package nebula
 import (
 import (
 	"net/netip"
 	"net/netip"
 
 
-	"github.com/rcrowley/go-metrics"
 	"github.com/sirupsen/logrus"
 	"github.com/sirupsen/logrus"
 	"github.com/slackhq/nebula/firewall"
 	"github.com/slackhq/nebula/firewall"
 	"github.com/slackhq/nebula/header"
 	"github.com/slackhq/nebula/header"
@@ -146,7 +145,7 @@ func (f *Interface) consumeInsidePackets(packets [][]byte, sizes []int, count in
 	// Send all accumulated packets in one batch
 	// Send all accumulated packets in one batch
 	if len(*batchPackets) > 0 {
 	if len(*batchPackets) > 0 {
 		batchSize := len(*batchPackets)
 		batchSize := len(*batchPackets)
-		metrics.GetOrRegisterHistogram("batch.udp_write_size", nil, metrics.NewUniformSample(1024)).Update(int64(batchSize))
+		f.batchMetrics.udpWriteSize.Update(int64(batchSize))
 
 
 		n, err := f.writers[q].WriteMulti(*batchPackets, *batchAddrs)
 		n, err := f.writers[q].WriteMulti(*batchPackets, *batchAddrs)
 		if err != nil {
 		if err != nil {

+ 13 - 3
interface.go

@@ -51,6 +51,12 @@ type InterfaceConfig struct {
 	l                     *logrus.Logger
 	l                     *logrus.Logger
 }
 }
 
 
+type batchMetrics struct {
+	udpReadSize  metrics.Histogram
+	tunReadSize  metrics.Histogram
+	udpWriteSize metrics.Histogram
+}
+
 type Interface struct {
 type Interface struct {
 	hostMap               *HostMap
 	hostMap               *HostMap
 	outside               udp.Conn
 	outside               udp.Conn
@@ -92,6 +98,7 @@ type Interface struct {
 	metricHandshakes    metrics.Histogram
 	metricHandshakes    metrics.Histogram
 	messageMetrics      *MessageMetrics
 	messageMetrics      *MessageMetrics
 	cachedPacketMetrics *cachedPacketMetrics
 	cachedPacketMetrics *cachedPacketMetrics
+	batchMetrics        *batchMetrics
 
 
 	l *logrus.Logger
 	l *logrus.Logger
 }
 }
@@ -194,6 +201,11 @@ func NewInterface(ctx context.Context, c *InterfaceConfig) (*Interface, error) {
 			sent:    metrics.GetOrRegisterCounter("hostinfo.cached_packets.sent", nil),
 			sent:    metrics.GetOrRegisterCounter("hostinfo.cached_packets.sent", nil),
 			dropped: metrics.GetOrRegisterCounter("hostinfo.cached_packets.dropped", nil),
 			dropped: metrics.GetOrRegisterCounter("hostinfo.cached_packets.dropped", nil),
 		},
 		},
+		batchMetrics: &batchMetrics{
+			udpReadSize:  metrics.GetOrRegisterHistogram("batch.udp_read_size", nil, metrics.NewUniformSample(1024)),
+			tunReadSize:  metrics.GetOrRegisterHistogram("batch.tun_read_size", nil, metrics.NewUniformSample(1024)),
+			udpWriteSize: metrics.GetOrRegisterHistogram("batch.udp_write_size", nil, metrics.NewUniformSample(1024)),
+		},
 
 
 		l: c.l,
 		l: c.l,
 	}
 	}
@@ -352,8 +364,6 @@ func (f *Interface) listenInBatch(reader io.ReadWriteCloser, batchReader BatchRe
 
 
 	conntrackCache := firewall.NewConntrackCacheTicker(f.conntrackCacheTimeout)
 	conntrackCache := firewall.NewConntrackCacheTicker(f.conntrackCacheTimeout)
 
 
-	tunBatchHist := metrics.GetOrRegisterHistogram("batch.tun_read_size", nil, metrics.NewUniformSample(1024))
-
 	for {
 	for {
 		n, err := batchReader.BatchRead(bufs, sizes)
 		n, err := batchReader.BatchRead(bufs, sizes)
 		if err != nil {
 		if err != nil {
@@ -366,7 +376,7 @@ func (f *Interface) listenInBatch(reader io.ReadWriteCloser, batchReader BatchRe
 			os.Exit(2)
 			os.Exit(2)
 		}
 		}
 
 
-		tunBatchHist.Update(int64(n))
+		f.batchMetrics.tunReadSize.Update(int64(n))
 
 
 		// Process all packets in the batch at once
 		// Process all packets in the batch at once
 		f.consumeInsidePackets(bufs, sizes, n, outs, nb, i, conntrackCache.Get(f.l), &batchPackets, &batchAddrs)
 		f.consumeInsidePackets(bufs, sizes, n, outs, nb, i, conntrackCache.Get(f.l), &batchPackets, &batchAddrs)