Maison > développement back-end > Golang > le corps du texte

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

PHPz
Libérer: 2024-02-06 08:40:03
avant
645 Les gens l'ont consulté

如何以编程方式为 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)
    }
}
Copier après la connexion


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))
Copier après la connexion

À :

ref, err = app.Append(ref, lbls, (time.Now().Unix()+int64(i)) * 1000, float64(i))
Copier après la connexion

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!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!