چگونه داده های عددی را به صورت نمودار در لینوکس نمایش دهیم

 

چند روز قبل یکی از همکاران  تکست زد و یه سوال پرسید که ” CPU monitor for Linux? / میخوام data collection با history داشته باشه ” خب من هم که تمام جوابهام کلی ، نامفهوم و گنگ هست. اول یه چیزهایی زمزمه کردم که بدرد هیچ بنی بشری نمیخورد. بعد موتورم روشن شد..

خب من میدونستم که با sysstat میشه منابع سیستم را مانیتور کرد. یکی از ابزار های خوب این مجموعه sar هست که اطلاعات سی پی یو را به ما میده. یه خروجی مثل این:

 

sar-output

خب حالا با این چیکار کنم؟ البته دوستی که این سوال را پرسید ارزش وقت گذاشتن را داشت و من هم بیکار و دنبال دردسر! پس میریم شروع میکنیم، چطوری میشه خیلی راحت همه این داده ها را روی گراف دید و نتیجه گیری کرد.

من میدونستم که با rrdtool میشه نمودارهای هندسی کشید، ولی دنبال یک راه حل ساده تر بودم. یه جستجو روی گوگل به من ابزار خوب gnuplot را معرفی کرد. خیلی راحت از روی مطالب سایت برنامه با آدرس http://www.gnuplot.info/documentation.html میشه به یه کد ساده رسید.

اول باید خروجی را مرتب و قابل استفاده کنبم:

sar -f | grep -Ev ‘Average|LINUX|CPU|^$’ > sar.dat

خروجی سر را میفرستم به گرپ و سطر های خالی و سطرهایی که اون کلمات اضافه را دارند حذف میکنم و همه نتایج را در یک فایل ذخیره میکنم که بعدا قابل استفاده باشه. محتویات فایل  میشه این:

sar-grep

خب حالا میریم سراغ gnuplot و این کد را مینویسیم و به عنوان یک فایل اسکریپت ذخیره و اجرا میکنیم:

#!/usr/bin/gnuplot
set terminal png truecolor
set output “sar-graph.png”
set autoscale
set grid
set style data lines
set title “CPU usage with sar”
set xlabel “Time”
set ylabel “Percent”
set xdata time
set timefmt “%H:%M:%S”
set format x “%H:%M”
plot “sar.dat” using 1:3 title “User” with lines, \
“sar.dat” using 1:5 title “System” with lines, \
“sar.dat” using 1:8 title “Usage” with lines

خیلی ساده اول اومدم نوع نمودار و خروجی و سرنویس ها را مشخص کردم بعد گفتم که نمودار ایکس ها زمان هست که با قالب مشخص شده از ستون اول فایل که بعدا بهش میگم از کجا اون را بخونه و روی صفحه گراف نشون بده. خب حالا تو سه سطر آخر گفتم یه نمودار خطی با هر کدوم از سطرهای مشخص شده از فایل مثلا 3,5,8 بکشه و رنگ و عنوانش زا هم مشخص کنه. خروجی میشه یه فایل تصویر png شبیه این:

sar-graph

خب این از خروجی گزارش کارکرد امروز سی پی یو، بقیه روزها را از کجا بیارم؟

خیلی ساده کافیه فایلی که ابزار sar به عنوان لاگ ذخیره میکنه را با سوییچ -f بهش بدیم مثل این:

sar -f /var/log/sysstat/sa20151025 > sar.dat

خب کار دیگه ای که من کردم این بود که همه اینها را داخل یک فایل اسکریپت مرتب کردم و نوشتم و تاریخ را هم به عنوان آرگومان ورودی گرفتم تا گراف روز دلخواه رسم بشه. فایل را هم میزارم اینجا تا شما هم استفاده و کدهای ناشیانه و ناقص من را بهینه کنید. به  همکار و در واقع استادم که این سوال را پرسیده بود و از امروز تصمیم گرفته با جدیت وارد دنیای آزاد لینوکس بشه خوش آمد میگیم  🙂