วิธีการของคุณถูกต้อง คุณสามารถใช้ / proc / stat เป็นข้อมูลดิบและฟีดเช่น rrdtool กับมัน ฉันทำอะไรแบบนี้แล้วฉันรู้ว่ามันเป็นไปได้ 100% คุณสามารถทำกราฟโหลดทั้งระบบหรือแต่ละคอร์ได้ทีละอย่าง
นี่คือตัวอย่างการทำงานของฉันเอง:
การอ้างใหม่ -> คุณสามารถทำได้ไม่ใช่เรื่องยากเพียงแค่คณิตศาสตร์พื้นฐานและกราฟของฉันเป็นตัวอย่างจริงของสิ่งนั้น สำหรับการรวบรวมข้อมูลฉันทำสแน็ปช็อตของ / proc / stat ไปยังไฟล์ชั่วคราวโลคัลบน ramdisk จากนั้นฉันแยกวิเคราะห์ไฟล์นั้นเพื่อรวบรวมข้อมูลทุก 1 นาที
ฉันจะแยกวิเคราะห์ข้อมูล (ส่วนของสคริปต์ทุบตี):
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