From 885b2bb641a4d2cc687dc2c84e17161b36722ef3 Mon Sep 17 00:00:00 2001 From: boernd Date: Wed, 13 Jun 2018 23:06:21 +0200 Subject: [PATCH] Get prometheus remote write version from header (#4) --- README.md | 5 ----- config/config.go | 2 -- prometheus/prometheus.go | 26 +++++++++++++++++++------- 3 files changed, 19 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 17bcbe03..6366543d 100644 --- a/README.md +++ b/README.md @@ -8,11 +8,6 @@ Example Prometheusbeat configuration: prometheusbeat: listen: ":8080" context: "/prometheus" - # The storage request format had a breaking change starting with Prometheus 1.7. - # Set the version accordingly. - # 1: Prometheus < 1.7 - # 2: Prometheus >= 1.7 - version: 2 [...] ``` diff --git a/config/config.go b/config/config.go index fca3220d..05cbd88f 100644 --- a/config/config.go +++ b/config/config.go @@ -6,11 +6,9 @@ package config type Config struct { Listen string `config:"listen"` Context string `config:"context"` - Version int `config:"version` } var DefaultConfig = Config{ Listen: ":8080", Context: "/prometheus", - Version: 2, } diff --git a/prometheus/prometheus.go b/prometheus/prometheus.go index 5b62b7e5..e46ed372 100644 --- a/prometheus/prometheus.go +++ b/prometheus/prometheus.go @@ -7,14 +7,14 @@ import ( "net/http" "strings" - "github.com/elastic/beats/libbeat/common" - "github.com/golang/protobuf/proto" "github.com/golang/snappy" - "github.com/prometheus/prometheus/prompb" - + "github.com/elastic/beats/libbeat/common" + "github.com/elastic/beats/libbeat/logp" + version "github.com/hashicorp/go-version" "github.com/infonova/prometheusbeat/config" + "github.com/prometheus/prometheus/prompb" ) type PrometheusServer struct { @@ -39,10 +39,22 @@ func (promSrv *PrometheusServer) Start(events chan common.MapStr) { func (promSrv *PrometheusServer) handlePrometheus(w http.ResponseWriter, r *http.Request) { + v := r.Header.Get("X-Prometheus-Remote-Write-Version") + //No header indicates old prometheus version + if len(v) == 0 { + v = "0.0.0" + } + + baseVer, _ := version.NewVersion("0.1.0") + reqVer, err := version.NewVersion(v) + if err != nil { + logp.Err(strings.Join([]string{"wrong prometheus remote write version:", v}, " ")) + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + var reqBuf []byte - var err error - // Handle breaking change between Prometheus versions - if promSrv.config.Version == 1 { + if reqVer.LessThan(baseVer) { reqBuf, err = ioutil.ReadAll(snappy.NewReader(r.Body)) if err != nil { http.Error(w, err.Error(), http.StatusBadRequest)