promrus

package module
v0.0.0-...-5c7f70a Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 8, 2019 License: Apache-2.0 Imports: 2 Imported by: 0

README

promrus

Logrus hook to expose the number of log messages as Prometheus metrics:

log_messages{level="debug"}
log_messages{level="info"}
log_messages{level="warning"}
log_messages{level="error"}

Usage

Sample code:

package main

import (
	"net/http"
	"time"

	"github.com/prometheus/client_golang/prometheus/promhttp"
	log "github.com/sirupsen/logrus"
	"github.com/weaveworks/promrus"
)

func main() {
	// Create the Prometheus hook:
	hook := promrus.MustNewPrometheusHook()

	// Configure logrus to use the Prometheus hook:
	log.AddHook(hook)

	// Expose Prometheus metrics via HTTP, as you usually would:
	go http.ListenAndServe(":8080", promhttp.Handler())

	// Log with logrus, as you usually would.
	// Every time the program generates a log message, a Prometheus counter is incremented for the corresponding level.
	for {
		log.Infof("foo")
		time.Sleep(1 * time.Second)
	}
}

Run the above program:

$ go get -u github.com/golang/dep/cmd/dep
$ dep ensure
$ go run main.go
INFO[0000] foo
INFO[0001] foo
INFO[0002] foo
[...]
INFO[0042] foo

Scrape the Prometheus metrics exposed by the hook:

$ curl -fsS localhost:8080 | grep log_messages
# HELP log_messages Total number of log messages.
# TYPE log_messages counter
log_messages{level="debug"} 0
log_messages{level="error"} 0
log_messages{level="info"} 42
log_messages{level="warning"} 0

Setup development environment

$ go get github.com/golang/dep/cmd/dep
$ dep ensure

Compile

$ go build

Test

$ go test
DEBU[0000] this is at debug level!
INFO[0000] this is at info level!
WARN[0000] this is at warning level!
ERRO[0000] this is at error level!
PASS
ok  	github.com/weaveworks/promrus	0.011s

Getting Help

If you have any questions about, feedback for or problems with promrus:

Your feedback is always welcome!

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type PrometheusHook

type PrometheusHook struct {
	// contains filtered or unexported fields
}

PrometheusHook exposes Prometheus counters for each of logrus' log levels.

func MustNewPrometheusHook

func MustNewPrometheusHook() *PrometheusHook

MustNewPrometheusHook creates a new instance of PrometheusHook which exposes Prometheus counters for various log levels. Contrarily to NewPrometheusHook, it does not return any error to the caller, but panics instead. Use MustNewPrometheusHook if you want a less verbose hook creation. Use NewPrometheusHook if you want more control.

func NewPrometheusHook

func NewPrometheusHook() (*PrometheusHook, error)

NewPrometheusHook creates a new instance of PrometheusHook which exposes Prometheus counters for various log levels. Contrarily to MustNewPrometheusHook, it returns an error to the caller in case of issue. Use NewPrometheusHook if you want more control. Use MustNewPrometheusHook if you want a less verbose hook creation.

func (*PrometheusHook) Fire

func (hook *PrometheusHook) Fire(entry *logrus.Entry) error

Fire increments the appropriate Prometheus counter depending on the entry's log level.

func (*PrometheusHook) Levels

func (hook *PrometheusHook) Levels() []logrus.Level

Levels returns all supported log levels, i.e.: Debug, Info, Warn and Error, as there is no point incrementing a counter just before exiting/panicking.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL