首頁  >  文章  >  後端開發  >  如何以程式設計方式為 Prometheus 建立 tsdb wal 或區塊

如何以程式設計方式為 Prometheus 建立 tsdb wal 或區塊

PHPz
PHPz轉載
2024-02-06 08:40:03645瀏覽

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

問題內容

我需要為 Prometheus 產生範例數據,並嘗試建立一個腳本來以程式設計方式建立 tsdb 區塊。在 ChatGPT 的幫助下,我編寫了這段程式碼,它創建了 Prometheus 接受的 WAL 區塊,甚至創建了自動完成檢測到的系列名稱,但我沒有看到任何值,為什麼?

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

正確答案


好的,上面的程式碼可以工作,唯一的問題是我需要以毫秒為單位傳遞時間,而time.Now ().Unix() 以秒為單位傳回它,因此您需要將其乘以1000,因此進行更改這行會給你結果:

來自:

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

以上是如何以程式設計方式為 Prometheus 建立 tsdb wal 或區塊的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除