为了账号安全,请及时绑定邮箱和手机立即绑定

为 golang prometheus 收集器添加标签

为 golang prometheus 收集器添加标签

Go
一只甜甜圈 2023-05-02 10:24:07
我想弄清楚如何向普罗米修斯收集器添加标签。任何想法我在这里缺少什么?我有两个文件:main.go 和 collector.go我使用以下链接作为指南。https://rsmitty.github.io/Prometheus-Exporters/我模拟了这个例子,所以我可以把它贴在这里。我最终不会为命令提取“date +%s”。只是不知道在哪里添加标签。对于我正在尝试添加主机名的标签,结果如下:# HELP cmd_result Shows the cmd result# TYPE cmd_result gaugecmd_result{host="my_device_hostname"} 1.919256141363144e-76我对 golang 也很陌生,所以我很有可能把这一切都弄错了!我最终试图让普罗米修斯在每次刮擦时拉出 cmd 结果。主程序package mainimport (    "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))}收集器.gopackage mainimport (    "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)}
查看完整描述

1 回答

?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

我想到了。我必须在调用 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)

查看完整回答
反对 回复 2023-05-02
  • 1 回答
  • 0 关注
  • 189 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信