Skip to main content

Write data to M3DB with Go

This example writes some data to an M3DB service from Go, making use of the Prometheus write features.

Variables

These are the placeholders you will need to replace in the code sample:

VariableDescription
PROM_WRITE_URLURL for Prometheus writes, from the service overview page

Prerequisites

For this example you will need:

  1. The Prometheus client for Go:

    go get -u github.com/m3db/prometheus_remote_client_golang/promremote

Code

Add the following to main.go and replace the PROM_WRITE_URL placeholder:

package main

import (
"context"
"fmt"
"log"
"time"

"github.com/m3db/prometheus_remote_client_golang/promremote"
)

func main() {
cfg := promremote.NewConfig(
promremote.WriteURLOption(PROM_WRITE_URL),
promremote.HTTPClientTimeoutOption(60*time.Second),
promremote.UserAgent("aiven-docs/0.1"),
)
client, err := promremote.NewClient(cfg)
if err != nil {
log.Fatal(fmt.Errorf("unable to construct client: %v", err))
}
timeSeriesList := []promremote.TimeSeries{
{
Labels: []promremote.Label{
{
Name: "__name__",
Value: "cpu_temp_instant",
},
},
Datapoint: promremote.Datapoint{
Timestamp: time.Now(),
Value: 83.0,
},
},
}

var ctx = context.Background()
var writeOpts promremote.WriteOptions
result, err := client.WriteTimeSeries(ctx, timeSeriesList, writeOpts)
if err != nil {
log.Fatal(err)
}
fmt.Printf("Status code: %d\n", result.StatusCode)
}

Since M3DB also supports Prometheus-style writes, this code sets up a Prometheus client and then constructs the expected data format to send to M3DB.

To run the code:

go run main.go

If the script outputs Status code: 200 then there is data in your M3DB. See Visualize M3DB data with Grafana.