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 を掛ける必要があるため、この行を変更すると次の結果が得られます。
###から: ###
リーリー
###に:###
リーリー
以上がPrometheus 用にプログラムで tsdb wal または block を作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。