为 golang prometheus 收集器添加标签

我想弄清楚如何向普罗米修斯收集器添加标签。任何想法我在这里缺少什么?我有两个文件:main.go 和 collector.go


我使用以下链接作为指南。https://rsmitty.github.io/Prometheus-Exporters/


我模拟了这个例子,所以我可以把它贴在这里。我最终不会为命令提取“date +%s”。只是不知道在哪里添加标签。


对于我正在尝试添加主机名的标签,结果如下:


# HELP cmd_result Shows the cmd result

# TYPE cmd_result gauge

cmd_result{host="my_device_hostname"} 1.919256141363144e-76

我对 golang 也很陌生,所以我很有可能把这一切都弄错了!我最终试图让普罗米修斯在每次刮擦时拉出 cmd 结果。


主程序


package main


import (

    "net/http"


    log "github.com/Sirupsen/logrus"

    "github.com/prometheus/client_golang/prometheus"

    "github.com/prometheus/client_golang/prometheus/promhttp"

)


func main() {


    //Create a new instance of the collector and

    //register it with the prometheus client.

    cmd := newCollector()

    prometheus.MustRegister(cmd)


    //This section will start the HTTP server and expose

    //any metrics on the /metrics endpoint.

    http.Handle("/metrics", promhttp.Handler())

    log.Info("Beginning to serve on port :8080")

    log.Fatal(http.ListenAndServe(":8080", nil))

}

收集器.go


package main


import (

    "encoding/binary"

    "fmt"

    "math"

    "os/exec"

    "strings"


    "github.com/prometheus/client_golang/prometheus"

)


type cmdCollector struct {

    cmdMetric *prometheus.Desc

}


func newCollector() *cmdCollector {

    return &cmdCollector{

        cmdMetric: prometheus.NewDesc("cmd_result",

            "Shows the cmd result",

            nil, nil,

        ),

    }

}


func (collector *cmdCollector) Describe(ch chan<- *prometheus.Desc) {

    ch <- collector.cmdMetric

}


func (collector *cmdCollector) Collect(ch chan<- prometheus.Metric) {


    var metricValue float64

    command := string("date +%s")

    cmdResult := exeCmd(command)

    metricValue = cmdResult


    ch <- prometheus.MustNewConstMetric(collector.cmdMetric, prometheus.GaugeValue, metricValue)


}



一只甜甜圈
浏览 190回答 1
1回答

潇潇雨雨

我想到了。我必须在调用 NewDesc 方法的地方声明标签,然后在 MustNewConstMetric 方法中传递值这是带有“主机名”标签的新“newCollector”。func newCollector() *cmdCollector {    return &cmdCollector{        cmdMetric: prometheus.NewDesc("cmd_result",            "Shows the cmd result",            []string{"hostname"}, nil,        ),    }}值得注意的是,我只是在这里添加“变量标签”。最后一个 'nil' 用于常量标签。您可以像这样添加任意数量的项目...[]string{"hostname", "another_label", "and_another_label"}这在此处介绍: https ://godoc.org/github.com/prometheus/client_golang/prometheus#NewDesc接下来,我可以在调用“MustNewConstMetric”方法时添加这些值。ch <- prometheus.MustNewConstMetric(collector.cmdMetric, prometheus.GaugeValue, metricValue, hostname)整个街区...func (collector *cmdCollector) Collect(ch chan<- prometheus.Metric) {    var metricValue float64    command := string("date +%s")    cmdResult := exeCmd(command)    metricValue = cmdResult    ch <- prometheus.MustNewConstMetric(collector.cmdMetric, prometheus.GaugeValue, metricValue, hostname)}如果我传入多个标签;比如我上面的例子,它看起来更像这样......ch <- prometheus.MustNewConstMetric(collector.cmdMetric, prometheus.GaugeValue, metricValue, hostname, anotherLabel", "andAnotherLabel)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go