From 08c8ccb48e45d8e5d7c719ce1a9d09756b64d376 Mon Sep 17 00:00:00 2001 From: Mike O'Driscoll Date: Tue, 25 Mar 2025 12:49:54 -0400 Subject: [PATCH] prober: add address family label for udp metrics (#15413) Add a label which differentiates the address family for STUN checks. Also initialize the derpprobe_attempts_total and derpprobe_seconds_total metrics by adding 0 for the alternate fail/ok case. Updates tailscale/corp#27249 Signed-off-by: Mike O'Driscoll --- prober/derp.go | 14 +++++++++++++- prober/prober.go | 4 ++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/prober/derp.go b/prober/derp.go index 01a7d3086..98e61ff54 100644 --- a/prober/derp.go +++ b/prober/derp.go @@ -596,11 +596,23 @@ func (d *derpProber) updateMap(ctx context.Context) error { } func (d *derpProber) ProbeUDP(ipaddr string, port int) ProbeClass { + initLabels := make(Labels) + ip := net.ParseIP(ipaddr) + + if ip.To4() != nil { + initLabels["address_family"] = "ipv4" + } else if ip.To16() != nil { // Will return an IPv4 as 16 byte, so ensure the check for IPv4 precedes this + initLabels["address_family"] = "ipv6" + } else { + initLabels["address_family"] = "unknown" + } + return ProbeClass{ Probe: func(ctx context.Context) error { return derpProbeUDP(ctx, ipaddr, port) }, - Class: "derp_udp", + Class: "derp_udp", + Labels: initLabels, } } diff --git a/prober/prober.go b/prober/prober.go index d80db773a..4bd522f26 100644 --- a/prober/prober.go +++ b/prober/prober.go @@ -404,10 +404,14 @@ func (p *Probe) recordEndLocked(err error) { p.mSeconds.WithLabelValues("ok").Add(latency.Seconds()) p.latencyHist.Value = latency p.latencyHist = p.latencyHist.Next() + p.mAttempts.WithLabelValues("fail").Add(0) + p.mSeconds.WithLabelValues("fail").Add(0) } else { p.latency = 0 p.mAttempts.WithLabelValues("fail").Inc() p.mSeconds.WithLabelValues("fail").Add(latency.Seconds()) + p.mAttempts.WithLabelValues("ok").Add(0) + p.mSeconds.WithLabelValues("ok").Add(0) } p.successHist.Value = p.succeeded p.successHist = p.successHist.Next()