Мы — долго запрягаем, быстро ездим, и сильно тормозим.
www.lissyara.su —> статьи —> FreeBSD —> программы —> MRTG

MRTG

Автор: dysel.


Недавно назрела необходимость снимать статистику с ADSL модема. Изначально закралось подозрение, что копать нужно в сторону SNMP. Недолгие копания в мануале модема это подозрение подтвердили. Итак, задача:

1. Снимать статистику по загружености интерфейсов с модема;
2. Отображать ее в виде графиков;
3. Графики отоброжать на WEB страничке;

Вспомнил, что когда-то кто-то где-то рассказывал про то как делал аналогичное и использовал при этом MRTG. Ищем в портах:

# cd /usr/ports
# make search name="mrtg"

Port:   mrtg-2.13.2,1
Path:   /usr/ports/net-mgmt/mrtg
Info:   The multi-router traffic grapher
Maint:  demon@FreeBSD.org
B-deps: freetype2-2.1.10_3 gd-2.0.33_4,1 jpeg-6b_4 perl-5.8.8 pkgconfig-0.20
png-1.2.8_3
R-deps: freetype2-2.1.10_3 gd-2.0.33_4,1 jpeg-6b_4 p5-PathTools-3.16
p5-Pod-Parser-1.34 p5-SNMP_Session-1.08 p5-Scalar-List-Utils-1.18,1
perl-5.8.8 pkgconfig-0.20
png-1.2.8_3
WWW:    http://www.mrtg.org/

Находим и устанавливаем:

# cd /usr/ports/net-mgmt/mrtg
# make && make install && make clean

После установки отправляемся в /usr/local/etc/mrtg генерировать конфиг:

# cfgmaker public@192.168.0.250 > mrtg.cfg

192.168.0.250 это мой модем, а public community модема. Теперь осталось полученый конфиг немножко подправить.

# Created by
# /usr/local/bin/cfgmaker public@192.168.0.250

### Global Config Options

#  Путь к директории, в которую будем складывать странички статистики
WorkDir: /usr/local/www/data/mrtg

### Global Defaults

#  для отображения в битах и роста графиков справа
Options[_]: growright, bits

EnableIPv6: no

# Ниже я выкинул ненужные мне интерфейсы

Target[adsllan]: 1:public@192.168.0.250:
SetEnv[adsllan]: MRTG_INT_IP="192.168.0.250" MRTG_INT_DESCR="ETHERNET/0"
MaxBytes[adsllan]: 1250000
Title[adsllan]: Traffic Analysis for LAN on ADSL
PageTop[adsllan]: <h1>Traffic Analysis for LAN on ADSL</h1>

Target[adslwan]: 5:public@192.168.0.250:
SetEnv[adslwan]: MRTG_INT_IP="10.105.43.2" MRTG_INT_DESCR="ATM-VC/2"
MaxBytes[adslwan]: 132000
Title[adslwan]: Traffic Analysis for WAN on ADSL
PageTop[adslwan]: <h1>Traffic Analysis for WAN on ADSL</h1>

Теперь можно попробовать запустить MRTG с этим конфигом:

# mrtg mrtg.cfg

Первые два запуска MRTG поругается на отсутствие файлов в рабочей директории. Откуда бы им взятся? ;) Если все хорошо, то можно запускать MRTG демоном.

# echo 'mrtg_daemon_enable="YES"' >> /etc/rc.conf
# cd /rc.d
# ./mrtg_daemon start
# ps -ax | grep mrtg
59356  ??  Is     0:01.20 /usr/local/bin/perl -w /usr/local/bin/mrtg --pid-file

Теперь бы еще индексный файл положить в директорию web. Этим и займемся:

# cd ..
# indexmaker mrtg.conf > index.html
# cp index.html /usr/local/www/data/mrtg

Все, заходим, любуемся графиками.

ЗЫ. Не забывайте дать права на запись MRTG в рабочую директорию.



размещено: 2006-11-23,
последнее обновление: 2007-03-18,
автор: dysel


vanvan, 2006-11-27 в 9:33:06

Довесок к MRTG
Просто контроль за каждым тазиком(компьютером) в фирме


#cat /etc/rc.firewall
f="/sbin/ipfw add"
fcom="/sbin/ipfw"
...
#Счетчики
#---count 100 ------------------------
for p in 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 40 51 54 55 100
do
$f 100 count ip from any to 220.111.111.$p via xl0 out
$f 100 count ip from 220.111.111.$p to any via xl0 in
done
#-----------------------------------
#
#
# cat /usr/local/etc/mrtg/mrtg.cfg
....
....
#*************************************************************
Target[127.0.0.1_55]: `/bin/cat /usr/MRTG/220.111.111.55.mrtg`
SetEnv[127.0.0.1_55]: MRTG_INT_IP="220.111.111.55" MRTG_INT_DESCR="xl1"
MaxBytes[127.0.0.1_55]: 1000000
XZoom[127.0.0.1_55]: 2.0
YZoom[127.0.0.1_55]: 2.0
Options[127.0.0.1_55]: growright,bits
Title[127.0.0.1_55]: Traffic Analysis for Internet traffic
PageTop[127.0.0.1_55]: <H1>Traffic Analysis for Internet traffic</H1>
<TABLE>
  <TR><TD>ifName:</TD>     <TD>Pupkin</TD></TR>
  <TR><TD>Max Speed:</TD>  <TD>1.0 MBytes/s</TD></TR>
</TABLE>
#*************************************************************

А файл /usr/MRTG/220.111.111.55.mrtg`
каждые 5 минут обновляет cron
типа
#!/bin/sh
cd /usr/MRTG
f=/sbin/ipfw
dt=`date +"%H-%M %d-%m-%Y"`
MASK=220.111.111.
AWK=/usr/bin/awk
#---------------------------------------------------
$f show 100 > ipfw.tmp
#---------------------------------------------------
for ip in 21 23 24 28 29 34 35 40 51 54 55
do
cat ipfw.tmp | grep $MASK$ip | $AWK '{print $3 }' >$MASK$ip.mrtg
echo $dt >>$MASK$ip.mrtg
echo $MASK$ip >>$MASK$ip.mrtg
ip=`expr $ip + 1`
done
#---------------------------------------------------
$f zero 100




Kacnep, 2006-11-27 в 13:17:42

Харошый скрЫпт ) но если к grep доваить -w то например в файл 220.111.111.1.mrtg не будет попадать каунты от следующих IP

220.111.111.10
220.111.111.11
220.111.111.12
....
220.111.111.100
итд.

ЗЫ.

cat ipfw.tmp | grep $MASK$ip | $AWK '{print $3 }' >$MASK$ip.mrtg

cat ipfw.tmp | grep -w $MASK$ip | $AWK '{print $3 }' >$MASK$ip.mrtg

drewhka, 2007-01-11 в 21:14:10

Вместо
# indexmake mrtg.conf > index.html
должно быть
# indexmaker mrtg.conf > index.html

KrivoSoft, 2007-07-13 в 16:53:34

>ЗЫ. Не забывайте дать права на запись MRTG в рабочую директорию.
Также после запуска # mrtg mrtg.cfg и перед запуском MRTG демоном
не лишним будет сделать chown mrtg:mrtg для всех файлов с которыми работает MRTG (в каталоге на который указывает параметр WorkDir:)

Al, 2007-10-18 в 13:07:25

Для сннятия статистики с freebsd-машины,необходимо установить пакет,который будет эту статистику предоставлять,а mrtg обрабатывать

Ставим net-snmp
добавляем в /etc/rc.conf

snmpd_enable="YES"
snmptrapd_enable="YES"
snmptrapd_flags="-a -p /var/run/snmptrapd.pid"

для настройки есть интерактивный режим:
snmpconf -i

Выбираем snmp.conf, затем
System Information Setup
Там 3 опции:
1.The [typically physical] location of the system
– географическое положение

2.The contact information for the administrator
– ваш майл

3.The proper value for the sysServices object
– там 3 вопроса (1-да, 0-нет). Спрашивает,какие сервисы вашей машиной предоставляются
Далее finished

Выбираем Access Control Setup. выбираем SNMPv1/SNMPv2c read-only access community name.Там спросят комюнити (это типа пароля). Потом указываем,откуда можно конектиться-lcalhost,напр.далее- Enter .)
вводим finished.

Выбираем Agent Operating Mode,затем The IP address and port number that the agent will listen on.указываем адрес и порт,на кот. будет отдавать данные

Выходим.
Далее создадуться конфиги
Запускаем
/usr/local/etc/rc.d/snmpd start

Проверяем
sockstat -4 | grep snmp

Получаем:
root     snmpd      11699 8  tcp4   *:199                *:*
root     snmpd      11699 9  udp4   127.0.0.1:161        *:*
Все

Al, 2007-10-18 в 13:30:02

Не забываем добавлять в крон
/usr/local/bin/mrtg /usr/local/etc/mrtg/mrtg.cfg > /dev/null
на ежеминутное выполнение(или как нравится).Так мы снимаем статистику с устройства

Pavel, 2007-10-18 в 13:42:52

На сколько мне не изменяет память у мртг время обновления графика не может быть меньше 300 секунд. Так что не смысла от того что по крону он будет обновляться каждую минуту нет. Может я ошибаюсь.

PS Вроде был патч какойто который снимал это ограничение.

Daemony, 2007-11-01 в 20:14:37

Касательно последнего поста (перед моим).
Согласен с комментатором.
Насчет патча. Кто о нем что-то слышал?
Или я пошел гуглить... ;)

Pavel, 2007-11-02 в 9:51:54

Видел информацию на какомто форуме очень давно. Но сам так и не нашел патч.

Buttler, 2007-11-13 в 9:39:19

Патч? Если запись логов производится в RRD-базу, тогда дискретность можно уменьшить до минуты. Да и снижается потребление ресурсов по сравнению с использованием штатных средств mrtg.

Но задача усложняется ввиду изучения rrdtool, в частности, rrdgraph(1), т.к. отрисовку графиков нужно будет делать самому (достойных скриптов не нашел - сделал cам). Но оно того стоит =)  

vanvan, 2007-12-24 в 18:56:07

Кому лень писать пальчиками скрипт для пополнения
/usr/locla/etc/mrtg/mrtg.conf
для счетчиков

#!/bin/sh
AWK=/usr/bin/awk
MASK=192.168.248.
ip=1
while ( [ $ip -lt 255 ])
do
namehost=`cat /etc/hosts | grep -w $MASK$ip | $AWK '{print $2}'`
echo "#*************************************************************" >>mrgg_config.tmp
echo "Target[127.0.0.1_$ip]: \`/bin/cat /usr/MRTG/$MASK$ip.mrtg\`" >>mrgg_config.tmp
echo "SetEnv[127.0.0.1_$ip]: MRTG_INT_IP=$ip1 MRTG_INT_DESCR=\"xl0\"" >>mrgg_config.tmp
echo "MaxBytes[127.0.0.1_$ip]: 1000000" >>mrgg_config.tmp
echo "XZoom[127.0.0.1_$ip]: 2.0" >>mrgg_config.tmp
echo "YZoom[127.0.0.1_$ip]: 2.0" >>mrgg_config.tmp
echo "Options[127.0.0.1_$ip]: growright,bits" >>mrgg_config.tmp
echo "Title[127.0.0.1_$ip]: Traffic Analysis for Internet traffic" >>mrgg_config.tmp
echo "PageTop[127.0.0.1_$ip]: <H1>Traffic Analysis for Internet traffic</H1>" >>mrgg_config.tmp
echo " <TABLE>" >>mrgg_config.tmp
echo "   <TR><TD>ifName:</TD>     <TD>$namehost</TD></TR>" >>mrgg_config.tmp
echo "   <TR><TD>Max Speed:</TD>  <TD>1.0 MBytes/s</TD></TR>" >>mrgg_config.tmp
echo " </TABLE>" >>mrgg_config.tmp
ip=$(expr $ip + 1)
done



sasha, 2008-03-27 в 12:13:23



ERROR: CFG Error in "setenv[127.0.0.1_1]", line 51: MRTG_INT_IP= MRTG_INT_DESCR="rl0" must be XY="dddd" AASD="kjlkj" ...

Sasha, 2008-03-27 в 12:18:09

echo "SetEnv[127.0.0.1_$ip]: MRTG_INT_IP=$MASK$ip MRTG_INT_DESCR=\"rl0\"" >>mrgg_config.tmp

sasha, 2008-03-27 в 13:42:30

SNMP Error:
no response received
SNMPv1_Session (remote host: "localhost" [127.0.0.1].161)
                 community: "public"
                request ID: 553211476

sasha, 2008-03-27 в 13:42:58

root     bsnmpd     942   3  udp4   127.0.0.1:58342       127.0.0.1:162
root     bsnmpd     942   5  udp4   *:*                   *:*

писечка, 2008-05-16 в 17:04:34

1Товарищщи! 2Это поля для ввода комментариев к статье, а не для вопросов. 4Сюда пишите найденные баги, или какие-то фичи :)
Для вопросов есть форум!

Анонимус, 2008-08-26 в 9:47:28

Товaрищщи! Это поля для ввода комментариев к статье, а не для вопросов. Сюда пишите найденные баги, или какие-то фичи :)
Для вопросов eсть форум!

Анонимус, 2008-08-26 в 9:49:46

Тoварищщи! Это поля для ввода комментариев к статье, а не для вопросов. Сюда пишите найденные баги, или какие-то фичи :)
Для вопросов есть форум!

KrivoSoft, 2009-02-07 в 16:53:20

После обновления perl до 5.8.9 перестал стартовать MRTG с руганью на "Can't locate MRTG_lib.pm in @INC".
Пресобирать MRTG было лениво, попробовал методом тыка посдунуть старые файлы туды, где оно их ожидало:
cp /usr/local/lib/perl5/site_perl/5.8.8/*.pm /usr/local/lib/perl5/site_perl/5.8.9/

Вроде помогло и работает.

Baneff, 2009-02-07 в 18:10:53

2: KrivoSoft
man perl-after-upgrade

KrivoSoft, 2009-02-08 в 22:19:39

Спасибо, познавательно!

InventoR, 2009-12-17 в 0:54:04

Can't locate SNMP_util.pm in @INC (@INC contains: /usr/local/bin/../lib/mrtg2 /usr/local/bin /usr/local/lib/perl5/5.8.9/BSDPAN /usr/local/lib/perl5/site_perl/5.8.9/mach /usr/local/lib/perl5/site_perl/5.8.9 /usr/local/lib/perl5/5.8.9/mach /usr/local/lib/perl5/5.8.9 .) at /usr/local/bin/mrtg line 292.

cd /usr/ports/net-mgmt/p5-SNMP_Session && make install clean

Неоригинально, 2010-02-06 в 17:51:12

Неоригинально. И заколебали уже :)

arh665, 2011-05-12 в 1:03:01

и все бы хорошо, но никак не могу заставить скриптом shell перечитать конфиги по крону, с интервалом каждая минута. Если исполнять прямо в консоли например sh cкриптом:
cd /usr/local/bin/cfgmaker
mrtg mrtg.cfg

график обновляется, это если руками, а если через крон не хочет и все, хоть ты тресни. так же пробовал приписывать крону сразу набор команд, вместо скрипта типа cd /usr/local/bin/cfgmaker && mrtg mrtg.cfg, все равно не хочет обновлять статистику. Что подскажете?



 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.0838 секунд
Из них PHP: 14%; SQL: 86%; Число SQL-запросов: 86 шт.
У Вас отключено GZIP-сжатие в браузере. Размер страницы 38981