Skip to content

Counters without _total suffixes loose metric type in Open Metrics exposition format #942

Open
@Antanukas

Description

@Antanukas

When exposing counters without _total suffixes in Open Metrics exposition format metric type is lost.

Using github.com/prometheus/client_golang v1.11.0.

Code to reproduce:

package main

import (
	"fmt"
	"net/http"

	"github.com/prometheus/client_golang/prometheus"
	"github.com/prometheus/client_golang/prometheus/promhttp"
)

func main() {
	registry := prometheus.NewRegistry()
	c := prometheus.NewCounterVec(prometheus.CounterOpts{Name: "counter_without_suffix"}, []string{})
	registry.MustRegister(c)

	promHandler := promhttp.HandlerFor(registry, promhttp.HandlerOpts{EnableOpenMetrics: true})
	http.Handle("/metrics", promHandler)

	c.WithLabelValues().Inc()

	if err := http.ListenAndServe(":3030", nil); err != nil {
		fmt.Println(err)
	}
}

$ curl -H "Accept: application/openmetrics-text" localhost:3030/metrics
# HELP counter_without_suffix
# TYPE counter_without_suffix unknown
counter_without_suffix 1.0
# EOF

$ curl localhost:3030/metrics
# HELP counter_without_suffix
# TYPE counter_without_suffix counter
counter_without_suffix 1

Open Metrics requires these suffixes, however it does not look practical to loose metric type in different exposure format when it is known to be a counter.

Prometheus scraping logic sets Accept header to prefer Open Metrics format if client supports it.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions