RRD: сбор статистики по использованию памяти

Материал из Linux Wiki
Перейти к навигацииПерейти к поиску

Создание базы

База создается с именем /home/stats/memload.$HOSTNAME.rrd, интервал добавления данных - 10 секунд, 5 полей для информации о состоянии памяти - общий размер (вдруг пригодится :)), буферы, кэш диска, данные приложений, свободная память. Замеры с 4-мя ступенями разрешения:

  • С разрешением в 10 секунд интервал в 100 минут (больше часа)
  • С разрешением в 1,5 минуты интервал в 33 часа (больше суток)
  • C разрешением в 10 минут интервал в 37 дней (больше месяца)
  • С разрешением в 3 часа интервал в 1,3 года (год и 3 месяца)

rrdtool create /home/stats/memload.$HOSTNAME.rrd --step 10 \
DS:memtotal:GAUGE:20:U:U \
DS:membuf:GAUGE:20:U:U \
DS:memcache:GAUGE:20:U:U \
DS:memused:GAUGE:20:U:U \
DS:memfree:GAUGE:20:U:U \
RRA:AVERAGE:0.5:1:600 \
RRA:AVERAGE:0.5:8:1500 \
RRA:AVERAGE:0.5:64:5000 \
RRA:AVERAGE:0.5:512:8000

Добавление данных

Выполнять каждые 10 секунд, в качестве параметра передается путь к базе.

#!/bin/bash

dbfile="$1"
if [ -z "${1}" ]; then
	echo -e "
	\e[32mUsage: \e[31m$0 \e[33mRRDBFILE

	\e[32mExample: \e[31m$0 \e[33m/home/$USER/mymemory.rrd
	\e[0m"
	exit 2
fi
if [ ! -e "${dbfile}" ]; then
	echo -e "\e[31mError: Database \e[33m\"${dbfile}\" \e[31mnot exist\e[0m"
	exit 1
fi
if [ ! -r /proc/meminfo ]; then
	echo -e "\e[31mError: \e[35m/proc/meminfo:\e[31mcan't get info\e[0m"
	exit 3
fi

rrdtool update "${dbfile}" $(awk '
/^MemTotal:/{all=$2}
/^MemFree:/{free=$2}
/^Buffers:/{buf=$2}
/^Cached:/{cache=$2}
END {print systime()":"all":"buf":"cache":"all-free-buf-cache":"free}
' /proc/meminfo)

Создание графика


#!/bin/bash

imgpath='/home/stats/graphs/'

mkgraph() {
if [ "$3" == 'normal' ];then
	size='--width 400 --height 200'
elif [ "$3" == 'large' ]; then
	size='--width 900 --height 450'
fi
nice -n 19 rrdtool graph "${2}" --imgformat PNG \
DEF:used=meminfo.rrd:memused:AVERAGE \
DEF:buf=meminfo.rrd:membuff:AVERAGE \
DEF:cache=meminfo.rrd:memcache:AVERAGE \
DEF:free=meminfo.rrd:memfree:AVERAGE \
LINE2:used#00ff00:'Использовано' \
LINE2:buf#ff0000:'Буферы':STACK \
LINE2:cache#0000ff:'Кэш диска':STACK \
LINE2:free#9999ff:'Свободно':STACK \
AREA:used#00ff0044 \
AREA:buf#ff000044::STACK \
AREA:cache#0000ff44::STACK \
AREA:free#9999ff44::STACK
${size} \
--title "${4}" \
-s ${5} \
--lower-limit 0 \
--watermark="${HOSTNAME}" \
--slope-mode \
--lazy
}

img="${1##*/}";img="${img%.rrd}"

mkgraph "${1}" "${imgpath}""${img}".h.png		'normal' "${2}, час" -75min
mkgraph "${1}" "${imgpath}""${img}".h.large.png		'large'	 "${2}, час" -75min

mkgraph "${1}" "${imgpath}""${img}".d.png	 	'normal' "${2}, день" -27h
mkgraph "${1}" "${imgpath}""${img}".d.large.png		'large'	 "${2}, день" -27h

mkgraph "${1}" "${imgpath}""${img}".m.png		'normal' "${2}, месяц" -33d
mkgraph "${1}" "${imgpath}""${img}".m.large.png		'large'	 "${2}, месяц" -33d

mkgraph "${1}" "${imgpath}""${img}".y.png 		'normal' "${2}, год" -15mon
mkgraph "${1}" "${imgpath}""${img}".y.large.png		'large'	 "${2}, год" -15mon