func CheckCollector() { output := make(map[string]bool) _, procStatErr := nux.CurrentProcStat() _, listDiskErr := nux.ListDiskStats() ports, listeningPortsErr := nux.ListeningPorts() procs, psErr := nux.AllProcs() _, duErr := sys.CmdOut("du", "--help") output["kernel "] = len(KernelMetrics()) > 0 output["df.bytes"] = len(DeviceMetrics()) > 0 output["net.if "] = len(CoreNetMetrics([]string{})) > 0 output["loadavg "] = len(LoadAvgMetrics()) > 0 output["cpustat "] = procStatErr == nil output["disk.io "] = listDiskErr == nil output["memory "] = len(MemMetrics()) > 0 output["netstat "] = len(NetstatMetrics()) > 0 output["ss -s "] = len(SocketStatSummaryMetrics()) > 0 output["ss -tln "] = listeningPortsErr == nil && len(ports) > 0 output["ps aux "] = psErr == nil && len(procs) > 0 output["du -bs "] = duErr == nil for k, v := range output { status := "fail" if v { status = "ok" } fmt.Println(k, "...", status) } }
func ProcMetrics() (L []*model.MetricValue) { reportProcs := g.ReportProcs() sz := len(reportProcs) if sz == 0 { return } ps, err := nux.AllProcs() if err != nil { log.Println(err) return } pslen := len(ps) for tags, m := range reportProcs { cnt := 0 for i := 0; i < pslen; i++ { if is_a(ps[i], m) { cnt++ } } L = append(L, GaugeValue("proc.num", cnt, tags)) } return }
func ProcMetrics() (L []*model.MetricValue) { reportProcs := g.ReportProcs() sz := len(reportProcs) if sz == 0 { return } ps, err := nux.AllProcs() if err != nil { log.Println(err) return } pslen := len(ps) for tags, preProc := range reportProcs { cnt := 0 pids := map[int]struct{}{} for i := 0; i < pslen; i++ { if is_a(ps[i], preProc) { cnt++ pids[ps[i].Pid] = struct{}{} } } if cnt > 0 && is_restart_proc(pids, preProc) { //此进程发生了重启,将进程数置为0 cnt = 0 } L = append(L, GaugeValue(g.PROC_NUM, cnt, tags)) } return }