Skip to content

Commit

Permalink
Switch logging to go-kit (#144)
Browse files Browse the repository at this point in the history
* Switch logging to go-kit

Signed-off-by: sowmiya <[email protected]>

* Fix go.mod and remove .idea directory

Signed-off-by: Simon Pasquier <[email protected]>

* Fix initialise logger on creation of the Exporter struct

Signed-off-by: sowmiyamuthuraman <[email protected]>

* Pass logger as params to the new exporter function

Signed-off-by: sowmiyamuthuraman <[email protected]>
  • Loading branch information
sowmiyamuthuraman authored and simonpasquier committed Oct 22, 2019
1 parent 06d440a commit b68117b
Show file tree
Hide file tree
Showing 349 changed files with 3,502 additions and 229,251 deletions.
66 changes: 41 additions & 25 deletions consul_exporter.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,19 +19,23 @@ import (
"net/http"
_ "net/http/pprof"
"net/url"
"os"
"regexp"
"strconv"
"strings"
"time"

"github.com/go-kit/kit/log"
"github.com/go-kit/kit/log/level"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promhttp"
"github.com/prometheus/common/log"
"github.com/prometheus/common/promlog"
"github.com/prometheus/common/promlog/flag"
"github.com/prometheus/common/version"
"gopkg.in/alecthomas/kingpin.v2"

consul_api "github.com/hashicorp/consul/api"
cleanhttp "github.com/hashicorp/go-cleanhttp"
"github.com/hashicorp/go-cleanhttp"
)

const (
Expand Down Expand Up @@ -97,10 +101,12 @@ var (
queryOptions = consul_api.QueryOptions{}
)

type promHTTPLogger struct{}
type promHTTPLogger struct {
logger log.Logger
}

func (l promHTTPLogger) Println(v ...interface{}) {
log.Error(v...)
level.Error(l.logger).Log("msg", fmt.Sprint(v...))
}

// Exporter collects Consul stats from the given server and exports them using
Expand All @@ -110,6 +116,7 @@ type Exporter struct {
kvPrefix string
kvFilter *regexp.Regexp
healthSummary bool
logger log.Logger
}

type consulOpts struct {
Expand All @@ -123,7 +130,7 @@ type consulOpts struct {
}

// NewExporter returns an initialized Exporter.
func NewExporter(opts consulOpts, kvPrefix, kvFilter string, healthSummary bool) (*Exporter, error) {
func NewExporter(opts consulOpts, kvPrefix, kvFilter string, healthSummary bool, logger log.Logger) (*Exporter, error) {
uri := opts.uri
if !strings.Contains(uri, "://") {
uri = "http://" + uri
Expand Down Expand Up @@ -169,6 +176,7 @@ func NewExporter(opts consulOpts, kvPrefix, kvFilter string, healthSummary bool)
kvPrefix: kvPrefix,
kvFilter: regexp.MustCompile(kvFilter),
healthSummary: healthSummary,
logger: logger,
}, nil
}

Expand Down Expand Up @@ -213,7 +221,7 @@ func (e *Exporter) Collect(ch chan<- prometheus.Metric) {
func (e *Exporter) collectPeersMetric(ch chan<- prometheus.Metric) bool {
peers, err := e.client.Status().Peers()
if err != nil {
log.Errorf("Can't query consul: %v", err)
level.Error(e.logger).Log("msg", "Can't query consul", "err", err)
return false
}
ch <- prometheus.MustNewConstMetric(
Expand All @@ -225,7 +233,7 @@ func (e *Exporter) collectPeersMetric(ch chan<- prometheus.Metric) bool {
func (e *Exporter) collectLeaderMetric(ch chan<- prometheus.Metric) bool {
leader, err := e.client.Status().Leader()
if err != nil {
log.Errorf("Can't query consul: %v", err)
level.Error(e.logger).Log("msg", "Can't query consul", "err", err)
return false
}
if len(leader) == 0 {
Expand All @@ -243,7 +251,7 @@ func (e *Exporter) collectLeaderMetric(ch chan<- prometheus.Metric) bool {
func (e *Exporter) collectNodesMetric(ch chan<- prometheus.Metric) bool {
nodes, _, err := e.client.Catalog().Nodes(&queryOptions)
if err != nil {
log.Errorf("Failed to query catalog for nodes: %v", err)
level.Error(e.logger).Log("msg", "Failed to query catalog for nodes", "err", err)
return false
}
ch <- prometheus.MustNewConstMetric(
Expand All @@ -255,7 +263,7 @@ func (e *Exporter) collectNodesMetric(ch chan<- prometheus.Metric) bool {
func (e *Exporter) collectMembersMetric(ch chan<- prometheus.Metric) bool {
members, err := e.client.Agent().Members(false)
if err != nil {
log.Errorf("Failed to query member status: %v", err)
level.Error(e.logger).Log("msg", "Failed to query member status", "err", err)
return false
}
for _, entry := range members {
Expand All @@ -269,7 +277,7 @@ func (e *Exporter) collectMembersMetric(ch chan<- prometheus.Metric) bool {
func (e *Exporter) collectServicesMetric(ch chan<- prometheus.Metric) bool {
serviceNames, _, err := e.client.Catalog().Services(&queryOptions)
if err != nil {
log.Errorf("Failed to query for services: %v", err)
level.Error(e.logger).Log("msg", "Failed to query for services", "err", err)
return false
}
ch <- prometheus.MustNewConstMetric(
Expand All @@ -286,7 +294,7 @@ func (e *Exporter) collectServicesMetric(ch chan<- prometheus.Metric) bool {
func (e *Exporter) collectHealthStateMetric(ch chan<- prometheus.Metric) bool {
checks, _, err := e.client.Health().State("any", &queryOptions)
if err != nil {
log.Errorf("Failed to query service health: %v", err)
level.Error(e.logger).Log("msg", "Failed to query service health", "err", err)
return false
}
for _, hc := range checks {
Expand Down Expand Up @@ -357,14 +365,14 @@ func (e *Exporter) collectHealthSummary(ch chan<- prometheus.Metric, serviceName
func (e *Exporter) collectOneHealthSummary(ch chan<- prometheus.Metric, serviceName string) bool {
// See https://github.com/hashicorp/consul/issues/1096.
if strings.HasPrefix(serviceName, "/") {
log.Warnf("Skipping service %q because it starts with a slash", serviceName)
level.Warn(e.logger).Log("msg", "Skipping service because it starts with a slash", "service_name", serviceName)
return true
}
log.Debugf("Fetching health summary for: %s", serviceName)
level.Debug(e.logger).Log("msg", "Fetching health summary", "serviceName", serviceName)

service, _, err := e.client.Health().Service(serviceName, "", false, &queryOptions)
if err != nil {
log.Errorf("Failed to query service health: %v", err)
level.Error(e.logger).Log("msg", "Failed to query service health", "err", err)
return false
}

Expand Down Expand Up @@ -402,7 +410,7 @@ func (e *Exporter) collectKeyValues(ch chan<- prometheus.Metric) bool {
kv := e.client.KV()
pairs, _, err := kv.List(e.kvPrefix, &queryOptions)
if err != nil {
log.Errorf("Error fetching key/values: %s", err)
level.Error(e.logger).Log("msg", "Error fetching key/values", "err", err)
return false
}

Expand Down Expand Up @@ -445,23 +453,26 @@ func main() {
kingpin.Flag("consul.allow_stale", "Allows any Consul server (non-leader) to service a read.").Default("true").BoolVar(&queryOptions.AllowStale)
kingpin.Flag("consul.require_consistent", "Forces the read to be fully consistent.").Default("false").BoolVar(&queryOptions.RequireConsistent)

log.AddFlags(kingpin.CommandLine)
kingpin.Version(version.Print("consul_exporter"))
promlogConfig := &promlog.Config{}
flag.AddFlags(kingpin.CommandLine, promlogConfig)
kingpin.HelpFlag.Short('h')
kingpin.Parse()
logger := promlog.New(promlogConfig)

log.Infoln("Starting consul_exporter", version.Info())
log.Infoln("Build context", version.BuildContext())
level.Info(logger).Log("msg", "Starting consul_exporter", "version", version.Info())
level.Info(logger).Log("build_context", version.BuildContext())

exporter, err := NewExporter(opts, *kvPrefix, *kvFilter, *healthSummary)
exporter, err := NewExporter(opts, *kvPrefix, *kvFilter, *healthSummary, logger)
if err != nil {
log.Fatalln(err)
level.Error(logger).Log("msg", "Error creating the exporter", "err", err)
os.Exit(1)
}
prometheus.MustRegister(exporter)

queryOptionsJson, err := json.MarshalIndent(queryOptions, "", " ")
if err != nil {
log.Fatalln(err)
level.Error(logger).Log("msg", "Error marshaling query options", "err", err)
os.Exit(1)
}

http.Handle(*metricsPath,
Expand All @@ -470,7 +481,9 @@ func main() {
promhttp.HandlerFor(
prometheus.DefaultGatherer,
promhttp.HandlerOpts{
ErrorLog: &promHTTPLogger{},
ErrorLog: &promHTTPLogger{
logger: logger,
},
},
),
),
Expand All @@ -490,6 +503,9 @@ func main() {
</html>`))
})

log.Infoln("Listening on", *listenAddress)
log.Fatal(http.ListenAndServe(*listenAddress, nil))
level.Info(logger).Log("msg", "Listening on address", "address", *listenAddress)
if err := http.ListenAndServe(*listenAddress, nil); err != nil {
level.Error(logger).Log("msg", "Error starting HTTP server", "err", err)
os.Exit(1)
}
}
5 changes: 3 additions & 2 deletions consul_exporter_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import (
"text/template"
"time"

"github.com/go-kit/kit/log"
consul_api "github.com/hashicorp/consul/api"
"github.com/prometheus/client_golang/prometheus/testutil"
"github.com/prometheus/common/expfmt"
Expand All @@ -39,7 +40,7 @@ func TestNewExporter(t *testing.T) {
}

for _, test := range cases {
_, err := NewExporter(consulOpts{uri: test.uri}, "", ".*", true)
_, err := NewExporter(consulOpts{uri: test.uri}, "", ".*", true, log.NewNopLogger())
if test.ok && err != nil {
t.Errorf("expected no error w/ %q, but got %q", test.uri, err)
}
Expand Down Expand Up @@ -140,7 +141,7 @@ consul_catalog_services 3
},
} {
t.Run(tc.name, func(t *testing.T) {
exporter, err := NewExporter(consulOpts{uri: addr, timeout: time.Duration(time.Second)}, "", "", true)
exporter, err := NewExporter(consulOpts{uri: addr, timeout: time.Duration(time.Second)}, "", "", true, log.NewNopLogger())
if err != nil {
t.Errorf("expected no error but got %q", err)
}
Expand Down
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@ require (
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 // indirect
github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4 // indirect
github.com/armon/go-metrics v0.0.0-20190430140413-ec5e00d3c878 // indirect
github.com/go-kit/kit v0.8.0
github.com/hashicorp/consul/api v1.2.0
github.com/hashicorp/go-cleanhttp v0.5.1
github.com/hashicorp/go-msgpack v0.5.5 // indirect
github.com/hashicorp/memberlist v0.1.4 // indirect
github.com/miekg/dns v1.0.15 // indirect
github.com/prometheus/client_golang v1.1.0
github.com/prometheus/common v0.6.0
github.com/sirupsen/logrus v1.4.2 // indirect
golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c // indirect
golang.org/x/sync v0.0.0-20190423024810-112230192c58 // indirect
gopkg.in/alecthomas/kingpin.v2 v2.2.6
Expand Down
8 changes: 4 additions & 4 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,12 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys=
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
github.com/go-kit/kit v0.8.0 h1:Wz+5lgoB0kkuqLEc6NVmwRknTKP6dTGbSqvhZtBI/j0=
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
github.com/go-logfmt/logfmt v0.4.0 h1:MP4Eh7ZCb31lleYCFuwm0oe4/YGak+5l1vA2NOE80nA=
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk=
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM=
Expand Down Expand Up @@ -91,6 +94,7 @@ github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/u
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515 h1:T+h1c/A9Gawja4Y9mFVWj2vyii2bbUNDw3kt9VxK2EY=
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
github.com/mattn/go-colorable v0.0.9 h1:UVL0vNpWh04HeJXV0KLcaT7r06gOH2l4OW6ddYRUIY4=
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
Expand Down Expand Up @@ -156,8 +160,6 @@ github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUt
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
github.com/sirupsen/logrus v1.2.0 h1:juTguoYk5qI21pwyTXY3B3Y5cOTH3ZUyZCg1v/mihuo=
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4=
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.1.1 h1:2vfRuCMp5sSVIDSqO8oNnWJq7mPa6KVP3iPIwFBuy8A=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
Expand Down Expand Up @@ -190,8 +192,6 @@ golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5h
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5 h1:mzjBh+S5frKOsOBobWIMAbXavqjmgO17k/2puhcFR94=
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190422165155-953cdadca894 h1:Cz4ceDQGXuKRnVBDTS23GTn/pU5OE2C0WrNTOYK1Uuc=
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3 h1:4y9KwBHBgBNwDbtu44R5o1fdOCQUEXhbk/P4A9WmJq0=
golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
Expand Down
3 changes: 3 additions & 0 deletions scripts/errcheck_excludes.txt
Original file line number Diff line number Diff line change
@@ -1,2 +1,5 @@
// Used in HTTP handlers, any error is handled by the server itself.
(net/http.ResponseWriter).Write

// Never check for logger errors.
(github.com/go-kit/kit/log.Logger).Log

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit b68117b

Please sign in to comment.