相对于使用python+flask等方式生成metric更加鲁棒,也占用了更少的资源,同时让部署更加方便和集中,不失为一种规模管理集群监控的好方法
首先安装golang,保证版本为最新即可
wget https://studygolang.com/dl/golang/go1.14.7.linux-amd64.tar.gz
关于go env设置不再赘述
安装git工具,保证git工具为最新
yum install git -y
从github下载node_exporter得项目
go get github.com/prometheus/node_exporter
cd ${GOPATH-$HOME/go}/src/github.com/prometheus/node_exporter
make
./node_exporter <flags>
make是一个基本得操作,如果你不想make,可以使用go build命令
然后向项目中添加一个自定义的metric collector
比如添加一个online.go,用来收集游戏的在线数据
package collector
import (
"github.com/go-kit/kit/log"
"github.com/prometheus/client_golang/prometheus"
)
//定义数据结构
type OnlineCollector struct {
online typedDesc
logger log.Logger
}
//注册collector
func init() {
registerCollector("online", defaultEnabled, newOnlineCollector)
}
//新建collector
func newOnlineCollector(logger log.Logger) (Collector, error) {
return &OnlineCollector{
online: typedDesc{
prometheus.NewDesc(
prometheus.BuildFQName(namespace, "", "online data"),
"game online data.",
nil, nil,
), prometheus.GaugeValue},
logger: logger,
}, nil
}
//下面的函数是需要自定义的收集游戏数据metric的函数
func getOnlineValue() (float64, error) {
return 1234, nil
}
//更新metric数据到channel
func (c *OnlineCollector) Update(ch chan<- prometheus.Metric) error {
v, err := getOnlineValue()
if err != nil {
return err
}
ch <- prometheus.MustNewConstMetric(
prometheus.NewDesc(
prometheus.BuildFQName(namespace, "", "ccu_online"), //这里的ccu_online就是metric的名字
"current online data", //这里是描述
nil, nil,
), prometheus.GaugeValue, v)
return nil
}
然后编译项目,生成node_exporter可执行文件
运行
查看node_exporter生成的metric数据
curl localhost:9100/metrics
可看到以下的数据
# HELP node_ccu_online current online data
# TYPE node_ccu_online gauge
node_ccu_online 1234