Доброго времени суток уважаемый %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 'Mbytes'
--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>&1
Cоздадим 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>
Можем смотреть получившиеся графики открыв в браузере: http://ваш_сервер/monitor
Для определения температуры будем использовать lm-sensors — набор драйверов и утилита позволяющая отслеживать температуру, напряжение, скорость вращения вентиляторов в вашей системе. Следует помнить, что набор датчиков индивидуален для Вашей системы, поэтому некоторые возможности могут быть недоступны. Так же можете использовать mbmon.
apt-get install lm-sensors
Для определения датчиков:
sensors-detect
Скрипт задаст вам несколько вопросов — не пугайтесь.
Пробуем определить:
sensors
Если температура неверная или не определяется, возможно придется подгрузить модуля ядра, мне помогло:
modprobe it87
и снова sensors
Если температура вывелась правильно добавляем модуль it87 в автозагрузку:
nano /etc/modules
it87
sensors
Далее, как сами понимаете, нужно написать скрипт который будет снимать значения,
рисовать через 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>
По запросу http://ваш_сервер/monitor
можете смотреть статистику в браузере.
Автор: sysbes