diff --git a/wgengine/magicsock/magicsock.go b/wgengine/magicsock/magicsock.go index 66ebc8dea..a06e8a31f 100644 --- a/wgengine/magicsock/magicsock.go +++ b/wgengine/magicsock/magicsock.go @@ -54,8 +54,8 @@ import ( "tailscale.com/types/netmap" "tailscale.com/types/nettype" "tailscale.com/util/clientmetric" - "tailscale.com/util/netconv" "tailscale.com/util/mak" + "tailscale.com/util/netconv" "tailscale.com/util/uniq" "tailscale.com/version" "tailscale.com/wgengine/monitor" @@ -603,6 +603,7 @@ func (c *Conn) stopPeriodicReSTUNTimerLocked() { // c.mu must NOT be held. func (c *Conn) updateEndpoints(why string) { + metricUpdateEndpoints.Add(1) defer func() { c.mu.Lock() defer c.mu.Unlock() @@ -1048,7 +1049,7 @@ func (c *Conn) determineEndpoints(ctx context.Context) ([]tailcfg.Endpoint, erro } var already map[netaddr.IPPort]tailcfg.EndpointType // endpoint -> how it was found - var eps []tailcfg.Endpoint // unique endpoints + var eps []tailcfg.Endpoint // unique endpoints ipp := func(s string) (ipp netaddr.IPPort) { ipp, _ = netaddr.ParseIPPort(s) @@ -2768,6 +2769,7 @@ func (c *Conn) ReSTUN(why string) { // raced with a shutdown. return } + metricReSTUNCalls.Add(1) // If the user stopped the app, stop doing work. (When the // user stops Tailscale via the GUI apps, ipn/local.go @@ -2917,6 +2919,7 @@ func (c *Conn) rebind(curPortFate currentPortFate) error { // Rebind closes and re-binds the UDP sockets and resets the DERP connection. // It should be followed by a call to ReSTUN. func (c *Conn) Rebind() { + metricRebindCalls.Add(1) if err := c.rebind(keepCurrentPort); err != nil { c.logf("%w", err) return @@ -4138,6 +4141,10 @@ var ( metricNumPeers = clientmetric.NewGauge("magicsock_netmap_num_peers") metricNumDERPConns = clientmetric.NewGauge("magicsock_num_derp_conns") + metricRebindCalls = clientmetric.NewCounter("magicsock_rebind_calls") + metricReSTUNCalls = clientmetric.NewCounter("magicsock_restun_calls") + metricUpdateEndpoints = clientmetric.NewCounter("magicsock_update_endpoints") + // Sends (data or disco) metricSendDERPQueued = clientmetric.NewCounter("magicsock_send_derp_queued") metricSendDERPErrorChan = clientmetric.NewCounter("magicsock_send_derp_error_chan") diff --git a/wgengine/userspace.go b/wgengine/userspace.go index 8a392d731..f94692720 100644 --- a/wgengine/userspace.go +++ b/wgengine/userspace.go @@ -1203,7 +1203,10 @@ func (e *userspaceEngine) linkChange(changed bool, cur *interfaces.State) { why := "link-change-minor" if changed { why = "link-change-major" + metricNumMajorChanges.Add(1) e.magicConn.Rebind() + } else { + metricNumMinorChanges.Add(1) } e.magicConn.ReSTUN(why) } @@ -1551,4 +1554,7 @@ func (ls fwdDNSLinkSelector) PickLink(ip netaddr.IP) (linkName string) { var ( metricMagicDNSPacketIn = clientmetric.NewGauge("magicdns_packet_in") // for 100.100.100.100 metricReflectToOS = clientmetric.NewGauge("packet_reflect_to_os") + + metricNumMajorChanges = clientmetric.NewCounter("wgengine_major_changes") + metricNumMinorChanges = clientmetric.NewCounter("wgengine_minor_changes") )