From 887bfc3bc53f24fdafbc91c8935926e8df01e003 Mon Sep 17 00:00:00 2001 From: Joe Tsai Date: Thu, 11 Dec 2025 11:25:00 -0800 Subject: [PATCH] logpolicy: expose certain metrics as clientmetrics This allows us to detect how often we are actually filching (and therefore whether to maintain this feature). It also reports the storage size and amount of dropped bytes. Updates tailscale/corp#21363 Signed-off-by: Joe Tsai --- logpolicy/logpolicy.go | 3 +++ logpolicy/logtail_metrics.go | 29 +++++++++++++++++++++++++++++ logpolicy/logtail_nometrics.go | 10 ++++++++++ 3 files changed, 42 insertions(+) create mode 100644 logpolicy/logtail_metrics.go create mode 100644 logpolicy/logtail_nometrics.go diff --git a/logpolicy/logpolicy.go b/logpolicy/logpolicy.go index f7491783a..741e02fc7 100644 --- a/logpolicy/logpolicy.go +++ b/logpolicy/logpolicy.go @@ -662,6 +662,9 @@ func (opts Options) init(disableLogging bool) (*logtail.Config, *Policy) { } } lw := logtail.NewLogger(conf, opts.Logf) + if conf.MetricsDelta != nil { + exportClientMetrics(lw) + } var logOutput io.Writer = lw diff --git a/logpolicy/logtail_metrics.go b/logpolicy/logtail_metrics.go new file mode 100644 index 000000000..87fa7de89 --- /dev/null +++ b/logpolicy/logtail_metrics.go @@ -0,0 +1,29 @@ +// Copyright (c) Tailscale Inc & AUTHORS +// SPDX-License-Identifier: BSD-3-Clause + +//go:build !ts_omit_logtail && !ts_omit_clientmetrics + +package logpolicy + +import ( + "expvar" + + "tailscale.com/logtail" + "tailscale.com/util/clientmetric" +) + +func exportClientMetrics(logger *logtail.Logger) { + if m, _ := logger.ExpVar().(interface{ Get(string) expvar.Var }); m != nil { + if m2, _ := m.Get("buffer").(interface{ Get(string) expvar.Var }); m2 != nil { + if v, _ := m2.Get("counter_filched_bytes").(*expvar.Int); v != nil { + clientmetric.NewCounterFunc("logtail_filched_bytes", v.Value) + } + if v, _ := m2.Get("counter_dropped_bytes").(*expvar.Int); v != nil { + clientmetric.NewCounterFunc("logtail_dropped_bytes", v.Value) + } + if v, _ := m2.Get("gauge_stored_bytes").(*expvar.Int); v != nil { + clientmetric.NewGaugeFunc("logtail_stored_bytes", v.Value) + } + } + } +} diff --git a/logpolicy/logtail_nometrics.go b/logpolicy/logtail_nometrics.go new file mode 100644 index 000000000..51ce04689 --- /dev/null +++ b/logpolicy/logtail_nometrics.go @@ -0,0 +1,10 @@ +// Copyright (c) Tailscale Inc & AUTHORS +// SPDX-License-Identifier: BSD-3-Clause + +//go:build ts_omit_logtail || ts_omit_clientmetrics + +package logpolicy + +import "tailscale.com/logtail" + +func exportClientMetrics(logger *logtail.Logger) {}