diff --git a/pkg/metricshandler/metrics_handler.go b/pkg/metricshandler/metrics_handler.go index a6a245dfe2..341c59753b 100644 --- a/pkg/metricshandler/metrics_handler.go +++ b/pkg/metricshandler/metrics_handler.go @@ -27,6 +27,8 @@ import ( "strings" "sync" + "github.com/prometheus/common/expfmt" + appsv1 "k8s.io/api/apps/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/fields" @@ -183,7 +185,9 @@ func (m *MetricsHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { resHeader := w.Header() var writer io.Writer = w - resHeader.Set("Content-Type", `text/plain; version=`+"0.0.4") + contentType := expfmt.NegotiateIncludingOpenMetrics(r.Header) + + resHeader.Set("Content-Type", string(contentType)) if m.enableGZIPEncoding { // Gzip response if requested. Taken from @@ -206,6 +210,11 @@ func (m *MetricsHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { } } + // If we send openmetrics, we need to include a EOF directive + if contentType == "application/openmetrics-text" { + w.Write([]byte("# EOF\n")) + } + // In case we gzipped the response, we have to close the writer. if closer, ok := writer.(io.Closer); ok { err := closer.Close()