Maison >développement back-end >Golang >Comment créer un wal ou un bloc tsdb par programme pour Prometheus

Comment créer un wal ou un bloc tsdb par programme pour Prometheus

PHPz
PHPzavant
2024-02-06 08:40:03737parcourir

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

Contenu de la question

J'ai besoin de générer des exemples de données pour Prometheus et d'essayer de créer un script pour créer des blocs tsdb par programme. Avec l'aide de ChatGPT, j'ai écrit ce code et il crée le bloc WAL que Prometheus accepte et crée même le nom de la série détectée par saisie semi-automatique, mais je ne vois aucune valeur, pourquoi ?

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)
    }
}

Bonne réponse


D'accord, le code ci-dessus fonctionne, le seul problème est que je dois passer le temps en millisecondes et time.Now().Unix() le renvoie en secondes, vous devez donc le multiplier par 1000, donc apporter des modifications à cette ligne donnera à vous le résultat :

De :

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

À :

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer