Мониторинг с помощью mrtg+apache во FreeBSD


Надеюсь, данный опус поможет желающим представлять важные параметры своей системы в виде графиков для удобства мониторинга. Эта система крутится у меня на FreeBSD 5.4Stable. Нам понадобятся :
mrtg (про rrdtool я в курсе, но мне лениво разбираться с форматом базы данных)
apache
самописный скрипт, который, собственно, и будет скармливать mrtg необходимые параметры, на основе которых и будет строиться график.
софт, выдающий информацию, которую от него просят. Это может быть все, что угодно: счетчики трафика, команда du, хоть средства для получения сведений о погоде на Марсе, но здесь я буду использовать ipfw.

Поставим индейца.

cd /usr/ports/www/apache13/ && make install

Если у Вас старая верия, то Вы можете обновить ее с помощью portupgrade или portinstall -r, обновив порты. Я рекомендую не использовать
для обновления дерева портов cvsup - можно обойтись вытягиванием тарболла с сервера ftp.citkit.ru:

cd /usr
fetch ftp://ftp.citkit.ru/pub/FreeBSD/ports/ports/ports.tar.gz
tar xvfz ports.tar.gz
cd /usr/ports/
make fetchindex

Quod erat demonstrandum - все гораздо проще и быстрее.
После этого производим настройку httpd.conf по вкусу.

Далее устанавливаем mrtg:

cd /usr/ports/net-mgmt/mrtg
make install

Он вытянет за собой и библиотеку gd, которая и занимается отрисовкой, да и не только ее.

Теперь - самое важное. Вообще, mrtg очень хорошо работает с snmp-агентами, но в данном примере мы не будем ими пользоваться, а получать информацию от ipfw, для чего напишем следующие правила :

ipfw add 50 count ip from any to any in via <вненшний интерфейс>
ipfw add 51 count ip from any to any out via <внешний интерфейс>

и поместим их в скрипт, выполняющийся при запуске системы.

Далее, нам необходимо получать информацию о входящих/исходящих байтах данных и отдавать ее mrtg :

#!/bin/sh
/sbin/ipfw show 50 | /usr/bin/awk {'print $3'}
/sbin/ipfw show 51 | /usr/bin/awk {'print $3'}
echo fxp0

То есть, мы отдаем 3 строки : количество входящих байт, количество исходящих и имя интерфейса.

Если не ошибаюсь, то точнее /usr/bin/awk '{print $3}'. - ig 07/05/2007 11:31

Далее пишем конфигурационный файл mrtg :

WorkDir: /usr/local/www/data/mrtg
Pagetop[fxp0]: <H1> Traffic on fxp0 </H1>
Title[fxp0]: Traffic fxp0
# следующая строка необходима в случае, если Вы не хотите использовать cron
#Runasdaemon: Yes
MaxBytes[fxp0]: 1250000
AbsMax[fxp0]: 1250000
Target[fxp0]: `/usr/local/etc/ipfw`
XSize[fxp0]: 400
YSize[fxp0]: 100
WithPeak[fxp0]: w m y

Здесь WorkDir - каталог, где будут храниться html и рисунки, содержащие графики загрузки внешней сетевой карты.
AbsMax и MaxBytes - максимальные параметры, если получаемые нами цифры будут больше, то они не будут учитываться.
Параметр Target является для нас наиболее важным, т.к. именно это есть источник данных о целевом объекте. Сюда мыпросто впишем полный путь нашего скрипта, получающего данные.
XSize/YSize - количество пикселов в картинке по горизонтали/вертикали.
WithPeak - изображение пиков в графике (week, month, year)

Далее запускаем indexmaker :

indexmaker /usr/local/etc/mrtg/mrtg.cfg > /usr/local/www/data/mrtg/index.html

для создания html-странички.

Также поместим вызов mrtg под управление cron :

0-59/5 * * * * /usr/local/bin/mrtg /usr/local/etc/mrtg/mrtg.cfg - logging /usr/local/www/data/mrtg/fxp0.log

Перезапустим cron :

killall -HUP cron

Не нужно перестартовывать cron. Достаточно всего лишь править /etc/crontab. - ig 07/05/2007 12:13

Остался последний штрих:

apachectl start

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

http://wiki.bsdportal.ru/doc:mrtg3

Обновлено: 12.03.2015