Мониторинг ресурсов сервера под управлением *nix с помошью RRDtool

в 1:02, , рубрики: collectd, Debian, rrdtool, Песочница, системное администрирование, метки: , , ,

Мониторинг ресурсов сервера под управлением *nix с помошью RRDtool

Доброго времени суток уважаемый %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

Источник



https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js