wgengine/magicsock: add home DERP region usermetric (#18062)
Expose the node's home DERP region ID as a Prometheus gauge via the usermetrics endpoint. Fixes #18061 Signed-off-by: Raj Singh <raj@tailscale.com>
This commit is contained in:
@@ -216,17 +216,28 @@ func (c *Conn) derpRegionCodeLocked(regionID int) string {
|
|||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// setHomeDERPGaugeLocked updates the home DERP gauge metric.
|
||||||
|
//
|
||||||
|
// c.mu must be held.
|
||||||
|
func (c *Conn) setHomeDERPGaugeLocked(derpNum int) {
|
||||||
|
if c.homeDERPGauge != nil {
|
||||||
|
c.homeDERPGauge.Set(float64(derpNum))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// c.mu must NOT be held.
|
// c.mu must NOT be held.
|
||||||
func (c *Conn) setNearestDERP(derpNum int) (wantDERP bool) {
|
func (c *Conn) setNearestDERP(derpNum int) (wantDERP bool) {
|
||||||
c.mu.Lock()
|
c.mu.Lock()
|
||||||
defer c.mu.Unlock()
|
defer c.mu.Unlock()
|
||||||
if !c.wantDerpLocked() {
|
if !c.wantDerpLocked() {
|
||||||
c.myDerp = 0
|
c.myDerp = 0
|
||||||
|
c.setHomeDERPGaugeLocked(0)
|
||||||
c.health.SetMagicSockDERPHome(0, c.homeless)
|
c.health.SetMagicSockDERPHome(0, c.homeless)
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
if c.homeless {
|
if c.homeless {
|
||||||
c.myDerp = 0
|
c.myDerp = 0
|
||||||
|
c.setHomeDERPGaugeLocked(0)
|
||||||
c.health.SetMagicSockDERPHome(0, c.homeless)
|
c.health.SetMagicSockDERPHome(0, c.homeless)
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
@@ -238,6 +249,7 @@ func (c *Conn) setNearestDERP(derpNum int) (wantDERP bool) {
|
|||||||
metricDERPHomeChange.Add(1)
|
metricDERPHomeChange.Add(1)
|
||||||
}
|
}
|
||||||
c.myDerp = derpNum
|
c.myDerp = derpNum
|
||||||
|
c.setHomeDERPGaugeLocked(derpNum)
|
||||||
c.health.SetMagicSockDERPHome(derpNum, c.homeless)
|
c.health.SetMagicSockDERPHome(derpNum, c.homeless)
|
||||||
|
|
||||||
if c.privateKey.IsZero() {
|
if c.privateKey.IsZero() {
|
||||||
|
|||||||
@@ -406,6 +406,10 @@ type Conn struct {
|
|||||||
|
|
||||||
// metrics contains the metrics for the magicsock instance.
|
// metrics contains the metrics for the magicsock instance.
|
||||||
metrics *metrics
|
metrics *metrics
|
||||||
|
|
||||||
|
// homeDERPGauge is the usermetric gauge for the home DERP region ID.
|
||||||
|
// This can be nil when [Options.Metrics] are not enabled.
|
||||||
|
homeDERPGauge *usermetric.Gauge
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetDebugLoggingEnabled controls whether spammy debug logging is enabled.
|
// SetDebugLoggingEnabled controls whether spammy debug logging is enabled.
|
||||||
@@ -744,6 +748,9 @@ func NewConn(opts Options) (*Conn, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
c.metrics = registerMetrics(opts.Metrics)
|
c.metrics = registerMetrics(opts.Metrics)
|
||||||
|
if opts.Metrics != nil {
|
||||||
|
c.homeDERPGauge = opts.Metrics.NewGauge("tailscaled_home_derp_region_id", "DERP region ID of this node's home relay server")
|
||||||
|
}
|
||||||
|
|
||||||
if d4, err := c.listenRawDisco("ip4"); err == nil {
|
if d4, err := c.listenRawDisco("ip4"); err == nil {
|
||||||
c.logf("[v1] using BPF disco receiver for IPv4")
|
c.logf("[v1] using BPF disco receiver for IPv4")
|
||||||
|
|||||||
Reference in New Issue
Block a user