Sunday, November 18th, 2018

Подсчёт трафика в Linux с помощью pmacctd

Published on Март 30, 2009 by   ·   Комментариев нет

Учётная система работает на основе утилиты pmacctd. Утилита записывает весь, проходящий через интерфес трафик и скидывает в лог-файл. После этого скрипты сортируют получившийся дамп по адресам клиентов, разделяет по дням недели и месяцам, а так же создают бекап дампа. Адреса клиентов система берёт из основного конфига прокси-сервера. Скрипт запуска, останова и считывания адресов клиентов системы учета находится в /etc/inti.d/ Отрабатывает с параметром start при старте системы и параметром stop, при останове. nike air max command После добавления нового пользователя, надо делать /etc/ini.d/pmacct restart

 #!/bin/sh # ## Глобальные переменные ### Пути к утилитам, по которым скрипт может обращаться. Не обязательная переменная, но для подстраховки не помешает.  <a href="http://www.shayna-zen.fr/asics-duomax.html">asics duomax</a> PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin ### Расположение собственно исполняемого файла утилиты pmacctd DAEMON=/usr/sbin/pmacctd ### Имя работающего демона NAME=pmacctd ### Описание. DESC="traffic accounting system" ### Директория для хранения настроек учётной системы. CONFDIR=/etc/pmacct ### Директория для хранения логов. LOGDIR=/var/log/pmacctd ### Инклудим конфиг. . $CONFDIR/pmacctd.conf ### Проверяем наличие исполняемого файла демона. Если отсутствует, завершаем работу. test -x $DAEMON || exit 0 ### Функция останова. stop () { killall -INT $NAME } ### Функция старта. start () { #### Вытягиваем из конфига прокси-сервера имена и ip-адреса пользователей и сохраняем из в файл stat.conf в директории конфигов. grep 255.255.255.255 /etc/squid/squid.conf | grep -v 127.0.0.1 | grep -v '#' | awk '{print $2, $4}' | cut -f 1 -d / > $CONFDIR/stat.conf #### Собственно запускаем демона в фоновом режиме и складываем всю статистику по трафику в файл pmacctd.log в лог-директории. $DAEMON -c $PRIMITIVE -i $INTERFACE -r $INTERVAL -P print >> $LOGDIR/pmacctd.log & } ### Меню выбора используемой функции из первого аргумента после скрипта.  <a href="http://www.decoachin.fr/baskets-adidas-zx-750.html">baskets adidas zx 750</a> case "$1" in start) echo -n "Starting $DESC: " start echo "$NAME." ;; stop) echo -n "Stopping $DESC: " stop echo "$NAME." ;; restart) echo -n "Restarting $DESC: " stop sleep 1 start echo "$NAME." ;; *) N=/etc/init.d/$NAME echo "Usage: $N {start|stop|restart}" >&2 exit 1 ;; esac exit 0

Скрипт скидывания ежедневной статистики Запуск скрипта прописан в файле /etc/crontab:

 01 4 * * * root /usr/sbin/pmacctdaily

Он отрабатывает автоматически каждый день в 04:01:00 по времени сервера.

 #!/bin/bash # ## Конфигурационная директория CONFDIR=/etc/pmacct ## Лог-директория LOGDIR=/var/log/pmacctd ## Текущая дата в формате ддммгггг DATE=`date +%d%m%Y` ## Вычисление пользовательских ip-адреса. USERSIP=`cat $CONFDIR/stat.conf | awk '{print $2}'` ## Останов учётной системы для того, чтобы она не обращалась к логам во время работы с ними данного скрипта. /etc/init.d/pmacct stop >/dev/null ## Создание директории для трафика за сутки до текущей даты mkdir $LOGDIR/$DATE 2>/dev/null ## Пока в памяти лежат пользовательские ip-адреса, обработать каждый из них по-очереди. for i in $USERSIP do #### Вычисляем количество бит в каждой следующей записи из лога, в которой упоминается текущий ip-адрес BYTES=`grep -w $i $LOGDIR/pmacctd.log | awk '{print $16}'` ALLBYTES=0 ##### Прибавляем каждое новое вычисленное количество битов к переменной ALLBYTES for b in $BYTES do ALLBYTES=$((ALLBYTES+b)) done ##### Вычисляем имя пользователя с текущим ip-адресом USERNAME=`grep -w $i $CONFDIR/stat.conf | awk '{print $1}'` #### Скидываем в файл с именем текущего пользователя значение переменной ALLBYTES echo $ALLBYTES > $LOGDIR/$DATE/$USERNAME done ##### Архивируем общий лог и сохраняем его в директорию с файлами статистики пользователей за сутки. gzip $LOGDIR/pmacctd.log mv $LOGDIR/pmacctd.log.gz $LOGDIR/$DATE/ Запускаем учётную систему. /etc/init.d/pmacct start >/dev/null

В общей сложности при нынешней нагрузке скрипт отрабоатывает примерно за 10-15 секунд. ugg boots pas cher Чем больше будет пользователей и трафика, тем больше понадобится времени, но для того, чтобы дойти хотя бы до минуты выполнения, надо увеличить объёмы в несколько раз. Скрипт скидывания ежемесячной статистики Запуск скрипта прописан в файле /etc/crontab:

 01 5 1 * * root /usr/sbin/pmacctdmonthly

