Исспользование RRDTool в качестве системы мониторинга

  • 1 October 2010
  • taku

Задача: Необходимо настроить систему мониторинга, в данном случае мониториться будут ресурсы сервера виртуализации

Дано:

Ubuntu server 9.10 ядро 2.6.31-16

1) устанавливаем из репозитария

apt-get install rrd-tool

2) создаем скрипт который будем запускать каждую минуту.
touch /usr/local/rrd/resourses.sh
chmod +x /usr/local/rrd/resourses.sh
mcedit /usr/local/rrd/resourses.sh
описываем переменные
#!/bin/bash
RRDTOOL=/usr/bin/rrdtool
DATABASE=/usr/local/rrd/bd/resourses.rrd
PERIOD=5
ipadd="192.168.10.5"
SENSORS="/usr/bin/snmpwalk"
PSCMD="/bin/ps"
core0=`$SENSORS -v 1 -c takuread -Os -Oq $ipadd .1.3.6.1.2.1.25.3.3.1.2 |grep hrProcessorLoad.768 | awk '{print $2}'`
core1=`$SENSORS -v 1 -c takuread -Os -Oq $ipadd .1.3.6.1.2.1.25.3.3.1.2 |grep hrProcessorLoad.769 | awk '{print $2}'`
proc=`$PSCMD ax | grep -c :`
IMAGE_PATH=/var/www/stat/png/
TITLE_TEXT="Ресурсы системы"
TIME="6h"
UNDER_TEXT="Статистика загрузки системы"
OSY="% загрузки"
TEMP_MIN=0
TEMP_MAX=100
NOW_HOUR=`date +%H`
NOW_MIN=`date +%M`
NOW_SEC=`date +%S`

создаем базу данных
if ! [ -f $DATABASE ]
then
$RRDTOOL create $DATABASE --step 60 \
DS:core0:GAUGE:600:U:U \
DS:core1:GAUGE:600:U:U \
DS:proc:GAUGE:600:U:U \
RRA:AVERAGE:0.5:1:525600 \
RRA:MAX:0.5:1440:90 \
RRA:MIN:0.5:1440:90 \
RRA:LAST:0.5:1440:90
fi
и добавляем в неё информацию

$RRDTOOL update $DATABASE N:$core0:$core1:$proc

просмотреть что в базе данных можно коммандой
rrdtool fetch /usr/local/rrd/bd/resourses.rrd AVERAGE
/usr/local/rrd/bd/resourses.rrd заменить на свою бд

вывод информации примерно такой

1263106860: 1,0099866600e+01 1,1900133400e+01 2,3196671113e+02
1263106920: 3,1436317833e+01 1,5897512333e+01 2,2907686575e+02
1263106980: 3,3946044833e+01 3,7406493167e+01 2,2802697758e+02
1263107040: 2,9109465250e+01 3,8978106950e+01 2,2604378610e+02
1263107100: 3,1901807150e+01 4,0934538100e+01 2,3470542145e+02
1263107160: 3,7854807800e+01 3,6120993500e+01 2,2816939090e+02

где первый столбик это время в UNIX формате, последующие столбики это значения
$core0:$core1:$proc получаемые из переменных.

далее пишем функцию при помощи которой будем строить графики.

function DRAW_GRAPHIC
{
# Определяем время, во сколько генерируется график
NOW_HOUR=`date +%H`
NOW_MIN=`date +%M`
NOW_SEC=`date +%S`

# На основе параметра 2, переданного функции вычисляем какой комментарий написать

case $2 in
8h) TIME_TEXT="за последние 8 часов"
;;
day)
TIME_TEXT="за последние 24 часа"
;;
week)
TIME_TEXT="за последнюю неделю"
;;
month)
TIME_TEXT="за последний месяц"
;;
year)
TIME_TEXT="за последний год"
;;
esac

строим сами графики командой «graph»

$RRDTOOL graph $IMAGE_PATH/$1 \
-s -1$2 \
-e now \
-a PNG \
-v "$OSY" \
-t "$TITLE_TEXT [$HOSTNAME] - $TIME_TEXT" \
-l $TEMP_MIN \
-u $TEMP_MAX \
-r \
-E \
-i \
-R light \
--zoom 1.2 \
-w 760 \
-h 150 \
-n DEFAULT:8:Tahoma \
-n TITLE:7:Arial \
-n AXIS:6:Arial \
-n LEGEND:8:"Courier New" \
-n UNIT:7:"Courier New" \
-c BACK#2F2F2F \
-c CANVAS#003333 \
-c SHADEA#CCCCCC \
-c SHADEB#CCCCCC \
-c FONT#FFFFFF \
-c AXIS#FFFFFF \
-c ARROW#FF0000 \
-c GRID#CCCCCC \
-c MGRID#CCCCCC \
DEF:core0=$DATABASE:core0:AVERAGE \
DEF:core1=$DATABASE:core1:AVERAGE \
LINE:core1#33cc33:"Загрузка 1го ядра" \
LINE:core0#00ced1:"загрузка 0го ядра" \
GPRINT:core0:MIN:'Мин\:%2.lf' \
GPRINT:core0:MAX:'Макс\:%2.lf' \
GPRINT:core0:AVERAGE:'Средняя\:%4.1lf' \
GPRINT:core0:LAST:'Текущая\:%2.lf \n' \
GPRINT:core1:MIN:'Мин\:%2.lf' \
GPRINT:core1:MAX:'Макс\:%2.lf' \
GPRINT:core1:AVERAGE:'Средняя\:%4.1lf' \
GPRINT:core1:LAST:'Текущая\:%2.lf \n' \
COMMENT:"Данные сняты \: $NOW_HOUR\:$NOW_MIN\:$NOW_SEC \n"
}
DRAW_GRAPHIC 'core.png' '8h'
DRAW_GRAPHIC 'd/core_d.png' 'day'
DRAW_GRAPHIC 'w/core_w.png' 'week'
DRAW_GRAPHIC 'm/core_m.png' 'month'
DRAW_GRAPHIC 'y/core_y.png' 'year'

