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. 结果如下 

 

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