Рисуем графики с помощью RRDtool + collectd
20.01.2011 - 08:06
Для сбора статистики об использовании ресурсов системы я решил, вместо самописных скриптов, использовать демон "Collectd".
Добавим его в /etc/rc.conf для автостарта:
Запускаем:
После загрузки увидим в /var/lib/collectd/router.local, где "router.local" моя переменная с hostname, свежесозданные базы *.rrd.
Создадим недостающую директорию в /usr/local/www для Apache:
Теперь можно переходить к самому скрипту, который будет генерировать графики:
В /usr/local/www/graph, создадим index.php с таким содержимым:
Теперь в браузере, увидим красивые графики:
Обсуждения на форуме: тут.
В этой заметке хочу описать один из вариантов использования набора графических утилит RRDtool, для мониторинга системных ресурсов и загруженности на сетевых интерфейсах. Итак, приступим к установке.
Для отрисовки графиков необходимо установить RRDtool:
[root@router /]# cd /usr/ports/databases/rrdtool12
[root@router /usr/ports/databases/rrdtool12]# make config
[root@router /usr/ports/databases/rrdtool12]# make config
В окне "Options for rrdtool 1.4.4" выбираем:
[X] MMAP Use mmap in rrd_update
[X] PERL_MODULE Build PERL module
[X] PERL_MODULE Build PERL module
[root@router /usr/ports/databases/rrdtool12]# make install clean
############################################################################
# See /usr/local/share/examples/rrdtool for some demonstration code #
############################################################################
===> Compressing manual pages for rrdtool-1.4.4
===> Running ldconfig
/sbin/ldconfig -m /usr/local/lib
===> Registering installation for rrdtool-1.4.4
===> SECURITY REPORT:
This port has installed the following files which may act as network
servers and may therefore pose a remote security risk to the system.
/usr/local/bin/rrdcached
If there are vulnerabilities in these programs there may be a security
risk to the system. FreeBSD makes no guarantee about the security of
ports included in the Ports Collection. Please type 'make deinstall'
to deinstall the port if this is a concern.
For more information, and contact details about the security
status of this software, see the following webpage:
http://www.rrdtool.org/
===> Cleaning for pango-1.28.3
===> Cleaning for rrdtool-1.4.4
[root@srv /usr/ports/databases/rrdtool]#
# See /usr/local/share/examples/rrdtool for some demonstration code #
############################################################################
===> Compressing manual pages for rrdtool-1.4.4
===> Running ldconfig
/sbin/ldconfig -m /usr/local/lib
===> Registering installation for rrdtool-1.4.4
===> SECURITY REPORT:
This port has installed the following files which may act as network
servers and may therefore pose a remote security risk to the system.
/usr/local/bin/rrdcached
If there are vulnerabilities in these programs there may be a security
risk to the system. FreeBSD makes no guarantee about the security of
ports included in the Ports Collection. Please type 'make deinstall'
to deinstall the port if this is a concern.
For more information, and contact details about the security
status of this software, see the following webpage:
http://www.rrdtool.org/
===> Cleaning for pango-1.28.3
===> Cleaning for rrdtool-1.4.4
[root@srv /usr/ports/databases/rrdtool]#
Для сбора статистики об использовании ресурсов системы я решил, вместо самописных скриптов, использовать демон "Collectd".
[root@srv /usr/ports]# cd /usr/ports/net-mgmt/collectd
[root@srv /usr/ports/net-mgmt/collectd]# make config
[root@srv /usr/ports/net-mgmt/collectd]# make config
Options for collectd 4.9.3_1
[X] INTERFACE Input: Network interfaces (libstatgrab)
[X] PING Input: Network latency (liboping)
[X] RRDTOOL Output: RRDTool
[X] INTERFACE Input: Network interfaces (libstatgrab)
[X] PING Input: Network latency (liboping)
[X] RRDTOOL Output: RRDTool
[root@srv /usr/ports/net-mgmt/collectd]# make install clean
===> SECURITY REPORT:
This port has installed the following files which may act as network
servers and may therefore pose a remote security risk to the system.
/usr/local/lib/collectd/unixsock.so
/usr/local/lib/collectd/email.so
This port has installed the following startup scripts which may cause
these network services to be started at boot time.
/usr/local/etc/rc.d/collectdmon
/usr/local/etc/rc.d/collectd
If there are vulnerabilities in these programs there may be a security
risk to the system. FreeBSD makes no guarantee about the security of
ports included in the Ports Collection. Please type 'make deinstall'
to deinstall the port if this is a concern.
For more information, and contact details about the security
status of this software, see the following webpage:
http://www.collectd.org/
===> Cleaning for libstatgrab-0.17
===> Cleaning for liboping-0.3.5
===> Cleaning for collectd-4.9.3_1
[root@srv /usr/ports/net-mgmt/collectd]#
This port has installed the following files which may act as network
servers and may therefore pose a remote security risk to the system.
/usr/local/lib/collectd/unixsock.so
/usr/local/lib/collectd/email.so
This port has installed the following startup scripts which may cause
these network services to be started at boot time.
/usr/local/etc/rc.d/collectdmon
/usr/local/etc/rc.d/collectd
If there are vulnerabilities in these programs there may be a security
risk to the system. FreeBSD makes no guarantee about the security of
ports included in the Ports Collection. Please type 'make deinstall'
to deinstall the port if this is a concern.
For more information, and contact details about the security
status of this software, see the following webpage:
http://www.collectd.org/
===> Cleaning for libstatgrab-0.17
===> Cleaning for liboping-0.3.5
===> Cleaning for collectd-4.9.3_1
[root@srv /usr/ports/net-mgmt/collectd]#
Добавим его в /etc/rc.conf для автостарта:
collectd_enable="YES"
Запускаем:
[root@srv /usr/local/etc/rc.d]# ./collectd start
Starting collectd.
[root@srv /usr/local/etc/rc.d]#
Starting collectd.
[root@srv /usr/local/etc/rc.d]#
После загрузки увидим в /var/lib/collectd/router.local, где "router.local" моя переменная с hostname, свежесозданные базы *.rrd.
Создадим недостающую директорию в /usr/local/www для Apache:
[root@srv /]#mkdir /usr/local/www/graph
Теперь можно переходить к самому скрипту, который будет генерировать графики:
[root@srv /]#cat /mnt/mon.sh
#!/usr/local/bin/bash
/usr/local/bin/rrdtool graph /usr/local/www/graph/cpu0.png \
-e now \
-s 'end - 6 hours' \
-S 60 \
--title "CPU USAGE: Intel Atom230 1.6Ghz" \
--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/local/share/rrdtool/fonts/ARIAL8.TTF \
DEF:a=/var/lib/collectd/router.local/cpu-0/cpu-idle.rrd:value:MAX \
DEF:b=/var/lib/collectd/router.local/cpu-0/cpu-system.rrd:value:MAX \
DEF:c=/var/lib/collectd/router.local/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 \
/usr/local/bin/rrdtool graph /usr/local/www/graph/network0.png \
-e now \
-s 'end - 6 hours' \
-S 60 \
--title 'Traffic on ext_if: ng0 (25Mb/s)' \
--vertical-label 'Mbyte\s' \
--imgformat PNG \
--slope-mode \
--lower-limit 0 \
--upper-limit 3500000 \
--rigid \
-E \
-i \
--color SHADEA#FFFFFF \
--color SHADEB#FFFFFF \
--color BACK#CCCCCC \
-w 600 \
-h 150 \
--interlaced \
--font DEFAULT:8:/usr/local/share/rrdtool/fonts/ARIAL8.TTF \
DEF:a=/var/lib/collectd/router.local/interface/if_octets-ng0.rrd:tx:MAX \
DEF:b=/var/lib/collectd/router.local/interface/if_octets-ng0.rrd:rx:MAX \
DEF:c=/var/lib/collectd/router.local/interface/if_errors-ng0.rrd:tx:MAX \
AREA:a#4169E1:Tx \
LINE2:b#2cc320: \
AREA:b#54eb48:Rx \
LINE1:c#FF0000:Errors
/usr/local/bin/rrdtool graph /usr/local/www/graph/network2.png \
-e now \
-s 'end - 6 hours' \
-S 60 \
--title 'Traffic on int_if: rl0 (100Mb/s)' \
--vertical-label 'Mbyte\s' \
--imgformat PNG \
--slope-mode \
--lower-limit 0 \
--upper-limit 12500000 \
--rigid \
-E \
-i \
--color SHADEA#FFFFFF \
--color SHADEB#FFFFFF \
--color BACK#CCCCCC \
-w 600 \
-h 150 \
--interlaced \
--font DEFAULT:8:/usr/local/share/rrdtool/fonts/ARIAL8.TTF \
DEF:a=/var/lib/collectd/router.local/interface/if_octets-rl0.rrd:tx:MAX \
DEF:b=/var/lib/collectd/router.local/interface/if_octets-rl0.rrd:rx:MAX \
DEF:c=/var/lib/collectd/router.local/interface/if_errors-rl0.rrd:tx:MAX \
LINE2:a#0000CD: \
AREA:a#4169E1:Tx-transmit \
LINE2:b#2cc320: \
AREA:b#54eb48:Rx-receive \
LINE1:c#FF0000:Errors
/usr/local/bin/rrdtool graph /usr/local/www/graph/memory.png \
-e now \
-s 'end - 6 hours' \
-S 60 \
--title 'MEMORY USAGE: 1Gb' \
--vertical-label 'Mbyte' \
--imgformat PNG \
--slope-mode \
--lower-limit 0 \
--upper-limit 1048000000 \
--rigid \
-E \
-i \
--color SHADEA#FFFFFF \
--color SHADEB#FFFFFF \
--color BACK#CCCCCC \
-w 600 \
-h 150 \
--interlaced \
--font DEFAULT:8:/usr/local/share/rrdtool/fonts/ARIAL8.TTF \
DEF:a=/var/lib/collectd/router.local/memory/memory-active.rrd:value:MAX \
DEF:b=/var/lib/collectd/router.local/memory/memory-cache.rrd:value:MAX \
DEF:c=/var/lib/collectd/router.local/memory/memory-free.rrd:value:MAX \
DEF:d=/var/lib/collectd/router.local/memory/memory-inactive.rrd:value:MAX \
DEF:e=/var/lib/collectd/router.local/memory/memory-wired.rrd:value:MAX \
LINE1:a#6959CD:active \
AREA:b#00FF00:cache \
LINE2:c#006400: \
AREA:c#00CD66:free \
AREA:d#FF1493:inactive \
LINE2:e#A52A2A: \
AREA:e#FF4500:wired
/usr/local/bin/rrdtool graph /usr/local/www/graph/cpu0.png \
-e now \
-s 'end - 6 hours' \
-S 60 \
--title "CPU USAGE: Intel Atom230 1.6Ghz" \
--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/local/share/rrdtool/fonts/ARIAL8.TTF \
DEF:a=/var/lib/collectd/router.local/cpu-0/cpu-idle.rrd:value:MAX \
DEF:b=/var/lib/collectd/router.local/cpu-0/cpu-system.rrd:value:MAX \
DEF:c=/var/lib/collectd/router.local/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 \
/usr/local/bin/rrdtool graph /usr/local/www/graph/network0.png \
-e now \
-s 'end - 6 hours' \
-S 60 \
--title 'Traffic on ext_if: ng0 (25Mb/s)' \
--vertical-label 'Mbyte\s' \
--imgformat PNG \
--slope-mode \
--lower-limit 0 \
--upper-limit 3500000 \
--rigid \
-E \
-i \
--color SHADEA#FFFFFF \
--color SHADEB#FFFFFF \
--color BACK#CCCCCC \
-w 600 \
-h 150 \
--interlaced \
--font DEFAULT:8:/usr/local/share/rrdtool/fonts/ARIAL8.TTF \
DEF:a=/var/lib/collectd/router.local/interface/if_octets-ng0.rrd:tx:MAX \
DEF:b=/var/lib/collectd/router.local/interface/if_octets-ng0.rrd:rx:MAX \
DEF:c=/var/lib/collectd/router.local/interface/if_errors-ng0.rrd:tx:MAX \
AREA:a#4169E1:Tx \
LINE2:b#2cc320: \
AREA:b#54eb48:Rx \
LINE1:c#FF0000:Errors
/usr/local/bin/rrdtool graph /usr/local/www/graph/network2.png \
-e now \
-s 'end - 6 hours' \
-S 60 \
--title 'Traffic on int_if: rl0 (100Mb/s)' \
--vertical-label 'Mbyte\s' \
--imgformat PNG \
--slope-mode \
--lower-limit 0 \
--upper-limit 12500000 \
--rigid \
-E \
-i \
--color SHADEA#FFFFFF \
--color SHADEB#FFFFFF \
--color BACK#CCCCCC \
-w 600 \
-h 150 \
--interlaced \
--font DEFAULT:8:/usr/local/share/rrdtool/fonts/ARIAL8.TTF \
DEF:a=/var/lib/collectd/router.local/interface/if_octets-rl0.rrd:tx:MAX \
DEF:b=/var/lib/collectd/router.local/interface/if_octets-rl0.rrd:rx:MAX \
DEF:c=/var/lib/collectd/router.local/interface/if_errors-rl0.rrd:tx:MAX \
LINE2:a#0000CD: \
AREA:a#4169E1:Tx-transmit \
LINE2:b#2cc320: \
AREA:b#54eb48:Rx-receive \
LINE1:c#FF0000:Errors
/usr/local/bin/rrdtool graph /usr/local/www/graph/memory.png \
-e now \
-s 'end - 6 hours' \
-S 60 \
--title 'MEMORY USAGE: 1Gb' \
--vertical-label 'Mbyte' \
--imgformat PNG \
--slope-mode \
--lower-limit 0 \
--upper-limit 1048000000 \
--rigid \
-E \
-i \
--color SHADEA#FFFFFF \
--color SHADEB#FFFFFF \
--color BACK#CCCCCC \
-w 600 \
-h 150 \
--interlaced \
--font DEFAULT:8:/usr/local/share/rrdtool/fonts/ARIAL8.TTF \
DEF:a=/var/lib/collectd/router.local/memory/memory-active.rrd:value:MAX \
DEF:b=/var/lib/collectd/router.local/memory/memory-cache.rrd:value:MAX \
DEF:c=/var/lib/collectd/router.local/memory/memory-free.rrd:value:MAX \
DEF:d=/var/lib/collectd/router.local/memory/memory-inactive.rrd:value:MAX \
DEF:e=/var/lib/collectd/router.local/memory/memory-wired.rrd:value:MAX \
LINE1:a#6959CD:active \
AREA:b#00FF00:cache \
LINE2:c#006400: \
AREA:c#00CD66:free \
AREA:d#FF1493:inactive \
LINE2:e#A52A2A: \
AREA:e#FF4500:wired
Добавим его в крон, для выполнения через каждую минуту:
[root@srv /]#cat >> /etc/crontab
*/1 * * * * root /mnt/mon.sh > /dev/null 2>&1
В /usr/local/www/graph, создадим index.php с таким содержимым:
<html>
<head>
<meta charset='koi8-r'>
<title>NOC</title>
</head>
<body bgcolor='#8FBC8F'>
<br>
<center> <h2><font face='Arial'>Визуализация системных ресурсов: router.local</font></h2>
<br><br>
<center> <img src='cpu0.png'> </center><br>
<center> </h2> <img src='network0.png'> </center><br>
<center> </h2> <img src='network2.png'> </center><br>
<center> </h2> <img src='memory.png'> </center><br>
</body>
</html>
<head>
<meta charset='koi8-r'>
<title>NOC</title>
</head>
<body bgcolor='#8FBC8F'>
<br>
<center> <h2><font face='Arial'>Визуализация системных ресурсов: router.local</font></h2>
<br><br>
<center> <img src='cpu0.png'> </center><br>
<center> </h2> <img src='network0.png'> </center><br>
<center> </h2> <img src='network2.png'> </center><br>
<center> </h2> <img src='memory.png'> </center><br>
</body>
</html>
Теперь в браузере, увидим красивые графики:
http://router.local/graph/
Обсуждения на форуме: тут.
- Войдите на сайт для отправки комментариев
- Версия для печати
дабы не править под каждый хост весть конфиг я сделал так:
myhostname=ttys.dyndns.org
DEF:b=/var/lib/collectd/$myhostname/cpu-0/cpu-system.rrd:value:MAX \
DEF:c=/var/lib/collectd/$myhostname/cpu-0/cpu-user.rrd:value:MAX \
и наверное так же надо сделать с интерфейсами
PS * * * * * /mnt/mon.sh > /dev/null 2>&1