тоже самое проделываем и для количества процессов
function DRAW_GRAPHIC
{
# Определяем время, во сколько генерируется график
NOW_HOUR=`date +%H`
NOW_MIN=`date +%M`
NOW_SEC=`date +%S`

case $2 in
8h)
TIME_TEXT="за последние 8 часов"
;;
day)
TIME_TEXT="за последние 24 часа"
;;
week)
TIME_TEXT="за последнюю неделю"
;;
month)
TIME_TEXT="за последний месяц"
;;
year)
TIME_TEXT="за последний год"
;;
esac

$RRDTOOL graph $IMAGE_PATH/$1 \
-s -1$2 \
-e now \
-a PNG \
-v "Количество процессов" \
-t "Количество процессов в системе [$HOSTNAME] - $TIME_TEXT" \
-r \
-E \
-i \
-R light \
--zoom 1.2 \
-w 760 \
-h 150 \
-n DEFAULT:8:Tahoma \
-n TITLE:7:Arial \
-n AXIS:6:Arial \
-n LEGEND:8:"Courier New" \
-n UNIT:7:"Courier New" \
-c BACK#2F2F2F \
-c CANVAS#003333 \
-c SHADEA#CCCCCC \
-c SHADEB#CCCCCC \
-c FONT#FFFFFF \
-c AXIS#FFFFFF \
-c ARROW#FF0000 \
-c GRID#CCCCCC \
-c MGRID#CCCCCC \
DEF:proc=$DATABASE:proc:AVERAGE \
LINE:proc#00ced1:"Количество процессов в системе за последние "$TIME"" \
GPRINT:proc:MIN:'Мин\:%2.lf' \
GPRINT:proc:MAX:'Макс\:%2.lf' \
GPRINT:proc:AVERAGE:'Средняя\:%4.1lf' \
GPRINT:proc:LAST:'Текущая\:%2.lf \n' \
COMMENT:"Данные сняты \: $NOW_HOUR\:$NOW_MIN\:$NOW_SEC \n"
}

DRAW_GRAPHIC 'proc.png' '8h'
DRAW_GRAPHIC 'd/proc_d.png' 'day'
DRAW_GRAPHIC 'w/proc_w.png' 'week'
DRAW_GRAPHIC 'm/proc_m.png' 'month'
DRAW_GRAPHIC 'y/proc_y.png' 'year'

со скриптом закончили теперь после его запуска в каталоге IMAGE_PATH=/var/www/stat/png/
должны появиться файлики с разрешением.png
3) если пункт 2 выполнен успешно то переходим к следующему пункту, а именно редактированию crona
даем команду crontab -e # -e означает editor
прописываем
*/1 * * * * /usr/local/rrd/resourses.sh >/dev/null 2>&1
все теперь проверяем пишем watch ls -l /var/www/stat/png/
если в данном каталоге время создания графиков изменилось, то все работает.
4) сделаем простую страничку для отображения графиков, в вашей www директории создаем index.php в нем прописываем

<?php
//require_once ("/bd/authorization/security_mod.php");
$uptime = shell_exec("cut -d. -f1 /proc/uptime");
$days = floor($uptime/60/60/24);
$hours = $uptime/60/60%24;
$mins = $uptime/60%60;
$secs = $uptime%60;
echo "This server is up $days days $hours hours $mins minutes and $secs seconds";
?>

<html>
<head>
<meta charset='koi8-r'>
<title>Страница статистики сервера</title>
<meta http-equiv="Content-Type" content="text/html; charset=koi8-r">
//<META HTTP-EQUIV=Refresh CONTENT="60; URL=http://taku.org.ru/stat/">
</head>
<body bgcolor='#ccddcc'>
<h2> <font face='Arial'>Мониторинг использования ресурсов</font> </h2>
<img src='png/core.png'> <br>
<img src='png/proc.png'> <br>
<img src='png/temp-cpu.png'> <br>
<img src='png/speed-fan.png'> <br>
<img src='png/temp-hdd.png'> <br>
</body>
</html>

скрипты rrd-scripts.tar

Комментарии

Добавить комментарий

Plain text

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Строки и абзацы переносятся автоматически.