Он отрабатывает автоматически каждый первый день месяца в 05:01:00 по времени сервера.

 #!/bin/bash # ### Конфигурационная директория CONFDIR=/etc/pmacct ### Лог-директория LOGDIR=/var/log/pmacctd ### Текущий месяц в формате мм MONTH=`date +%m` ### Текущий год в формате гггг YEAR=`date +%Y` Временная директория TMPDIR=/tmp/pmacctd ## Так как скрипт выполняется первого числа, а нам надо сделать статистику за предыдущий месяц, делаем проверку, не первое ли сегодня января и присваиваем переменным месяца и года нужные нам значения. #### Отдельное примечание. Из-за того, что в bash по умолчанию числа, начинающиеся с 0, автоматически считаются числами восьмеричой системы счисления, #### приходится делать более сложную проверку, сравнивая значения месяцев, как строки, и только потом присваивать им какие-либо значения.  <a href="http://www.calliocom.fr/">nike air max 90 femme</a> if [[ $MONTH == 01 ]] then LASTMONTH=12 LASTYEAR=$((YEAR-1)) else if [[ $MONTH == 10 || $MONTH == 11 || $MONTH == 12 ]] then LASTMONTH=$((MONTH-1)) LASTYEAR=$YEAR else MONTH=${MONTH:1} LASTMONTH=$((MONTH-1)) LASTMONTH=0$LASTMONTH LASTYEAR=$YEAR fi fi ## Так как номера некоторых части месяцев выглядят как 01,02,..09, а части 10,11,12, надо это учитывать при расчётах. ## Для этого идёт нижеследующая проверка. if [[ "$LASTMONTH" -lt 10 ]] then LASTMONTH=0$LASTMONTH fi ## Создаём директорию вида ммгггг для хранения статистики за месяц. mkdir $LOGDIR/$LASTMONTH$LASTYEAR ## Считываем все директории с файлам посуточной статистики за прошедший месяц. DIR=`ls $LOGDIR | grep $LASTMONTH$LASTYEAR` for i in $DIR do #### Поочереди, в каждой из этих директорий находим файлы по именам пользователей USERNAME=`ls $LOGDIR/$i/` for n in $USERNAME do ###### Во временной директории создаём файл с несуммированной статистикой на каждого пользователя. BYTES=`cat $LOGDIR/$i/$n` echo $BYTES >> $TMPDIR/$n done done #### Суммируем статистику из временной директории на каждого пользователся, #### Складываем её в вышесозданную директорию и #### удаляем временные файлы. for nn in $USERNAME do ALLBYTES=0 BYTES=`cat $TMPDIR/$nn` for b in $BYTES do ALLBYTES=$((ALLBYTES+b)) echo $ALLBYTES > $LOGDIR/$LASTMONTH$LASTYEAR/$nn done rm -rf $TMPDIR/$nn done

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


Смотрите также:

Readers Comments (Комментариев нет)




Да человек я, человек! =)

Exchange 2007

Проведение мониторинга Exchange 2007 с помощью диспетчера System Center Operations Manager 2007 (часть 3)

Если вы хотите прочитать предыдущие части этой серии статей, перейдите по ссылкам: Проведение мониторинга Exchange 2007 с помощью диспетчера System ... [+]

Практическое рассмотрение перехода с Exchange 2003 на Exchange 2007 (часть 1)

Введение В этой статье из нескольких частей я хочу показать вам процесс, который недавно использовал для перехода с существующей среды Exchange 2003 ... [+]

Использование инструмента Exchange Server Remote Connectivity Analyzer Tool (часть 2)

Если вы пропустили первую часть этой серии, пожалуйста, прочтите ее по ссылке Использование инструмента Exchange Server Remote Connectivity Analyzer Tool (Часть ... [+]

Мониторинг Exchange 2007 с помощью диспетчера System Center Operations Manager 2007 (часть 2)

Если вы пропустили предыдущую часть этой серии статей, перейдите по ссылке Мониторинг Exchange 2007 с помощью диспетчера System Center Operations ... [+]

Подробное рассмотрение подготовки Active Directory для Exchange 2007 (часть 5)

Если вы пропустили предыдущие части этой серии статей, перейдите по ссылкам: Подробное рассмотрение подготовки Active Directory для Exchange 2007 (часть 1) ... [+]

Установка и настройка Exchange 2007 из командной строки (Часть 3)

If you missed the previous parts in this article series please read: Exchange 2007 Install and Configuration from the command line (Part ... [+]

Использование инструмента Exchange Server Remote Connectivity Analyzer Tool (часть 1)

Инструмент ExRCA Текущий выпуск инструмента предоставляется только в целях тестирования и оснащен 5 опциями: Тест подключения Outlook 2007 Autodiscover Тест подключения Outlook 2003 RPC ... [+]

Развертывание сервера Exchange 2007 Edge Transport (часть 5)

Если вы хотите прочитать предыдущие части этой серии статей, перейдите по ссылкам: Развертывание сервера Exchange 2007 Edge Transport (часть 1) Развертывание ... [+]

Установка и настройка Exchange 2007 из командной строки (часть 2)

Если вы пропустили первую статью данного цикла, пожалуйста, перейдите по ссылке: Exchange 2007 Install and Configuration from the command line (Part ... [+]

Использование интегрированных сценариев Using Exchange Server 2007 – часть 2: генерирование отчетов агента Transport AntiSpam Agent

Если вы пропустили предыдущую часть этой серии статей, перейдите по ссылке Использование интегрированных сценариев Using Exchange Server 2007 – часть ... [+]