mirror of
https://github.com/lightninglabs/aperture.git
synced 2026-01-21 02:04:25 +01:00
Merge pull request #69 from ellemouton/mailboxMetrics
multi: mailbox metrics
This commit is contained in:
19
aperture.go
19
aperture.go
@@ -28,7 +28,6 @@ import (
|
||||
"github.com/lightningnetwork/lnd/lnrpc"
|
||||
"github.com/lightningnetwork/lnd/signal"
|
||||
"github.com/lightningnetwork/lnd/tor"
|
||||
"github.com/prometheus/client_golang/prometheus/promhttp"
|
||||
clientv3 "go.etcd.io/etcd/client/v3"
|
||||
"golang.org/x/crypto/acme/autocert"
|
||||
"golang.org/x/net/http2"
|
||||
@@ -181,6 +180,12 @@ func NewAperture(cfg *Config) *Aperture {
|
||||
func (a *Aperture) Start(errChan chan error) error {
|
||||
var err error
|
||||
|
||||
// Start the prometheus exporter.
|
||||
if err := StartPrometheusExporter(a.cfg.Prometheus); err != nil {
|
||||
return fmt.Errorf("unable to start the prometheus exporter: "+
|
||||
"%v", err)
|
||||
}
|
||||
|
||||
// Initialize our etcd client.
|
||||
a.etcdClient, err = clientv3.New(clientv3.Config{
|
||||
Endpoints: []string{a.cfg.Etcd.Host},
|
||||
@@ -654,15 +659,6 @@ func createProxy(cfg *Config, challenger *LndChallenger,
|
||||
return nil, nil, err
|
||||
}
|
||||
|
||||
// Ensure we spin up the necessary HTTP server to allow
|
||||
// promtheus to scrape us.
|
||||
go func() {
|
||||
http.Handle("/metrics", promhttp.Handler())
|
||||
fmt.Println(http.ListenAndServe(
|
||||
cfg.HashMail.PromListenAddr, nil),
|
||||
)
|
||||
}()
|
||||
|
||||
localServices = append(localServices, hashMailServices...)
|
||||
proxyCleanup = cleanup
|
||||
}
|
||||
@@ -714,6 +710,9 @@ func createHashMailServer(cfg *Config) ([]proxy.LocalService, func(), error) {
|
||||
}),
|
||||
)
|
||||
|
||||
// Export the gRPC information for the public gRPC server.
|
||||
grpc_prometheus.Register(hashMailGRPC)
|
||||
|
||||
// And a REST proxy for it as well.
|
||||
// The default JSON marshaler of the REST proxy only sets OrigName to
|
||||
// true, which instructs it to use the same field names as specified in
|
||||
|
||||
@@ -64,10 +64,6 @@ type HashMailConfig struct {
|
||||
Enabled bool `long:"enabled"`
|
||||
MessageRate time.Duration `long:"messagerate" description:"The average minimum time that should pass between each message."`
|
||||
MessageBurstAllowance int `long:"messageburstallowance" description:"The burst rate we allow for messages."`
|
||||
|
||||
// PromListenAddr is the listening address that we should use to allow
|
||||
// the main Prometheus server to scrape our metrics.
|
||||
PromListenAddr string `long:"promlistenaddr" description:"the interface we should listen on for prometheus"`
|
||||
}
|
||||
|
||||
type TorConfig struct {
|
||||
@@ -116,6 +112,10 @@ type Config struct {
|
||||
// Node Connect mailbox server.
|
||||
HashMail *HashMailConfig `group:"hashmail" namespace:"hashmail" description:"Configuration for the Lightning Node Connect mailbox server."`
|
||||
|
||||
// Prometheus is the config for setting up an endpoint for a Prometheus
|
||||
// server to scrape metrics from.
|
||||
Prometheus *PrometheusConfig `group:"prometheus" namespace:"prometheus" description:"Configuration setting up an endpoint that a Prometheus server can scrape."`
|
||||
|
||||
// DebugLevel is a string defining the log level for the service either
|
||||
// for all subsystems the same or individual level by subsystem.
|
||||
DebugLevel string `long:"debuglevel" description:"Debug level for the Aperture application and its subsystems."`
|
||||
|
||||
@@ -406,6 +406,8 @@ func (h *hashMailServer) InitStream(
|
||||
|
||||
h.streams[streamID] = freshStream
|
||||
|
||||
mailboxCount.Set(float64(len(h.streams)))
|
||||
|
||||
return &hashmailrpc.CipherInitResp{
|
||||
Resp: &hashmailrpc.CipherInitResp_Success{},
|
||||
}, nil
|
||||
@@ -478,6 +480,8 @@ func (h *hashMailServer) TearDownStream(ctx context.Context, streamID []byte,
|
||||
|
||||
delete(h.streams, sid)
|
||||
|
||||
mailboxCount.Set(float64(len(h.streams)))
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
54
prometheus.go
Normal file
54
prometheus.go
Normal file
@@ -0,0 +1,54 @@
|
||||
package aperture
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
|
||||
"github.com/prometheus/client_golang/prometheus"
|
||||
"github.com/prometheus/client_golang/prometheus/promhttp"
|
||||
)
|
||||
|
||||
var (
|
||||
// mailboxCount tracks the current number of active mailboxes.
|
||||
mailboxCount = prometheus.NewGauge(prometheus.GaugeOpts{
|
||||
Namespace: "hashmail",
|
||||
Name: "mailbox_count",
|
||||
})
|
||||
)
|
||||
|
||||
// PrometheusConfig is the set of configuration data that specifies if
|
||||
// Prometheus metric exporting is activated, and if so the listening address of
|
||||
// the Prometheus server.
|
||||
type PrometheusConfig struct {
|
||||
// Enabled, if true, then Prometheus metrics will be exported.
|
||||
Enabled bool `long:"enabled" description:"if true prometheus metrics will be exported"`
|
||||
|
||||
// ListenAddr is the listening address that we should use to allow the
|
||||
// main Prometheus server to scrape our metrics.
|
||||
ListenAddr string `long:"listenaddr" description:"the interface we should listen on for prometheus"`
|
||||
}
|
||||
|
||||
// StartPrometheusExporter registers all relevant metrics with the Prometheus
|
||||
// library, then launches the HTTP server that Prometheus will hit to scrape
|
||||
// our metrics.
|
||||
func StartPrometheusExporter(cfg *PrometheusConfig) error {
|
||||
// If we're not active, then there's nothing more to do.
|
||||
if !cfg.Enabled {
|
||||
return nil
|
||||
}
|
||||
|
||||
// Next, we'll register all our metrics.
|
||||
prometheus.MustRegister(mailboxCount)
|
||||
|
||||
// Finally, we'll launch the HTTP server that Prometheus will use to
|
||||
// scape our metrics.
|
||||
go func() {
|
||||
log.Infof("Prometheus metrics http endpoint being served on "+
|
||||
"%s", cfg.ListenAddr)
|
||||
|
||||
http.Handle("/metrics", promhttp.Handler())
|
||||
fmt.Println(http.ListenAndServe(cfg.ListenAddr, nil))
|
||||
}()
|
||||
|
||||
return nil
|
||||
}
|
||||
@@ -151,3 +151,9 @@ hashmail:
|
||||
enabled: true
|
||||
messagerate: 20ms
|
||||
messageburstallowance: 1000
|
||||
|
||||
# Enable the prometheus metrics exporter so that a prometheus server can scrape
|
||||
# the metrics.
|
||||
prometheus:
|
||||
enabled: true
|
||||
listenaddr: "localhost:9000"
|
||||
|
||||
Reference in New Issue
Block a user