당신의 접근 방식이 맞습니다. / proc / stat를 원시 데이터로 사용하고 rrdtool과 같은 피드를 제공 할 수 있습니다. 나는 100 % 가능하다는 것을 알기 위해 이와 같은 것을 스스로 해왔다. 그런 다음 전체 시스템로드 또는 각 코어를 개별적으로 그래프로 표시 할 수 있습니다.
내 자신의 실제 예는 다음과 같습니다.
다시 가정-> 당신은 그것을 할 수 있습니다, 그것은 기본적인 수학이 어렵지 않으며 내 그래프는 그 실제 예입니다. 데이터를 수집하기 위해 / proc / stat의 스냅 샷을 램 디스크에 현지화 된 임시 파일로 만든 다음 1 분마다 데이터를 수집하기 위해 해당 파일을 구문 분석합니다.
데이터를 구문 분석하는 방법 (bash 스크립트 조각) :
cat=/bin/cat # others defined the same way
......
$cat /proc/stat > /ramdisk/tmp/stat
ssCpuRawUser=`$cat /ramdisk/tmp/stat|$grep "cpu " | $awk '{print $2}'`
ssCpuRawNice=`$cat /ramdisk/tmp/stat|$grep "cpu " | $awk '{print $3}'`
#other columns follow .......
#the most important there is that it is an incrementing COUNTER.
if [ ! -f ${data_dir}/sys.cpu.rrd ];then
$rrdtool create ${data_dir}/sys.cpu.rrd -s 60 \
DS:ssCpuRawUser:COUNTER:300:0:1250000 \
DS:ssCpuRawNice:COUNTER:300:0:1250000 \
DS:ssCpuRawSystem:COUNTER:300:0:1250000 \
DS:ssCpuRawIdle:COUNTER:300:0:1250000 \
DS:ssCpuRawIOwait:COUNTER:300:0:1250000 \
DS:ssCpuRawIRQ:COUNTER:300:0:1250000 \
DS:ssCpuRawSoftIRQ:COUNTER:300:0:1250000 \
RRA:AVERAGE:0.5:1:532800
fi
$rrdtool update ${data_dir}/sys.cpu.rrd N:$ssCpuRawUser:$ssCpuRawNice:$ssCpuRawSystem:$ssCpuRawIdle:$ssCpuRawIOwait:$ssCpuRawIRQ:$ssCpuRawSoftIRQ
# then in a loop each core the same way until all are parsed.
당신이 rrd 데이터베이스에 데이터를 얻은 후 당신은 그래프와 하늘이 한계입니다 :) http://oss.oetiker.ch/rrdtool/doc/rrdgraph.en.html