1. monStart采集监控指标,从该函数开始
func main() {
...
if config.Config.Enable.Mon {
monStart()
}
...
}
func monStart() {
...
//采集系统指标
funcs.BuildMappers()
funcs.Collect()
...
}
2. 添加自定义指标
type FuncsAndInterval struct {
Fs []func() []*dataobj.MetricValue
Interval int
}
var Mappers []FuncsAndInterval
func BuildMappers() {
interval := sys.Config.Interval
if sys.Config.Enable {
log.Println("sys collect enable is true.")
Mappers = []FuncsAndInterval{
{
Fs: []func() []*dataobj.MetricValue{
CollectorMetrics,
CpuMetrics,
MemMetrics,
NetMetrics,
LoadAvgMetrics,
IOStatsMetrics,
NfMetrics,
FsKernelMetrics,
ProcsNumMetrics,
EntityNumMetrics,
NtpOffsetMetrics,
SocketStatSummaryMetrics,
UdpMetrics,
TcpMetrics,
//测试添加系统mount的数量
MountsMetrics,
},
Interval: interval,
},
{
Fs: []func() []*dataobj.MetricValue{
DeviceMetrics,
},
Interval: interval,
},
}
logger.Infof("BuildMappers Mappers %v", Mappers[0].Fs[0]())
logger.Infof("BuildMappers FsRWEnable %v", sys.Config.FsRWEnable)
if sys.Config.FsRWEnable {
Mapper := FuncsAndInterval{
Fs: []func() []*dataobj.MetricValue{
FsRWMetrics,
},
Interval: interval,
}
Mappers = append(Mappers, Mapper)
}
} else {
log.Println("sys collect enable is false.")
Mappers = []FuncsAndInterval{
{
Fs: []func() []*dataobj.MetricValue{
CollectorMetrics,
},
Interval: interval,
},
}
}
}
func MountsMetrics() []*dataobj.MetricValue {
mounts, err := file.ToString("/proc/mounts")
if err != nil{
return nil
}
listMounts := strings.Split(strings.TrimRight(mounts, "\n"), "\n")
return []*dataobj.MetricValue{
//指标名称,指标值
core.GaugeValue("sys.mounts.total", len(listMounts)),
}
}
3. 结果如下