Currently agent fetches metrics from different sources including /proc file system, top, ps, etc. The files found in /proc file system don't have fixed structure across Linux platforms causing some metrics to be missing or be wrong. Also scrapping lnx commands may not be 100% reliable as well
Change the code to fetch CPU metrics from cgroups. For reporting the CPU, the agent needs to look at cgroups cpuacct.stat file.
Agent will collect process CPU usage when
a) cgroups are ON.
b) cgroups accounting is configured in cgconfig
Agent publishes -1 ( read: N/A) if cgroups are OFF or accounting is OFF.
a) fetch the CPU from cgroups accounting as a sum of CPU spent in both user and system mode.
These are separately maintained counts in cgroups.
b) agent should publish delta (subtracting current from previous reading)
Agent will continue to include two CPU values as part of its inventory publication:
1) Total CPU used by a process from the time it started. This value is used by the webserver to show CPU usage when a process terminates.
2) "Current" CPU used be a process. This is a delta computed as described in 2c above. This value is shown by the webserver while the process is running.