Установка и использование MRTG в Gentoo Linux

()

Очень часто встаёт необходимость отслеживать трафик через определённый сетевой интерфейс. На большинстве платформ для этого удобно использовать монитор 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. Сначала нам нужно написать скрипт, который будет возвращать на стандартный вывод четыре значения:

  1. Входящий трафик на интерфейсе (в байтах).
  2. Исходящий трафик на интерфейсе (в байтах).
  3. Временная метка (в формате UNIX).
  4. Название скрипта (Произвольная текстовая метка).

Например если нам нужно собирать статистику на интерфейсе 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.

Эта статья не является истиной в последней инстанции, она всего лишь обобщает опыт автора статьи.

Источники: [1] [2] [3]

Ключевые слова: mrtg, gentoo, apache.

Комментарии:

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`

MooSE 2006-11-03 23:30:22 (#)

Killy: Я об этом думал. Но почему-то сделал именно так, как и написал в статье. Хотя бы потому что сначала мониторил только внешний интерфейс.

skid 2006-11-05 05:39:38 (#)

мне показалось или упущена стадия создания крона...
а еще как на счет минутных инетрвалов?

skid 2006-11-05 05:47:59 (#)

Небольшие добавления
####################################
# Load Averages
####################################
Target[prload]: `perl -e '$f="%.1d";$fmt="$f\n$f\n1\nNumber of processes and 5-min load\n";@v=split(/\s\s+/,qx(sar -q | grep -B 1 Average));$v[4]=$v[4]*100;$o=sprintf $fmt,$v[2],$v[4];print $o; print STDERR $o;'`
Options[prload]: gauge, transparent, nopercent
MaxBytes[prload]: 360
ShortLegend[prload]: units
Legend1[prload]: processes - average in 5 minutes
Legend2[prload]: load - 5-min average load*100
LegendI[prload]: &nbsp;processes:
LegendO[prload]: &nbsp;load*100:
Unscaled[prload]: d
Title[prload]: Server processes and load
PageTop[prload]: <H2>Server processes and load

####################################
# Memory
####################################
http://articles.techrepublic.com.com/5100-1035_11-6130300.html

MooSE 2006-11-05 11:58:22 (#)

skid: В Gentoo есть демон, который не требует каких либо записей в crontab.

skid 2006-11-06 05:06:20 (#)

теперь понятно..
генту рулит как всегда %)

vozd 2006-11-06 10:43:58 (#)

Протокол SNMP неплохо справляется с этим тоже.
Новый комментарий



© 2006-2016 Вадим Калинников aka MooSE