Очень часто встаёт необходимость отслеживать трафик через определённый сетевой интерфейс. На большинстве платформ для этого удобно использовать монитор MRTG (Multi Router Traffic Grapher).
В этой статье будут рассмотрена установка и настройка MRTG в дистрибутиве Gentoo Linux. Так же будут даны некоторые начальные сведения, которыми можно воспользоваться и на других системах.
Для начала установим MRTG, так же нам может оказаться весьма полезным какой-либо web-сервер (если мы захотим смотреть статистику удалённо, то лучше всего это делать по http). Я выбрал для себя Apache. Поэтому команда установки выглядит у меня так:
# emerge net-analyzer/mrtg net-www/apache
Сразу же полезно создать виртуальный хост, который будет использоваться для просмотра статистики. Для этого сначала создаём папку для документов этого хоста:
# mkdir -p /var/www/stat/htdocs
А затем файл этого хоста - /etc/apache2/vhosts.d/01_stat_vhost.conf следующего содержания:
<VirtualHost stat:80> DocumentRoot /var/www/stat/htdocs ServerName stat </VirtualHost>
После этого можно запустить apache:
# rc-update add apache2 default # /etc/init.d/apache2 start
Далее переходим к настройке MRTG. Сначала нам нужно написать скрипт, который будет возвращать на стандартный вывод четыре значения:
- Входящий трафик на интерфейсе (в байтах).
- Исходящий трафик на интерфейсе (в байтах).
- Временная метка (в формате UNIX).
- Название скрипта (Произвольная текстовая метка).
Например если нам нужно собирать статистику на интерфейсе eth0 скрипт может выглядеть так:
#!/bin/bash INPUT=`ifconfig eth0| grep bytes | awk {'print $2'}| sed "s/bytes://"` OUTPUT=`ifconfig eth0| grep bytes | awk {'print $6'}| sed "s/bytes://"` DATE=`date +%s` NAME='eth0' echo $INPUT echo $OUTPUT echo $DATE echo $NAME
Здесь значения входящего и исходящего трафика получаются из вывода команды ifconfig eth0 а временная метка из вывода команды date +%s.
Очевидно что для интерфейса eth1 нужно просто везде заменить eth0 на eth1.
Теперь сохраняем скрипт например как /root/scripts/mrtgstat.eth0 и приступаем к написанию файла конфигурации /etc/mrtg.conf.
Файл конфигурации MRTG условно можно разбить на секции. Для каждого монитора - своя секция. При генерации отчёта MRTG создаёт набор файлов вида <имя секции>.html. Если у нас всего один интерфейс то удобнее всего назвать секцию index. Тогда файл конфигурации будет выглядеть вот так:
WorkDir:/var/www/stat/htdocs Refresh:300 RunAsDaemon: yes Interval: 5 NoMib2: yes Language:russian Target[index]: `/root/scripts/mrtgstat.eth0` MaxBytes[index]: 10000000000 XSize[index]: 600 YSize[index]: 160 Title[index]: Internet PageTop[index]: <h1>Internet</h1>
Параметр Workdir задаёт папку, в которой будет генерироваться отчёт. Refresh - частота обновления статистики в секундах. XSize и YSize - размеры картинок графиков в отчёте.
После написания файла конфигурации можно запустить MRTG:
# rc-update add mrtg default # /etc/init.d/mrtg start
Если же нам нужно отслеживать трафик на наскольких интерфейсах то всё будет не намного сложнее. Например нам нужно отслеживать два интерфейса - eth0 и eth1. Тогда создаём два почти одинаковых скрипта: /root/scripts/mrtgstat.eth0 и /root/scripts/mrtgstat.eth1. Второй отличается от первого только тем, что все вхождения eth0 заменены на eth1.
Следующим шагом пишем файл конфигурации. У меня в такой ситуации он выглядит вот так:
WorkDir:/var/www/stat/htdocs Refresh:300 RunAsDaemon: yes Interval: 5 NoMib2: yes Language:russian Target[eth0]: `/root/scripts/mrtgstat.eth0` MaxBytes[eth0]: 10000000000 XSize[eth0]: 600 YSize[eth0]: 160 Title[eth0]: Internet PageTop[eth0]: <h1>Internet</h1> Target[eth1]: `/root/scripts/mrtgstat.eth1` MaxBytes[eth1]: 10000000000 XSize[eth1]: 600 YSize[eth1]: 160 Title[eth1]: LAN PageTop[eth1]: <h1>LAN</h1>
При такой конфигурации мы получим два файла - /var/www/stat/htdocs/eth0.html и /var/www/stat/htdocs/eth1.html. Индексный файл мы можем создать сами, однако вместе с MRTG идёт замечательная утилита indexmaker, которая может сделать это лучше нас:
# cd /var/www/stat/htdocs # indexmaker --title="Network usage" --columns=1 --output=index.html /etc/mrtg.conf
На этом базовая настройка MRTG закончена. Напоследок хочется только сказать что на мониторинге сетевых интерфесов возможности MRTG не заканчиваются. Данные вы можете брать из самых разных мест. Например в документации идущей вместе с пакетом есть пример как отслеживать трафик, идущий через прокси-сервер squid.
Эта статья не является истиной в последней инстанции, она всего лишь обобщает опыт автора статьи.
Killy 2006-11-03 22:48:33 (#)
#!/bin/bash
NAME="eth$1"
INPUT=`ifconfig $NAME| grep bytes | awk {'print $2'}| sed "s/bytes://"`
OUTPUT=`ifconfig $NAME| grep bytes | awk {'print $6'}| sed "s/bytes://"`
DATE=`date +%s`
echo $INPUT
echo $OUTPUT
echo $DATE
echo $NAME
соответственно:
Target[eth0]: `/root/scripts/mrtgstat 0`