Browse Source

add remote write example

main
Nicolas Massé 3 years ago
parent
commit
a815242a45
  1. 43
      go.mod
  2. 1401
      go.sum
  3. 50
      main.go
  4. 6
      podman-compose.yaml

43
go.mod

@ -3,17 +3,50 @@ module github.com/nmasse-itix/Prometheus-Examples
go 1.18
require (
github.com/golang/protobuf v1.5.2
github.com/golang/snappy v0.0.4
github.com/prometheus/client_golang v1.12.2
github.com/prometheus/common v0.32.1
github.com/prometheus/common v0.35.0
github.com/prometheus/prometheus v0.35.0
google.golang.org/protobuf v1.28.0
)
require (
github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 // indirect
github.com/aws/aws-sdk-go v1.44.20 // indirect
github.com/beorn7/perks v1.0.1 // indirect
github.com/cespare/xxhash/v2 v2.1.2 // indirect
github.com/golang/protobuf v1.5.2 // indirect
github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/dennwc/varint v1.0.0 // indirect
github.com/felixge/httpsnoop v1.0.2 // indirect
github.com/go-kit/log v0.2.1 // indirect
github.com/go-logfmt/logfmt v0.5.1 // indirect
github.com/go-logr/logr v1.2.3 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/grafana/regexp v0.0.0-20220304095617-2e8d9baf4ac2 // indirect
github.com/jmespath/go-jmespath v0.4.0 // indirect
github.com/jpillora/backoff v1.0.0 // indirect
github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/prometheus/client_model v0.2.0 // indirect
github.com/prometheus/common/sigv4 v0.1.0 // indirect
github.com/prometheus/procfs v0.7.3 // indirect
golang.org/x/sys v0.0.0-20220114195835-da31bd327af9 // indirect
google.golang.org/protobuf v1.26.0 // indirect
github.com/stretchr/testify v1.7.1 // indirect
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.31.0 // indirect
go.opentelemetry.io/otel v1.6.1 // indirect
go.opentelemetry.io/otel/metric v0.28.0 // indirect
go.opentelemetry.io/otel/trace v1.6.1 // indirect
go.uber.org/atomic v1.9.0 // indirect
go.uber.org/goleak v1.1.12 // indirect
golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2 // indirect
golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5 // indirect
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a // indirect
golang.org/x/text v0.3.7 // indirect
golang.org/x/time v0.0.0-20220224211638-0e9765cccd65 // indirect
google.golang.org/appengine v1.6.7 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
gopkg.in/yaml.v3 v3.0.0 // indirect
)

1401
go.sum

File diff suppressed because it is too large

50
main.go

@ -1,8 +1,10 @@
package main
import (
"context"
"fmt"
"net/http"
"net/url"
"os"
"time"
@ -11,6 +13,15 @@ import (
"github.com/prometheus/client_golang/prometheus/promhttp"
"github.com/prometheus/client_golang/prometheus/push"
"github.com/prometheus/common/expfmt"
"github.com/prometheus/common/model"
protov1 "github.com/golang/protobuf/proto"
"github.com/golang/snappy"
promConfig "github.com/prometheus/common/config"
"github.com/prometheus/prometheus/model/timestamp"
"github.com/prometheus/prometheus/prompb"
"github.com/prometheus/prometheus/storage/remote"
"google.golang.org/protobuf/proto"
)
func recordMetrics(delay time.Duration) {
@ -75,6 +86,45 @@ func main() {
fmt.Println("Could not push to Pushgateway:", err)
}
}
} else if os.Args[1] == "remote-write" {
u, _ := url.Parse("http://localhost:9090/api/v1/write")
remoteConfig := remote.ClientConfig{
URL: &promConfig.URL{URL: u},
Timeout: model.Duration(10 * time.Second),
RetryOnRateLimit: true,
}
client, err := remote.NewWriteClient("test-app", &remoteConfig)
if err != nil {
panic(err)
}
val := 1.0
for {
ts := prompb.TimeSeries{
Labels: []prompb.Label{
{Name: "__name__", Value: "myapp_highfreq_data"},
},
Samples: []prompb.Sample{
{Timestamp: timestamp.FromTime(time.Now()), Value: val},
},
}
reqv1 := prompb.WriteRequest{
Timeseries: []prompb.TimeSeries{ts},
}
reqv2 := protov1.MessageV2(&reqv1)
if buf, err := proto.Marshal(reqv2); err != nil {
panic(err)
} else {
encoded := snappy.Encode(nil, buf) // this call can panic
if err = client.Store(context.Background(), encoded); err != nil {
panic(err)
}
}
time.Sleep(10 * time.Millisecond)
val += 0.01
}
}
}

6
podman-compose.yaml

@ -7,4 +7,10 @@ services:
volumes:
- ./.podman-compose/prometheus/config:/etc/prometheus:z
- ./.podman-compose/prometheus/data:/prometheus:z
command:
- "--config.file=/etc/prometheus/prometheus.yml"
- "--storage.tsdb.path=/prometheus"
- "--web.console.libraries=/usr/share/prometheus/console_libraries"
- "--web.console.templates=/usr/share/prometheus/consoles"
- "--web.enable-remote-write-receiver"
restart: always

Loading…
Cancel
Save