You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

77 lines
1.9 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package collector
//这个就相对简单。我们只需使用之前定义的函数方法。满足name以及Scrape 接口即可 然后通过chan <- prometheus.Metric只写管道来写入我们需要的指标
//这里需要注意的是我们之前提到的4中prometheus指标类型有一些在这里需要float64的值传入
//但是我们收集到的并不一定都是float64类型的那么我们在做类型转换的过程中需要考虑大转小溢出的问题
import (
"fmt"
"github.com/prometheus/client_golang/prometheus"
"github.com/shirou/gopsutil/host"
"github.com/shirou/gopsutil/load"
"log"
"net"
)
type CpuLoad struct{}
// cpu info
func (CpuLoad) Name() string {
return namespace + "_cpu_load"
}
func (CpuLoad) Scrape(ch chan<- prometheus.Metric) error {
//hostinfo := GetHost()
hostinfo, err := host.Info()
cpuload, err := load.Avg()
if err != nil {
log.Printf("cpu load is not ,%v\n", err)
return err
}
ch <- prometheus.MustNewConstMetric(
//这里的label是固定标签 我们可以通过
NewDesc("cpu_load", "one", "cpu load", []string{"type"}, prometheus.Labels{"host": hostinfo.Hostname, "ip": GetIP()}),
prometheus.GaugeValue,
cpuload.Load1,
//动态标签的值 可以有多个动态标签
"metrics",
)
ch <- prometheus.MustNewConstMetric(
NewDesc("cpu_load", "five", "cpu load", nil, nil),
prometheus.GaugeValue,
cpuload.Load5,
)
ch <- prometheus.MustNewConstMetric(
NewDesc("cpu_load", "fifteen", "cpu load", nil, nil),
prometheus.GaugeValue,
cpuload.Load15,
)
return nil
}
// 获取网络信息
func GetIP() string {
addrs, err := net.InterfaceAddrs()
if err != nil {
fmt.Println(err)
return ""
}
for _, address := range addrs {
// 检查ip地址判断是否回环地址
if ipnet, ok := address.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
if ipnet.IP.To4() != nil {
//fmt.Println(ipnet.Mask)
//fmt.Println(ipnet.IP)
return ipnet.IP.String()
}
}
}
return ""
}