PrometheusでNewMetricWithTimestampを使って時刻指定する
会社でPrometheusのexporterを作っているんですが、Gauge型でいくつかのlabel付けつつtimestampも指定するサンプルの情報があまりなかったので記事にしておきます。
以下のサンプルでは現在時刻を指定しているのであまり意味がありませんが、 そこはデータの発生時刻など良しなにしてください。
package main import ( "log" "net/http" "time" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promhttp" ) // type type myCollector struct { temp *prometheus.Desc } var label = []string{"addr", "host"} func newMyCollector() *myCollector { return &myCollector{ temp: prometheus.NewDesc( "temp", "hello world", label, nil, ), } } func (c *myCollector) Describe(ch chan<- *prometheus.Desc) { ch <- c.temp } func (c *myCollector) Collect(ch chan<- prometheus.Metric) { labelValue := prometheus.Labels{ "addr": "xxx.xxx.xxx.xxx", //ラベルの値 "host": "japan", //ラベルの値 } ch <- prometheus.NewMetricWithTimestamp( time.Now(), // 時刻を指定する prometheus.MustNewConstMetric( c.temp, prometheus.GaugeValue, 1000.0, //メトリクス値 labelValue["addr"], //ラベル labelValue["host"], //ラベル ), ) } // main func main() { //create (cc myCollector) cc := newMyCollector() //register prometheus.MustRegister(cc) //HTTP Server http.Handle("/metrics", promhttp.Handler()) log.Fatal(http.ListenAndServe(":8080", nil)) }