RRD: Сбор информации с UPS через NUT: различия между версиями

Материал из Linux Wiki
Перейти к навигацииПерейти к поиску
 
(не показаны 3 промежуточные версии этого же участника)
Строка 51: Строка 51:
if /bin/upsc "${@}" 1>/dev/null; then
if /bin/upsc "${@}" 1>/dev/null; then
         sleep .1
         sleep .1
         rrdtool update "${dbfile}" $(/bin/upsc "${@}" | awk '
         rrdtool update "${dbfile}" $(/bin/upsc "${@}" | gawk '
/battery.charge:/{charge=$2}
/battery.charge:/{charge=$2}
/input.voltage:/{inv=$2}
/input.voltage:/{inv=$2}
Строка 70: Строка 70:
<source lang=bash>
<source lang=bash>
#!/bin/bash
#!/bin/bash
imgpath='/home/stats/graphs/'


mkgraph() {
mkgraph() {
rrdtool graph "${1}" --imgformat PNG \
if [ "$3" == 'normal' ];then
DEF:inputv="${2}":inputv:AVERAGE \
        size='--width 400 --height 200'
DEF:outputv="${2}":outputv:AVERAGE \
elif [ "$3" == 'large' ]; then
DEF:charge="${2}":charge:AVERAGE \
        size='--width 900 --height 450'
DEF:load="${2}":load:AVERAGE \
fi
nice -n 19 rrdtool graph "${2}" --imgformat PNG \
DEF:inputv="${1}":inputv:AVERAGE \
DEF:outputv="${1}":outputv:AVERAGE \
DEF:charge="${1}":charge:AVERAGE \
DEF:load="${1}":load:AVERAGE \
LINE2:inputv#ff0000aa:'Входное напряжение' \
LINE2:inputv#ff0000aa:'Входное напряжение' \
LINE2:outputv#0000ffaa:'Выходное напряжение' \
LINE2:outputv#0000ffaa:'Выходное напряжение' \
LINE2:charge#00aaff:'Заряд батареи' \
LINE2:charge#00aaff:'Заряд батареи' \
LINE2:load#ff00ff:'Загрузка UPS' \
LINE2:load#ff00ff:'Загрузка UPS' \
--width "${5}" --height "${6}" \
-s ${4} \
--lower-limit 0 \
--lower-limit 0 \
--title "${3}" \
${size} \
--title "${4}" \
-s ${5} \
--watermark="${HOSTNAME}" \
--watermark="${HOSTNAME}" \
--lazy \
--lazy \
Строка 90: Строка 97:
}
}


mkgraph /home/stats/graphs/${1##*/}.hourly.png  "${1}" "Состояние UPS ${2}, час" -75min 400 200
img="${1##*/}";img="${img%.rrd}"
mkgraph /home/stats/graphs/${1##*/}.hourly.large.png    "${1}" "Состояние UPS ${2}, час" -75min 900 450
 
mkgraph /home/stats/graphs/${1##*/}.daiy.png            "${1}" "Состояние UPS ${2}, день" -27h 400 200
mkgraph /home/stats/graphs/${1##*/}.daily.large.png    "${1}" "Состояние UPS ${2}, день" -27h 900 450


mkgraph /home/stats/graphs/${1##*/}.monthly.png        "${1}" "Состояние UPS ${2}, месяц" -33d 400 200
mkgraph "${1}" "${imgpath}""${img}".h.png              'normal' "Состояние UPS ${2}, час" -75min
mkgraph /home/stats/graphs/${1##*/}.monthly.large.png   "${1}" "Состояние UPS ${2}, месяц" -33d 900 450
mkgraph "${1}" "${imgpath}""${img}".h.large.png        'large'  "Состояние UPS ${2}, час" -75min
                         
mkgraph "${1}" "${imgpath}""${img}".d.png              'normal' "Состояние UPS ${2}, день" -27h
mkgraph "${1}" "${imgpath}""${img}".d.large.png        'large'  "Состояние UPS ${2}, день" -27h           
                                                                                                           
mkgraph "${1}" "${imgpath}""${img}".m.png              'normal' "Состояние UPS ${2}, месяц" -33d          
mkgraph "${1}" "${imgpath}""${img}".m.large.png         'large'  "Состояние UPS ${2}, месяц" -33d
               
mkgraph "${1}" "${imgpath}""${img}".y.png              'normal' "Состояние UPS ${2}, год" -15mon
mkgraph "${1}" "${imgpath}""${img}".y.large.png        'large'  "Состояние UPS ${2}, год" -15mon


mkgraph /home/stats/graphs/${1##*/}.yearly.png          "${1}" "Состояние UPS ${2}, год" -15mon 400 200
mkgraph /home/stats/graphs/${1##*/}.yearly.large.png    "${1}" "Состояние UPS ${2}, год" -15mon 900 450
</source>
</source>


[[Category:Скрипт]][[Category:Round Robin Database]]
[[Category:Скрипт]][[Category:Round Robin Database]]

Текущая версия на 07:59, 12 сентября 2013

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

База создается с именем /home/stats/power.mustek600.$HOSTNAME.rrd, интервал добавления данных - 5 секунд, 3 поля для информации по загрузке за 5, 10 и 15 минут, замеры с 4-мя ступенями разрешения:

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

rrdtool create /home/stats/dbs/power.mustek600.$HOSTNAME.rrd --step 5 \
DS:inputv:GAUGE:10:U:U \
DS:outputv:GAUGE:10:U:U \
DS:charge:GAUGE:10:U:U \
DS:load:GAUGE:10:U:U \
RRA:AVERAGE:0.5:1:1200 \
RRA:AVERAGE:0.5:8:3000 \
RRA:AVERAGE:0.5:64:10000 \
RRA:AVERAGE:0.5:512:16000

Сбор информации

Скрипт для сбора информации о текущем состоянии ЮПС через upsc, входящий в состав Network UPS Tools и занесении данных в RRD-базу. В качестве первого параметра передается имя базы, остальные параметры напрямую передаются upsc.


#!/bin/bash                                                                                                                                                     

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

        \e[32mExample: \e[31m$0 \e[33m/home/$USER/myups.rrd \e[36mmyups1000va
        \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 [ ! -e /bin/upsc ]; then
        echo -e "\e[31mError: \e[35m/bin/upsc:\e[31m no such file\e[0m"
        exit 3
fi

shift

if /bin/upsc "${@}" 1>/dev/null; then
        sleep .1
        rrdtool update "${dbfile}" $(/bin/upsc "${@}" | gawk '
/battery.charge:/{charge=$2}
/input.voltage:/{inv=$2}
/output.voltage:/{outv=$2}
/ups.load:/{load=$2}
END {print systime()":"inv":"outv":"charge":"load}
')
else
        echo "\e[31mError: Can't get info about \e[36"${@}"\e[0m"
fi

Построение графика

В качестве первого параметра передается путь к базе, в качестве второго - название ЮПС, отображаемое в заголовке графика.


#!/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:inputv="${1}":inputv:AVERAGE \
DEF:outputv="${1}":outputv:AVERAGE \
DEF:charge="${1}":charge:AVERAGE \
DEF:load="${1}":load:AVERAGE \
LINE2:inputv#ff0000aa:'Входное напряжение' \
LINE2:outputv#0000ffaa:'Выходное напряжение' \
LINE2:charge#00aaff:'Заряд батареи' \
LINE2:load#ff00ff:'Загрузка UPS' \
--lower-limit 0 \
${size} \
--title "${4}" \
-s ${5} \
--watermark="${HOSTNAME}" \
--lazy \
--slope-mode
}

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

mkgraph "${1}" "${imgpath}""${img}".h.png               'normal' "Состояние UPS ${2}, час" -75min
mkgraph "${1}" "${imgpath}""${img}".h.large.png         'large'  "Состояние UPS ${2}, час" -75min
                          
mkgraph "${1}" "${imgpath}""${img}".d.png               'normal' "Состояние UPS ${2}, день" -27h
mkgraph "${1}" "${imgpath}""${img}".d.large.png         'large'  "Состояние UPS ${2}, день" -27h            
                                                                                                            
mkgraph "${1}" "${imgpath}""${img}".m.png               'normal' "Состояние UPS ${2}, месяц" -33d           
mkgraph "${1}" "${imgpath}""${img}".m.large.png         'large'  "Состояние UPS ${2}, месяц" -33d
                
mkgraph "${1}" "${imgpath}""${img}".y.png               'normal' "Состояние UPS ${2}, год" -15mon
mkgraph "${1}" "${imgpath}""${img}".y.large.png         'large'  "Состояние UPS ${2}, год" -15mon