@@ -48,6 +48,7 @@ var keyFlag = flag.String("key", "", "SSH fingerprint (with SHA256: prefix) of t
4848var bastionFlag = flag .String ("bastion" , "" , "address of the bastion(s) to reverse proxy through, comma separated, the first online one is selected" )
4949var testCertFlag = flag .Bool ("testcert" , false , "use rootCA.pem for connections to the bastion" )
5050var 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
5253type 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