RRD: сбор статистики по использованию памяти: различия между версиями
Материал из Linux Wiki
Перейти к навигацииПерейти к поиску
Rain (обсуждение | вклад) |
Rain (обсуждение | вклад) |
||
(не показаны 4 промежуточные версии этого же участника) | |||
Строка 31: | Строка 31: | ||
dbfile="$1" | dbfile="$1" | ||
if [ -z "${1}" ]; then | 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 | fi | ||
if [ ! -e "${dbfile}" ]; then | if [ ! -e "${dbfile}" ]; then | ||
echo -e "\e[31mError: Database \e[33m\"${dbfile}\" \e[31mnot exist\e[0m" | |||
exit 1 | |||
fi | fi | ||
if [ ! -r /proc/meminfo ]; then | if [ ! -r /proc/meminfo ]; then | ||
echo -e "\e[31mError: \e[35m/proc/meminfo:\e[31mcan't get info\e[0m" | |||
exit 3 | |||
fi | fi | ||
rrdtool update "${dbfile}" $( | /usr/bin/rrdtool update "${dbfile}" $(gawk ' | ||
/^MemTotal:/{all=$2} | /^MemTotal:/{all=$2} | ||
/^MemFree:/{free=$2} | /^MemFree:/{free=$2} | ||
/^Buffers:/{buf=$2} | /^Buffers:/{buf=$2} | ||
/^Cached:/{cache=$2} | /^Cached:/{cache=$2} | ||
END {print systime()":"all":"buf":"cache":"all-free-buf-cache":"free} | END {OFMT="%.f" ; print systime()":"all/1024":"buf/1024":"cache/1024":"(all-free-buf-cache)/1024":"free/1024} | ||
' /proc/meminfo) | ' /proc/meminfo | sed 's/,/./g') | ||
</source> | </source> | ||
Строка 69: | Строка 69: | ||
mkgraph() { | mkgraph() { | ||
if [ "$3" == 'normal' ];then | if [ "$3" == 'normal' ];then | ||
size='--width 400 --height 200' | |||
elif [ "$3" == 'large' ]; then | elif [ "$3" == 'large' ]; then | ||
size='--width 900 --height 450' | |||
fi | fi | ||
nice -n 19 rrdtool graph "${2}" --imgformat PNG \ | nice -n 19 /usr/bin/rrdtool graph "${2}" --imgformat PNG \ | ||
DEF:used="${1}":memused:AVERAGE \ | DEF:used="${1}":memused:AVERAGE \ | ||
DEF:buf="${1}": | DEF:buf="${1}":membuf:AVERAGE \ | ||
DEF:cache="${1}":memcache:AVERAGE \ | DEF:cache="${1}":memcache:AVERAGE \ | ||
DEF:free="${1}":memfree:AVERAGE \ | DEF:free="${1}":memfree:AVERAGE \ | ||
LINE1:used#00ff00:'Использовано' \ | |||
LINE1:buf#ff0000:'Буферы':STACK \ | |||
LINE1:cache#0000ff:'Кэш диска':STACK \ | |||
LINE2:free#9999ff:'Свободно':STACK \ | LINE2:free#9999ff:'Свободно':STACK \ | ||
AREA:used# | AREA:used#00ff0055 \ | ||
AREA:buf# | AREA:buf#ff000055::STACK \ | ||
AREA:cache# | AREA:cache#0000ff55::STACK \ | ||
AREA:free# | AREA:free#9999ff55::STACK \ | ||
${size} \ | ${size} \ | ||
--title "${4}" \ | --title "${4}" \ | ||
-s ${5} \ | -s ${5} \ | ||
--lower-limit 0 \ | --lower-limit 0 \ | ||
--units-length 4 \ | |||
--units-exponent 0 \ | |||
--watermark="${HOSTNAME}" \ | --watermark="${HOSTNAME}" \ | ||
--slope-mode \ | --slope-mode \ | ||
Строка 97: | Строка 99: | ||
img="${1##*/}";img="${img%.rrd}" | img="${1##*/}";img="${img%.rrd}" | ||
mkgraph "${1}" "${imgpath}""${img}".h.png | mkgraph "${1}" "${imgpath}""${img}".h.png 'normal' "${2}, час" -75min | ||
mkgraph "${1}" "${imgpath}""${img}".h.large.png | mkgraph "${1}" "${imgpath}""${img}".h.large.png 'large' "${2}, час" -75min | ||
mkgraph "${1}" "${imgpath}""${img}".d.png | mkgraph "${1}" "${imgpath}""${img}".d.png 'normal' "${2}, день" -27h | ||
mkgraph "${1}" "${imgpath}""${img}".d.large.png | mkgraph "${1}" "${imgpath}""${img}".d.large.png 'large' "${2}, день" -27h | ||
mkgraph "${1}" "${imgpath}""${img}".m.png | mkgraph "${1}" "${imgpath}""${img}".m.png 'normal' "${2}, месяц" -33d | ||
mkgraph "${1}" "${imgpath}""${img}".m.large.png | mkgraph "${1}" "${imgpath}""${img}".m.large.png 'large' "${2}, месяц" -33d | ||
mkgraph "${1}" "${imgpath}""${img}".y.png | mkgraph "${1}" "${imgpath}""${img}".y.png 'normal' "${2}, год" -15mon | ||
mkgraph "${1}" "${imgpath}""${img}".y.large.png | mkgraph "${1}" "${imgpath}""${img}".y.large.png 'large' "${2}, год" -15mon | ||
</source> | </source> | ||
[[Category:Round Robin Database]][[Category:Скрипт]] | [[Category:Round Robin Database]][[Category:Скрипт]] |
Текущая версия на 07:59, 12 сентября 2013
Создание базы
База создается с именем /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
/usr/bin/rrdtool update "${dbfile}" $(gawk '
/^MemTotal:/{all=$2}
/^MemFree:/{free=$2}
/^Buffers:/{buf=$2}
/^Cached:/{cache=$2}
END {OFMT="%.f" ; print systime()":"all/1024":"buf/1024":"cache/1024":"(all-free-buf-cache)/1024":"free/1024}
' /proc/meminfo | sed 's/,/./g')
Создание графика
В качестве первого параметра передавать путь к базе, в качестве второго - заголовок графика.
#!/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 /usr/bin/rrdtool graph "${2}" --imgformat PNG \
DEF:used="${1}":memused:AVERAGE \
DEF:buf="${1}":membuf:AVERAGE \
DEF:cache="${1}":memcache:AVERAGE \
DEF:free="${1}":memfree:AVERAGE \
LINE1:used#00ff00:'Использовано' \
LINE1:buf#ff0000:'Буферы':STACK \
LINE1:cache#0000ff:'Кэш диска':STACK \
LINE2:free#9999ff:'Свободно':STACK \
AREA:used#00ff0055 \
AREA:buf#ff000055::STACK \
AREA:cache#0000ff55::STACK \
AREA:free#9999ff55::STACK \
${size} \
--title "${4}" \
-s ${5} \
--lower-limit 0 \
--units-length 4 \
--units-exponent 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