我需要為 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中文網其他相關文章!