categraf/inputs/procstat
yushuangyu b004dc4c61 1. add kafka metrics collector
2. change Sample funcs from package inputs to types to avoid cycle imports
3. add runtimex.Stack to print stack detail when panic
2022-07-03 22:01:41 +08:00
..
README.md 1. add kafka metrics collector 2022-07-03 22:01:41 +08:00
alerts.json add some alerts.json 2022-05-27 18:45:52 +08:00
native_finder.go add procstat, just statistic proc number 2022-04-21 16:39:53 +08:00
native_finder_notwindows.go add procstat, just statistic proc number 2022-04-21 16:39:53 +08:00
native_finder_windows.go add procstat, just statistic proc number 2022-04-21 16:39:53 +08:00
process.go add procstat, just statistic proc number 2022-04-21 16:39:53 +08:00
procstat.go 1. add kafka metrics collector 2022-07-03 22:01:41 +08:00
win_service_notwindows.go add procstat, just statistic proc number 2022-04-21 16:39:53 +08:00
win_service_windows.go add procstat, just statistic proc number 2022-04-21 16:39:53 +08:00

README.md

procstat

进程监控插件两个核心作用监控进程是否存活、监控进程使用了多少资源CPU、内存、文件句柄等

存活监控

如果进程监听了端口,就直接用 net_response 来做存活性监控即可,无需使用 procstat 来做,因为:端口在监听,说明进程一定活着

进程筛选

机器上进程很多,我们要做进程监控,就要想办法告诉 Categraf 要监控哪些进程,通过 search 打头的那几个配置,可以做进程过滤筛选:

# # executable name (ie, pgrep <search_exec_substring>)
search_exec_substring = "nginx"

# # pattern as argument for pgrep (ie, pgrep -f <search_cmdline_substring>)
# search_cmdline_substring = "n9e server"

# # windows service name
# search_win_service = ""

上面三个 search 相关的配置,每个采集目标选用其中一个

mode

mode 配置有两个值供选择,一个是 solaris一个是 irix默认是 irix用这个配置来决定使用哪种 cpu 使用率的计算方法:

func (ins *Instance) gatherCPU(slist *list.SafeList, procs map[PID]Process, tags map[string]string, solarisMode bool) {
	var value float64
	for pid := range procs {
		v, err := procs[pid].Percent(time.Duration(0))
		if err == nil {
			if solarisMode {
				value += v / float64(runtime.NumCPU())
				slist.PushFront(types.NewSample("cpu_usage", v/float64(runtime.NumCPU()), map[string]string{"pid": fmt.Sprint(pid)}, tags))
			} else {
				value += v
				slist.PushFront(types.NewSample("cpu_usage", v, map[string]string{"pid": fmt.Sprint(pid)}, tags))
			}
		}
	}

	if ins.GatherTotal {
		slist.PushFront(types.NewSample("cpu_usage_total", value, tags))
	}
}

gather_total

比如进程名字是 mysql 的进程,同时可能运行了多个,我们想知道这个机器上的所有 mysql 的进程占用的总的 cpu、mem、fd 等,就设置 gather_total = true当然对于 uptime 和 limit 的采集gather_total 的时候是取的多个进程的最小值

gather_per_pid

还是拿 mysql 举例,一个机器上可能同时运行了多个,我们可能想知道每个 mysql 进程的资源占用情况,此时就要启用 gather_per_pid 的配置,设置为 true此时会采集每个进程的资源占用情况并附上 pid 作为标签来区分

gather_more_metrics

默认 procstat 插件只是采集进程数量,如果想采集进程占用的资源,就要启用 gather_more_metrics 中的项,启用哪个就额外采集哪个