Heim  >  Artikel  >  Backend-Entwicklung  >  So erstellen Sie programmgesteuert einen Tsdb-Wal oder -Block für Prometheus

So erstellen Sie programmgesteuert einen Tsdb-Wal oder -Block für Prometheus

PHPz
PHPznach vorne
2024-02-06 08:40:03645Durchsuche

如何以编程方式为 Prometheus 创建 tsdb wal 或块

Frageninhalt

Ich muss Beispieldaten für Prometheus generieren und versuchen, ein Skript zu erstellen, um tsdb-Blöcke programmgesteuert zu erstellen. Mit Hilfe von ChatGPT habe ich diesen Code geschrieben und er erstellt den WAL-Block, den Prometheus akzeptiert, und erstellt sogar den durch die automatische Vervollständigung erkannten Seriennamen, aber ich sehe keinen Wert, warum?

package main

import (
    "context"
    "fmt"
    "github.com/prometheus/prometheus/model/labels"
    "github.com/prometheus/prometheus/storage"
    "github.com/prometheus/prometheus/tsdb"
    "os"
    "time"
)

func main() {
    // Create a new TSDB instance
    db, err := tsdb.Open(
        "./data", // directory where the data will be stored
        nil,      // a logger (can be nil for no logging)
        nil,      // an optional prometheus.Registerer
        tsdb.DefaultOptions(),
        nil,
    )
    if err != nil {
        fmt.Println("Error opening TSDB:", err)
        os.Exit(1)
    }
    defer db.Close()

    // Create a new appender
    app := db.Appender(context.Background())

    // Create labels for the gauge time series
    lbls := labels.FromStrings("__name__", "example_gauge", "type", "gauge")

    // Initialize a SeriesRef
    var ref storage.SeriesRef

    // Add some data points
    for i := 0; i < 10; i++ {
        var err error
        ref, err = app.Append(ref, lbls, time.Now().Unix()+int64(i), float64(i))
        if err != nil {
            fmt.Println("Error appending:", err)
            os.Exit(1)
        }
    }

    // Commit the data
    err = app.Commit()
    if err != nil {
        fmt.Println("Error committing:", err)
        os.Exit(1)
    }
}

Richtige Antwort


Okay, der obige Code funktioniert, das einzige Problem ist, dass ich die Zeit in Millisekunden übergeben muss und time.Now().Unix() sie in Sekunden zurückgibt, sodass Sie sie mit 1000 multiplizieren müssen, damit Änderungen an dieser Zeile etwas ergeben Dir das Ergebnis:

Von:

ref, err = app.Append(ref, lbls, time.Now().Unix()+int64(i), float64(i))

An:

ref, err = app.Append(ref, lbls, (time.Now().Unix()+int64(i)) * 1000, float64(i))

Das obige ist der detaillierte Inhalt vonSo erstellen Sie programmgesteuert einen Tsdb-Wal oder -Block für Prometheus. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen