
Доброго времени суток уважаемый %user%! Сегодня я расскажу, как поднять мониторинг железа и системы в реальном времени с использованием набора утилит — RRDtool. Нашей целью является сбор и графической отображение в реальном времени данных о работе системы: загрузка CPU, состояние памяти, загрузка сетевых интерфейсов, а так же температура процессора за различные периоды времени.
Немного теории. RRDtool – набор утилит для работы с кольцевыми базами данных. Такие базы специально созданы для хранения изменяющихся во времени последовательностей данных (сетевой трафик, загрузка CPU) – как раз то, что нам нужно. В дополнение будем использовать демон collectd – это небольшой демон, который занимается сбором статистики ресурсов системы за периоды времени – т.е. и создает необходимые кольцевые базы данных на основе которых при помощи RRDtool мы можем строить графики. Перед установкой допустим что у вас уже установлен и настроен веб сервер, он понадобится для просмотра графиков в браузере. Приступим к установке и настройке.
Все манипуляции проводились на свежемустановленном Debian 7 wheezy:
root@kd-ast:/etc/collectd# uname -a
Linux kd-ast 3.2.0-4-686-pae #1 SMP Debian 3.2.46-1 i686 GNU/LinuxДля отрисовки графиков необходимо установить RRDtool:
apt-get install rrdtoolДля сбора статистики об использовании ресурсов системы
вместо самописных скриптов, используем демон «Collectd»:
apt-get install collectdЗапускаем:
cd /usr/sbin/
./collectd onestartПосле загрузки увидим в /var/lib/collectd/router.local, где «router.local» имя вашего сервера.
Теперь можно переходить к самому скрипту, который будет генерировать графики:
#!/bin/sh ### CPU /usr/bin/rrdtool graph /var/www/monitor/cpu0.png \ #путь до RRDtoll и путь куда класть график -e now \ -s 'end - 6 hours' \ -S 60 \ --title "CPU USAGE: AMD Athlon(tm) II X3 455 Processor" \ #CPU --vertical-label "Percents" \ --imgformat PNG \ --slope-mode \ --lower-limit 0 \ --upper-limit 100 \ --rigid \ -E \ -i \ --color SHADEA#FFFFFF \ --color SHADEB#FFFFFF \ --color BACK#CCCCCC \ -w 600 \ -h 150 \ --interlaced \ --font DEFAULT:8:/usr/share/fonts/truetype/ttf-dejavu/DejaVuSansMono.ttf \ DEF:a=/var/lib/collectd/rrd/kd-ast/cpu-0/cpu-idle.rrd:value:MAX \ #пути к кольцевым БД DEF:b=/var/lib/collectd/rrd/kd-ast/cpu-0/cpu-system.rrd:value:MAX \ DEF:c=/var/lib/collectd/rrd/kd-ast/cpu-0/cpu-user.rrd:value:MAX \ LINE2:b#2cc320: \ AREA:b#54eb48:System \ LINE2:c#e7ad4a: \ AREA:c#ebd648:User #LINE1:a#CCCCCC:Idle \ ###eth0 /usr/bin/rrdtool graph /var/www/monitor/network0.png \ -e now \ -s 'end - 6 hours' \ -S 60 \ --title 'Traffic on ext_if: eth0 (local) (100Mb/s)' \ ## название интерфейса --vertical-label 'Mbyte\s' \ --imgformat PNG \ --slope-mode \ --lower-limit 0 \ --upper-limit 20000000 \ # пропускная способность - max --rigid \ -E \ -i \ --color SHADEA#FFFFFF \ --color SHADEB#FFFFFF \ --color BACK#CCCCCC \ -w 600 \ -h 150 \ --interlaced \ --font DEFAULT:8:/usr/share/fonts/truetype/ttf-dejavu/DejaVuSansMono.ttf \ DEF:a=/var/lib/collectd/rrd/kd-ast/interface-eth0/if_octets.rrd:tx:MAX \ DEF:b=/var/lib/collectd/rrd/kd-ast/interface-eth0/if_octets.rrd:rx:MAX \ DEF:c=/var/lib/collectd/rrd/kd-ast/interface-eth0/if_errors.rrd:tx:MAX \ AREA:a#4169E1:Tx \ LINE2:b#2cc320: \ AREA:b#54eb48:Rx \ LINE1:c#FF0000:Errors ### RAM /usr/bin/rrdtool graph /var/www/monitor/memory.png \ -e now \ -s 'end - 6 hours' \ -S 60 \ --title 'MEMORY USAGE: 2Gb' \ # RAM --vertical-label 'Mbyte' \ --imgformat PNG \ --slope-mode \ --lower-limit 0 \ --upper-limit 2000000000 \ # верхний лимит --rigid \ -E \ -i \ --color SHADEA#FFFFFF \ --color SHADEB#FFFFFF \ --color BACK#CCCCCC \ -w 600 \ -h 150 \ --interlaced \ --font DEFAULT:8:/usr/share/fonts/truetype/ttf-dejavu/DejaVuSansMono.ttf \ DEF:a=/var/lib/collectd/rrd/kd-ast/memory/memory-buffered.rrd:value:MAX \ # пути до кольцевых БД DEF:b=/var/lib/collectd/rrd/kd-ast/memory/memory-cached.rrd:value:MAX \ DEF:c=/var/lib/collectd/rrd/kd-ast/memory/memory-free.rrd:value:MAX \ DEF:d=/var/lib/collectd/rrd/kd-ast/memory/memory-used.rrd:value:MAX \ LINE1:a#6959CD:buffered \ AREA:b#00FF00:cache \ LINE2:c#006400: \ AREA:c#00CD66:free \ AREA:d#FF1493:used \
Добавим его в крон, для выполнения через каждую минуту:
nano /etc/crontab*/1 * * * * root /home/sysbes/Scripts/RRDtool/mon.sh > /dev/null 2>&1Cоздадим index.php с таким содержимым:
<html> <head> <meta charset='koi8-r'> <title>NOC</title> </head> <body bgcolor='#8FBC8F'> <br> <center> <h2><font face='Arial'>Визуализация системных ресурсов: kd-ast</font></h2> <br><br> <center> <img src='cpu0.png'> </center><br> <center> </h2> <img src='network0.png'> </center><br> <center> </h2> <img src='memory.png'> </center><br> </body> </html>
Можем смотреть получившиеся графики открыв в браузере:
ваш_сервер/monitorДля определения температуры будем использовать lm-sensors — набор драйверов и утилита позволяющая отслеживать температуру, напряжение, скорость вращения вентиляторов в вашей системе. Следует помнить, что набор датчиков индивидуален для Вашей системы, поэтому некоторые возможности могут быть недоступны. Так же можете использовать mbmon.
apt-get install lm-sensorsДля определения датчиков:
sensors-detect
Скрипт задаст вам несколько вопросов — не пугайтесь.
Пробуем определить:
sensors
Если температура неверная или не определяется, возможно придется подгрузить модуля ядра, мне помогло:
modprobe it87и снова
sensorsЕсли температура вывелась правильно добавляем модуль it87 в автозагрузку:
nano /etc/modules
it87sensorsДалее, как сами понимаете, нужно написать скрипт который будет снимать значения,
рисовать через rrdtool, причём за день, неделю, месяц, год… Потом мы его добавим
в cron и он будет производить свои манипуляции.
Скрипт выдался следующим:
#!/bin/bash RRDTOOL=/usr/bin/rrdtool #путь до RRDtool DATABASE=/var/lib/collectd/rrd/kd-ast/space-temperature.rrd # путь до кольцевой ДБ PERIOD=60 SENSOR=` /usr/bin/sensors | grep temp3 | awk '{ print $2-0}'` # команда запроса температуры IMAGE_PATH=/var/www/monitor # куда складывать графики TITLE_TEXT='CPU TEMP' UNDER_TEXT='TEMP' TEMP_MIN=20 TEMP_MAX=90 if ! [ -f $DATABASE ] then $RRDTOOL create $DATABASE -s $PERIOD DS:temperature:GAUGE:600:10:80 \ RRA:AVERAGE:0.5:1:576 \ RRA:AVERAGE:0.5:6:672 \ RRA:AVERAGE:0.5:24:732 \ RRA:AVERAGE:0.5:144:1460 fi $RRDTOOL update $DATABASE N:$SENSOR function DRAW_GRAPHIC { NOW_HOUR=`date +%H` NOW_MIN=`date +%M` NOW_SEC=`date +%S` case $2 in day) TIME_TEXT="Last 24 hours" ;; week) TIME_TEXT="Last week" ;; month) TIME_TEXT="Last mounth" ;; year) TIME_TEXT="Last year" ;; esac $RRDTOOL graph $IMAGE_PATH/$1 \ -s -1$2 \ -e now \ -a PNG \ -v 'C' \ -t "$TITLE_TEXT [$HOSTNAME] - $TIME_TEXT" \ -l $TEMP_MIN \ -u $TEMP_MAX \ -r \ -E \ -i \ -R light \ --zoom 1.0 \ -w 600 \ -h 150 \ DEF:temperature=$DATABASE:temperature:AVERAGE \ LINE2:temperature#33cc33:"$UNDER_TEXT" \ GPRINT:temperature:MIN:'MIN\:%2.lf' \ GPRINT:temperature:MAX:'MAX\:%2.lf' \ GPRINT:temperature:AVERAGE:'AVG\:%4.1lf' \ GPRINT:temperature:LAST:'NOW\:%2.lf \n' \ COMMENT:"TIME \: $NOW_HOUR\:$NOW_MIN\:$NOW_SEC \n" } DRAW_GRAPHIC 'temp_d.png' 'day' DRAW_GRAPHIC 'temp_w.png' 'week' DRAW_GRAPHIC 'temp_m.png' 'month' DRAW_GRAPHIC 'temp_y.png' 'year'
Скрипт добавьте в crontab, на выполнение каждую минуту:
*/1 * * * * root /home/sysbes/temp.sh > /dev/null 2>&1Примерный вид таблицы стат��стики такой:
<html> <head> <meta charset='koi8-r'> <title> RRD графики температуры : Маршрутизатор БЛА-БЛА</title> </head> <body bgcolor='#ccddcc'> <h2> <font face='Arial'> Температура процессора @ маршрутизатор БЛА-БЛА </font> </h2> <img src='png/temp_d.png'> <br> <img src='png/temp_w.png'> <br> <img src='png/temp_m.png'> <br> <img src='png/temp_y.png'> </body> </html>
В итоге получаем:
<html> <head> <meta charset='koi8-r'> <title>kd-ast</title> </head> <body bgcolor='#8FBC8F'> <br> <center> <h2><font face='Arial'>Real Time Load kd-ast:</font></h2> <center> <img src='cpu0.png'> </center><br> <center> </h2> <img src='network0.png'> </center><br> <center> </h2> <img src='memory.png'> </center><br> <center> <h2><font face='Arial'>CPU TEMP kd-ast:</font></h2> <img src='temp_d.png'> <br> <img src='temp_w.png'> <br> <img src='temp_m.png'> <br> <img src='temp_y.png'> </body> </html>
По запросу
ваш_сервер/monitor можете смотреть статистику в браузере.