From c0ef65f4425bdb8f54b19a077b66b1582f49aba4 Mon Sep 17 00:00:00 2001 From: Nate Walck Date: Sun, 23 Feb 2020 17:35:29 -0500 Subject: [PATCH 1/3] Enable Prometheus metrics endpoint and add lotus version --- cmd/lotus/daemon.go | 13 +++++++++++++ cmd/lotus/rpc.go | 9 ++++++++- go.mod | 1 + go.sum | 5 +++++ 4 files changed, 27 insertions(+), 1 deletion(-) diff --git a/cmd/lotus/daemon.go b/cmd/lotus/daemon.go index d7f431d2e..2cc1fcbdb 100644 --- a/cmd/lotus/daemon.go +++ b/cmd/lotus/daemon.go @@ -13,6 +13,8 @@ import ( blockstore "github.com/ipfs/go-ipfs-blockstore" "github.com/mitchellh/go-homedir" "github.com/multiformats/go-multiaddr" + "github.com/prometheus/client_golang/prometheus" + "github.com/prometheus/client_golang/prometheus/promauto" "golang.org/x/xerrors" "gopkg.in/urfave/cli.v2" @@ -171,6 +173,17 @@ var DaemonCmd = &cli.Command{ return xerrors.Errorf("initializing node: %w", err) } + // Add lotus version info to prometheus metrics + var lotusInfoMetric = promauto.NewGaugeVec(prometheus.GaugeOpts{ + Name: "lotus_info", + Help: "Lotus version information.", + }, []string{"version"}) + + // Setting to 1 lets us multiply it with other stats to add the version labels + lotusInfoMetric.With(prometheus.Labels{ + "version": build.UserVersion, + }).Set(1) + endpoint, err := r.APIEndpoint() if err != nil { return xerrors.Errorf("getting api endpoint: %w", err) diff --git a/cmd/lotus/rpc.go b/cmd/lotus/rpc.go index 0ec44b148..f0f2be52c 100644 --- a/cmd/lotus/rpc.go +++ b/cmd/lotus/rpc.go @@ -3,13 +3,14 @@ package main import ( "context" "encoding/json" - "github.com/filecoin-project/lotus/api/apistruct" "net/http" _ "net/http/pprof" "os" "os/signal" "syscall" + "github.com/filecoin-project/lotus/api/apistruct" + "github.com/filecoin-project/lotus/api" "github.com/filecoin-project/lotus/lib/auth" "github.com/filecoin-project/lotus/lib/jsonrpc" @@ -21,6 +22,10 @@ import ( "github.com/multiformats/go-multiaddr" manet "github.com/multiformats/go-multiaddr-net" "golang.org/x/xerrors" + + // "github.com/prometheus/client_golang/prometheus" + // "github.com/prometheus/client_golang/prometheus/promauto" + "github.com/prometheus/client_golang/prometheus/promhttp" ) var log = logging.Logger("main") @@ -48,6 +53,8 @@ func serveRPC(a api.FullNode, stop node.StopFunc, addr multiaddr.Multiaddr) erro return xerrors.Errorf("could not listen: %w", err) } + http.Handle("/metrics", promhttp.Handler()) + srv := &http.Server{Handler: http.DefaultServeMux} sigChan := make(chan os.Signal, 2) diff --git a/go.mod b/go.mod index cf23f092e..4f314a5f5 100644 --- a/go.mod +++ b/go.mod @@ -83,6 +83,7 @@ require ( github.com/multiformats/go-varint v0.0.2 github.com/opentracing/opentracing-go v1.1.0 github.com/polydawn/refmt v0.0.0-20190809202753-05966cbd336a + github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829 github.com/prometheus/common v0.2.0 github.com/stretchr/testify v1.4.0 github.com/whyrusleeping/bencher v0.0.0-20190829221104-bb6607aa8bba diff --git a/go.sum b/go.sum index eb31db910..723699e28 100644 --- a/go.sum +++ b/go.sum @@ -33,6 +33,7 @@ github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRF github.com/apache/thrift v0.12.0 h1:pODnxUFNcjP9UTLZGTdeh+j16A8lJbRvD3rOtrk/7bs= github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973 h1:xJ4a3vCFaGF/jqvzLMYoU8P317H5OQ+Via4RmuPwCS0= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/btcsuite/btcd v0.0.0-20190213025234-306aecffea32/go.mod h1:DrZx5ec/dmnfpw9KyYoQyYo7d0KEvTkk/5M/vbZjAr8= github.com/btcsuite/btcd v0.0.0-20190523000118-16327141da8c/go.mod h1:3J08xEfcugPacsc34/LKRU2yO7YmuT8yt28J8k2+rrI= @@ -562,6 +563,7 @@ github.com/mattn/go-isatty v0.0.9 h1:d5US/mDsogSGW37IV293h//ZFaeajb69h+EHFsv2xGg github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= github.com/mattn/go-runewidth v0.0.7 h1:Ei8KR0497xHyKJPAv59M1dkC+rOZCMBJ+t3fZ+twI54= github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= github.com/miekg/dns v1.1.12/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= @@ -656,12 +658,15 @@ github.com/polydawn/refmt v0.0.0-20190807091052-3d65705ee9f1/go.mod h1:uIp+gprXx github.com/polydawn/refmt v0.0.0-20190809202753-05966cbd336a h1:hjZfReYVLbqFkAtr2us7vdy04YWz3LVAirzP7reh8+M= github.com/polydawn/refmt v0.0.0-20190809202753-05966cbd336a/go.mod h1:uIp+gprXxxrWSjjklXD+mN4wed/tMfjMMmN/9+JsA9o= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829 h1:D+CiwcpGTW6pL6bv6KI3KbyEyCKyS+1JWS2h8PNDnGA= github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f h1:BVwpUVJDADN2ufcGik7W992pyps0wZ888b/y9GXcLTU= github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/common v0.2.0 h1:kUZDBDTdBVBYBj5Tmh2NZLlF60mfjA27rM34b+cVwNU= github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1 h1:/K3IL0Z1quvmJ7X0A1AwNEK7CRkVK3YwfOU/QAL4WGg= github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= From 6df2cf552a86e2cbd17a56f359a0087a4fa7857b Mon Sep 17 00:00:00 2001 From: Nate Walck Date: Sun, 23 Feb 2020 17:38:44 -0500 Subject: [PATCH 2/3] Remove commented out imports --- cmd/lotus/rpc.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/cmd/lotus/rpc.go b/cmd/lotus/rpc.go index f0f2be52c..c5356557a 100644 --- a/cmd/lotus/rpc.go +++ b/cmd/lotus/rpc.go @@ -23,8 +23,6 @@ import ( manet "github.com/multiformats/go-multiaddr-net" "golang.org/x/xerrors" - // "github.com/prometheus/client_golang/prometheus" - // "github.com/prometheus/client_golang/prometheus/promauto" "github.com/prometheus/client_golang/prometheus/promhttp" ) From cff1fcfe9d1f780acf9926cdf0fd9255eebad3ed Mon Sep 17 00:00:00 2001 From: Nate Walck Date: Sun, 23 Feb 2020 17:54:49 -0500 Subject: [PATCH 3/3] Move promhttp above manet.Listen --- cmd/lotus/rpc.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/lotus/rpc.go b/cmd/lotus/rpc.go index c5356557a..f75b68008 100644 --- a/cmd/lotus/rpc.go +++ b/cmd/lotus/rpc.go @@ -46,13 +46,13 @@ func serveRPC(a api.FullNode, stop node.StopFunc, addr multiaddr.Multiaddr) erro http.Handle("/rest/v0/import", importAH) + http.Handle("/metrics", promhttp.Handler()) + lst, err := manet.Listen(addr) if err != nil { return xerrors.Errorf("could not listen: %w", err) } - http.Handle("/metrics", promhttp.Handler()) - srv := &http.Server{Handler: http.DefaultServeMux} sigChan := make(chan os.Signal, 2)