Simplify and fix remote write example

After removing gRPC, this can be simplified again. Also, the
configuration for the remote storage moved from flags to the config
file.
This commit is contained in:
Julius Volz 2016-10-05 17:46:51 +02:00
parent 1e2f03f668
commit b5163351bf
2 changed files with 24 additions and 38 deletions

View file

@ -7,11 +7,18 @@ To use it:
```
go build
remote_storage
./remote_storage
```
...and then run Prometheus as:
...and then add the following to your `prometheus.yml`:
```yaml
remote_write:
url: "http://localhost:1234/receive"
```
Then start Prometheus:
```
./prometheus -storage.remote.address=localhost:1234
./prometheus
```

View file

@ -21,43 +21,15 @@ import (
"github.com/golang/protobuf/proto"
"github.com/golang/snappy"
"github.com/prometheus/common/model"
"golang.org/x/net/context"
"github.com/prometheus/prometheus/storage/remote"
)
type server struct{}
func (server *server) Write(ctx context.Context, req *remote.WriteRequest) (*remote.WriteResponse, error) {
for _, ts := range req.Timeseries {
m := make(model.Metric, len(ts.Labels))
for _, l := range ts.Labels {
m[model.LabelName(l.Name)] = model.LabelValue(l.Value)
}
fmt.Println(m)
for _, s := range ts.Samples {
fmt.Printf(" %f %d\n", s.Value, s.TimestampMs)
}
}
return &remote.WriteResponse{}, nil
}
func main() {
http.Handle("/push", AppenderHandler(&server{}))
http.ListenAndServe(":1234", nil)
}
type WriteServer interface {
Write(context.Context, *remote.WriteRequest) (*remote.WriteResponse, error)
}
// AppenderHandler returns a http.Handler that accepts proto encoded samples.
func AppenderHandler(s WriteServer) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
http.HandleFunc("/receive", func(w http.ResponseWriter, r *http.Request) {
reqBuf, err := ioutil.ReadAll(snappy.NewReader(r.Body))
if err != nil {
http.Error(w, err.Error(), http.StatusBadRequest)
return
}
@ -67,11 +39,18 @@ func AppenderHandler(s WriteServer) http.Handler {
return
}
if _, err := s.Write(context.Background(), &req); err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
for _, ts := range req.Timeseries {
m := make(model.Metric, len(ts.Labels))
for _, l := range ts.Labels {
m[model.LabelName(l.Name)] = model.LabelValue(l.Value)
}
fmt.Println(m)
w.WriteHeader(http.StatusOK)
for _, s := range ts.Samples {
fmt.Printf(" %f %d\n", s.Value, s.TimestampMs)
}
}
})
http.ListenAndServe(":1234", nil)
}