diff options
author | Dave Henderson <dhenderson@gmail.com> | 2020-12-30 13:44:02 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-12-30 11:44:02 -0700 |
commit | ebc278ec98bb24f2852b61fde2a9bf2e3d83818b (patch) | |
tree | afc2f604f9c59b64d3558eadd76330df4269efc7 /modules/metrics/metrics.go | |
parent | 79f3af99275447058951bc27fc45b669868dde7e (diff) |
metrics: allow disabling OpenMetrics negotiation (#3944)
* metrics: allow disabling OpenMetrics negotiation
Signed-off-by: Dave Henderson <dhenderson@gmail.com>
* fixup! metrics: allow disabling OpenMetrics negotiation
Diffstat (limited to 'modules/metrics/metrics.go')
-rw-r--r-- | modules/metrics/metrics.go | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/modules/metrics/metrics.go b/modules/metrics/metrics.go index eff364e..e6d4345 100644 --- a/modules/metrics/metrics.go +++ b/modules/metrics/metrics.go @@ -38,6 +38,10 @@ func init() { // unlike AdminMetrics. type Metrics struct { metricsHandler http.Handler + + // Disable OpenMetrics negotiation, enabled by default. May be necessary if + // the produced metrics cannot be parsed by the service scraping metrics. + DisableOpenMetrics bool `json:"disable_openmetrics,omitempty"` } // CaddyModule returns the Caddy module information. @@ -59,7 +63,7 @@ func (l *zapLogger) Println(v ...interface{}) { // Provision sets up m. func (m *Metrics) Provision(ctx caddy.Context) error { log := ctx.Logger(m) - m.metricsHandler = createMetricsHandler(&zapLogger{log}) + m.metricsHandler = createMetricsHandler(&zapLogger{log}, !m.DisableOpenMetrics) return nil } @@ -71,7 +75,9 @@ func parseCaddyfile(h httpcaddyfile.Helper) (caddyhttp.MiddlewareHandler, error) // UnmarshalCaddyfile sets up the handler from Caddyfile tokens. Syntax: // -// metrics <matcher> +// metrics [<matcher>] { +// disable_openmetrics +// } // func (m *Metrics) UnmarshalCaddyfile(d *caddyfile.Dispenser) error { for d.Next() { @@ -79,6 +85,15 @@ func (m *Metrics) UnmarshalCaddyfile(d *caddyfile.Dispenser) error { if len(args) > 0 { return d.ArgErr() } + + for d.NextBlock(0) { + switch d.Val() { + case "disable_openmetrics": + m.DisableOpenMetrics = true + default: + return d.Errf("unrecognized subdirective %q", d.Val()) + } + } } return nil } @@ -95,7 +110,7 @@ var ( _ caddyfile.Unmarshaler = (*Metrics)(nil) ) -func createMetricsHandler(logger promhttp.Logger) http.Handler { +func createMetricsHandler(logger promhttp.Logger, enableOpenMetrics bool) http.Handler { return promhttp.InstrumentMetricHandler(prometheus.DefaultRegisterer, promhttp.HandlerFor(prometheus.DefaultGatherer, promhttp.HandlerOpts{ // will only log errors if logger is non-nil @@ -103,7 +118,7 @@ func createMetricsHandler(logger promhttp.Logger) http.Handler { // Allow OpenMetrics format to be negotiated - largely compatible, // except quantile/le label values always have a decimal. - EnableOpenMetrics: true, + EnableOpenMetrics: enableOpenMetrics, }), ) } |