Skip to content

Commit b6f4961

Browse files
committed
cmd/litewitness: add -listen-metrics flag
1 parent 550afe2 commit b6f4961

1 file changed

Lines changed: 28 additions & 5 deletions

File tree

cmd/litewitness/litewitness.go

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ var keyFlag = flag.String("key", "", "SSH fingerprint (with SHA256: prefix) of t
4848
var bastionFlag = flag.String("bastion", "", "address of the bastion(s) to reverse proxy through, comma separated, the first online one is selected")
4949
var testCertFlag = flag.Bool("testcert", false, "use rootCA.pem for connections to the bastion")
5050
var obscurityFlag = flag.Bool("obscurity", false, "enable obscurity mode (disable / and /logz endpoints)")
51+
var listenMetricsFlag = flag.String("listen-metrics", "", "address to listen for metrics requests, instead of exposing them on the main listener")
5152

5253
type ConnectionSet struct {
5354
connections map[string]func() // connection => cancel func
@@ -138,16 +139,35 @@ func main() {
138139
witnessMetrics := prometheus.WrapRegistererWithPrefix("witness_", litewitnessMetrics)
139140
witnessMetrics.MustRegister(w.Metrics()...)
140141

142+
metricsHandler := promhttp.HandlerFor(metricsRegistry, promhttp.HandlerOpts{
143+
ErrorLog: slog.NewLogLogger(slog.Default().Handler().WithAttrs(
144+
[]slog.Attr{slog.String("source", "metrics")},
145+
), slog.LevelWarn),
146+
})
147+
148+
var metricsSrv *http.Server
149+
if *listenMetricsFlag != "" {
150+
metricsSrv = &http.Server{
151+
Addr: *listenMetricsFlag,
152+
Handler: http.MaxBytesHandler(metricsHandler, 10*1024),
153+
ReadTimeout: 5 * time.Second,
154+
WriteTimeout: 5 * time.Second,
155+
BaseContext: func(net.Listener) context.Context { return ctx },
156+
}
157+
go func() {
158+
slog.Info("listening for metrics", "addr", *listenMetricsFlag)
159+
metricsSrv.ListenAndServe()
160+
}()
161+
}
162+
141163
mux := http.NewServeMux()
142164
mux.Handle("/", w)
143165
if !*obscurityFlag {
144166
mux.Handle("/logz", console)
145167
mux.Handle("/{$}", indexHandler(w))
146-
mux.Handle("/metrics", promhttp.HandlerFor(metricsRegistry, promhttp.HandlerOpts{
147-
ErrorLog: slog.NewLogLogger(slog.Default().Handler().WithAttrs(
148-
[]slog.Attr{slog.String("source", "metrics")},
149-
), slog.LevelWarn),
150-
}))
168+
if *listenMetricsFlag == "" {
169+
mux.Handle("/metrics", metricsHandler)
170+
}
151171
}
152172

153173
srv := &http.Server{
@@ -253,6 +273,9 @@ func main() {
253273
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
254274
defer cancel()
255275
srv.Shutdown(ctx)
276+
if metricsSrv != nil {
277+
metricsSrv.Shutdown(ctx)
278+
}
256279
case err := <-e:
257280
fatal("server error", "err", err)
258281
}

0 commit comments

Comments
 (0)