Documentation
¶
Overview ¶
Package webprometheus provides Prometheus middleware and scrape handlers for web-based GoForj apps.
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func Handler ¶
Handler returns the package-level Prometheus scrape handler. @group Prometheus Example: registry := prometheus.NewRegistry() counter := prometheus.NewCounter(prometheus.CounterOpts{Name: "demo_total", Help: "demo counter"}) registry.MustRegister(counter) counter.Inc() metrics, _ := webprometheus.New(webprometheus.Config{Registerer: prometheus.NewRegistry(), Gatherer: registry}) recorder := httptest.NewRecorder() ctx := webtest.NewContext(httptest.NewRequest(http.MethodGet, "/metrics", nil), recorder, "/metrics", nil) _ = metrics.Handler()(ctx) fmt.Println(strings.Contains(recorder.Body.String(), "demo_total"))
// true
func Middleware ¶
func Middleware() web.Middleware
Middleware returns the package-level Prometheus middleware. @group Prometheus Example: registry := prometheus.NewRegistry() metrics, _ := webprometheus.New(webprometheus.Config{Registerer: registry, Gatherer: registry, Namespace: "example"}) handler := metrics.Middleware()(func(c web.Context) error { return c.NoContent(http.StatusNoContent) }) ctx := webtest.NewContext(httptest.NewRequest(http.MethodGet, "/healthz", nil), nil, "/healthz", nil) _ = handler(ctx) out := &bytes.Buffer{} _ = webprometheus.WriteGatheredMetrics(out, registry) fmt.Println(strings.Contains(out.String(), "example_requests_total"))
// true
func RunPushGatewayGatherer ¶
func RunPushGatewayGatherer(ctx context.Context, config PushGatewayConfig) error
RunPushGatewayGatherer starts pushing collected metrics until the context finishes. @group Prometheus Example: err := webprometheus.RunPushGatewayGatherer(context.Background(), webprometheus.PushGatewayConfig{}) fmt.Println(err != nil)
// true
func WriteGatheredMetrics ¶
func WriteGatheredMetrics(writer io.Writer, gatherer prometheus.Gatherer) error
WriteGatheredMetrics gathers collected metrics and writes them to the given writer. @group Prometheus Example: var buf bytes.Buffer err := webprometheus.WriteGatheredMetrics(&buf, prometheus.NewRegistry()) fmt.Println(err == nil)
// true
Types ¶
type Config ¶
type Config struct {
Skipper func(web.Context) bool
Namespace string
Subsystem string
LabelFuncs map[string]LabelValueFunc
HistogramOptsFunc func(prometheus.HistogramOpts) prometheus.HistogramOpts
CounterOptsFunc func(prometheus.CounterOpts) prometheus.CounterOpts
Registerer prometheus.Registerer
Gatherer prometheus.Gatherer
BeforeNext func(web.Context)
AfterNext func(web.Context, error)
DoNotUseRequestPathFor404 bool
DurationBuckets []float64
SizeBuckets []float64
RequestSizeBuckets []float64
DisableCompression bool
// contains filtered or unexported fields
}
Config configures Prometheus middleware and scraping behavior.
type LabelValueFunc ¶
LabelValueFunc resolves a label value from request context and handler error.
type Metrics ¶
type Metrics struct {
// contains filtered or unexported fields
}
Metrics records Prometheus metrics for HTTP traffic and exposes a scrape handler.
func Default ¶
func Default() *Metrics
Default returns the package-level Prometheus metrics instance. @group Prometheus Example: fmt.Println(webprometheus.Default() == webprometheus.Default())
// true
func MustNew ¶
MustNew creates a Metrics instance and panics on registration errors. @group Prometheus Example: metrics := webprometheus.MustNew(webprometheus.Config{Registerer: prometheus.NewRegistry(), Gatherer: prometheus.NewRegistry()}) fmt.Println(metrics != nil)
// true
func New ¶
New creates a Metrics instance backed by Prometheus collectors. @group Prometheus Example: metrics, err := webprometheus.New(webprometheus.Config{Namespace: "app"}) _ = metrics fmt.Println(err == nil)
// true
func (*Metrics) Handler ¶
Handler exposes the configured Prometheus metrics as a web.Handler. @group Prometheus Example: registry := prometheus.NewRegistry() counter := prometheus.NewCounter(prometheus.CounterOpts{Name: "demo_total", Help: "demo counter"}) registry.MustRegister(counter) counter.Inc() metrics, _ := webprometheus.New(webprometheus.Config{Registerer: prometheus.NewRegistry(), Gatherer: registry}) recorder := httptest.NewRecorder() ctx := webtest.NewContext(httptest.NewRequest(http.MethodGet, "/metrics", nil), recorder, "/metrics", nil) _ = metrics.Handler()(ctx) fmt.Println(strings.Contains(recorder.Body.String(), "demo_total"))
// true
func (*Metrics) Middleware ¶
func (m *Metrics) Middleware() web.Middleware
Middleware records Prometheus metrics for each request. @group Prometheus Example: registry := prometheus.NewRegistry() metrics, _ := webprometheus.New(webprometheus.Config{Registerer: registry, Gatherer: registry, Namespace: "example"}) handler := metrics.Middleware()(func(c web.Context) error { return c.NoContent(http.StatusNoContent) }) ctx := webtest.NewContext(httptest.NewRequest(http.MethodGet, "/healthz", nil), nil, "/healthz", nil) _ = handler(ctx) out := &bytes.Buffer{} _ = webprometheus.WriteGatheredMetrics(out, registry) fmt.Println(strings.Contains(out.String(), "example_requests_total"))
// true
type PushGatewayConfig ¶
type PushGatewayConfig struct {
PushGatewayURL string
PushInterval time.Duration
Gatherer prometheus.Gatherer
ErrorHandler func(error) error
ClientTransport http.RoundTripper
}
PushGatewayConfig contains the configuration for pushing to a Prometheus push gateway.