Changeset 707 in code for trunk/cmd/soju


Ignore:
Timestamp:
Nov 17, 2021, 2:58:18 PM (4 years ago)
Author:
contact
Message:

Add basic Prometheus metrics exporter

This only exports the default metrics for now.

References: https://todo.sr.ht/~emersion/soju/142

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/cmd/soju/main.go

    r705 r707  
    1919
    2020        "github.com/pires/go-proxyproto"
     21        "github.com/prometheus/client_golang/prometheus"
     22        "github.com/prometheus/client_golang/prometheus/promhttp"
    2123
    2224        "git.sr.ht/~emersion/soju"
     
    255257                                }
    256258                        }()
     259                case "http+prometheus":
     260                        if srv.MetricsRegistry == nil {
     261                                srv.MetricsRegistry = prometheus.DefaultRegisterer
     262                        }
     263
     264                        // Only allow localhost as listening host for security reasons.
     265                        // Users can always explicitly setup reverse proxies if desirable.
     266                        hostname, _, err := net.SplitHostPort(u.Host)
     267                        if err != nil {
     268                                log.Fatalf("invalid host in URI %q: %v", listen, err)
     269                        } else if hostname != "localhost" {
     270                                log.Fatalf("Prometheus listening host must be localhost")
     271                        }
     272
     273                        metricsHandler := promhttp.HandlerFor(prometheus.DefaultGatherer, promhttp.HandlerOpts{
     274                                MaxRequestsInFlight: 10,
     275                                Timeout:             10 * time.Second,
     276                                EnableOpenMetrics:   true,
     277                        })
     278                        metricsHandler = promhttp.InstrumentMetricHandler(prometheus.DefaultRegisterer, metricsHandler)
     279
     280                        httpSrv := http.Server{
     281                                Addr:    u.Host,
     282                                Handler: metricsHandler,
     283                        }
     284                        go func() {
     285                                if err := httpSrv.ListenAndServe(); err != nil {
     286                                        log.Fatalf("serving %q: %v", listen, err)
     287                                }
     288                        }()
    257289                default:
    258290                        log.Fatalf("failed to listen on %q: unsupported scheme", listen)
Note: See TracChangeset for help on using the changeset viewer.