Автор Тема: Настройка связки 3proxy + free-sa  (Прочитано 85396 раз)

Оффлайн sb

  • Модератор глобальный
  • *****
  • Сообщений: 8 991
Что хотим получить:
1) Настроенный прокси-сервер
2) Статистика (работающая в фоновом режиме, чтобы не приходилось запускать вручную анализатор логов) по потреблённому трафику
3) Просмотр статистики и лог файлов автоматики (настройка веб-сервера, можно использовать любой, я же решил попробовать lighttpd)

Поскольку кэширование трафика в современных условиях мало кому нужно, то в качестве прокси-сервера задействуем 3proxy, который кэшированием трафика не занимается. Для реализации же второго пункта хорошо подойдёт генератор отчётов free-sa, его то мы и задействуем для анализа лог файлов в фоновом режиме, периодичность запуска которого будет задаваться посредством планировщика (в нашем случае это будет cron).

Настройка 3proxy

Внимание:
Если вы настроите 3proxy несколько иначе, чем здесь описано или воспользуетесь штатной установкой пакета из бранча, то, в общем-то, ничего страшного. Просто мне так было удобнее (не знаю, как вам). Самое важное здесь, что надо понять, это директивы конфигурационного файла, связанные с форматом лог-файла и параметром подавления вывода служебной информации в лог файлы, который указывается в строчке запуска прокси-сервера.


Установку и настройку будем рассматривать применительно к 7 платформе. Сразу необходимо сделать оговорку, что со штатным 3proxy из репозитория есть проблема (он не работоспособен как демон), поэтому мы пойдём другим путём: возьмём 3proxy, который не содержит патчей для запуска под непривилегированным пользователем, т.е. "ванильный" (я собрал апстримный 3proxy версии 0.7, который не так давно вышел), возможно для поставленной задачи подойдут версии из старых бранчей (но тут надо разбираться, чего у них там в инитскрипте наворочено и какие патчи наложены) или можно собрать локально. Сам прокси в этом случае вручную устанавливается по пути /usr/local/3proxy (достаточно просто извлечь бинарник, библиотеки, они же плагины, всё, кроме мануалов, в /usr/local/3proxy с сохранением структуры директорий пакета).

Приложения для "другого пути":
  • init файл для запуска, останова и перезапуска прокси (желающие могут дописать скрипт для других вариантов)
#!/bin/sh

DAEMON=/usr/local/3proxy/3proxy
OPTS=/usr/local/3proxy/3proxy.cfg
NAME=3proxy
delay=20

test -f $DAEMON || exit 0
set -e

case "$1" in
 start)
   echo -n "Starting $NAME: "
   $DAEMON $OPTS &
   echo "done."
   ;;
 stop)
   echo -n "Stopping $NAME: "
   killall -u _3proxy &>/dev/null
   while [ $delay -gt 0] && [[ `ps -C $NAME | wc -l` > 1]]; do
   sleep .5
   delay=$(($delay - 1))
   done
   rm -f /usr/local/3proxy/3proxy.pid
   echo "done."
   ;;
 restart)
   stop
   start
   ;;
 *)
    echo "Usage: /etc/rc.d/init.d/3proxy {start|stop|restart}" >&2
    exit 1
    ;;
esac
exit 0
  • Пример файла (шаблон) конфигурации для 3proxy, помещаемый в директорию /usr/local/3proxy вместе с бинарником (обратите внимание на положение директивы "daemon" в конфиге, любое её смещение относительно существующей позиции приведёт к неработоспособности прокси сервера, это было выяснено экспериментальным путём и об этом в официальной документации, к сожалению, нет ни слова, потому и пришлось экспериментировать)
pidfile /usr/local/3proxy/3proxy.pid
log /usr/local/3proxy/log/3proxy.log D

nserver 192.168.4.1
nscache 65536
external 192.168.4.210

daemon

logformat "- +_G%t.%. 1 %C TCP_MISS/200 %I %1-1T %2-2T %U DIRECT/%R application/unknown"
rotate 30

users Administrator:CL:password
counter "/usr/local/3proxy/counter/3proxy.3cf" D "/usr/local/3proxy/traf/traf"

#здесь задаются лимиты трафика через countin

flush
auth iponly

deny * * $"/usr/local/3proxy/bad_url.txt"
allow * $"/usr/local/3proxy/06:00:00-21:00:00.txt" * * * 1-7 06:00:00-21:00:00
allow * $"/usr/local/3proxy/00:00:00-23:59:59.txt" * * * 1-7 00:00:00-23:59:59

proxy -n -p80 -i172.16.0.5

#здесь задаётся административный доступ, доступ к статистике, а также различные перенаправления портов

monitor "/usr/local/3proxy/06:00:00-21:00:00.txt"
monitor "/usr/local/3proxy/00:00:00-23:59:59.txt"
monitor "/usr/local/3proxy/bad_url.txt"
monitor "/usr/local/3proxy/3proxy.cfg"

setuid 488
Необходимые пояснения по файлу конфигурации прокси-сервера:
  • Наличие директивы "nscache 65536" в файле конфигурации обязательно (в windows это необязательно, т.е., разница в функционале этой директивы на разных программных платформах существенно отличается);
  • Формат журнала мы задаём совместимый с журналом, который ведёт кэширующий прокси-сервер squid (именно под формат логов этого прокси-сервера разработывался free-sa);
  • Файл /usr/local/3proxy/bad_url.txt содержит запрещённые для посещения пользователями ресурсы (это могут быть как доменные имена, так и подсети\одиночные ip адреса, перечисляемые в файле через запятую и без пробелов; доменные имена, как правило, записываются в виде *update.opera.com*, а подсети в привычном виде, например, 192.168.0.0/16);
  • Файл /usr/local/3proxy/06:00:00-21:00:00.txt, как можно догадаться по названию, содержит список ip адресов через запятую и без пробелов, которым разрешён выход в интернет в заданное в имени файла время, по второму файлу в конфигурационном файле аналогично, только время другое;
  • Директива "proxy -n -p80 -i172.16.0.5" определяет запуск прокси, "висящем" на ip адресе 172.16.0.5 и слушающем 80 порт, при этом параметр -n подавляет запись в лог различных служебных сообщений, что весьма важно для нормальной работы анализатора free-sa;
  • Не всегда добавление в отслеживаемые по изменению файлы (которые указаны в секции monitor) новых данных сопровождается корректным обновлением состояния прокси-сервера и иной раз приходилось его останавливать/стартовать. Если эти данные прописаны в основном файле конфигурации, то проблем, насколько могу помнить, было много меньше;
  • Директива "setuid 488" (где 488 это id пользователя _3proxy, которого можно создать вручную и под которым запускается прокси сервер, но можно использовать и другого пользователя) позволяет запустить демон 3proxy под непривилегированным пользователем.

Настройка free-sa

Устанавливаем free-sa из репозитория (либо собираем себе локально, я так и сделал, решив попробовать свежую на момент установки версию, если мне не изменяет память, то это версия 2.0.6b6, вполне работоспособная кстати).
Теперь надо задаться вопросом, а каким образом можно получить автоматический анализ лог файлов, если сам анализатор принимает в качестве аргумента командной строки диапазон дат, требуемый для анализа, а файл лога в качестве аргумента подразумевает один единственный файл. Тем не менее, free-sa (со слов разработчика) поддерживает и режим анализа нескольких файлов:
Цитировать
FIFO - это работа Free-SA с несколькими файлами без их объединения, а иногда и без распаковки из архива gz или bz2. Посмотрите FAQ файл, там есть пример работы с FIFO через команду mkfifo.

Мой же вариант ответа на поставленный вопрос таков: требуется несколько скриптов, каждый из которых будет решать определённую задачу. Один из них будет производить анализ файла лога только за текущий день (параметр "-d today" для запуска free-sa), а второй — только за текущий месяц (параметр "-d thismonth"), а частота запуска каждого (т.е. частота обновления данных в отчётах) будет определяться потребностями и будет указываться в планировщике. Возможно, что вариант, описанный разработчиком для обработки нескольких файлов, был бы быстрее или ещё в каких-то аспектах лучше. Здесь было бы уместно привести немного статистики, например, суммарный лог файл (за февраль месяц, учитываются только те файлы, размер которых больше нуля) размером порядка 40 мегабайт анализатор обрабатывает примерно за 25 секунд, а все подготовительные процедуры (вычисление и склейка файлов в один) занимают по времени порядка 5-7 секунд (на машине класса celeron 950/via694x, MSI MS-6309).

Таким образом, применив оба скрипта вместе мы получаем текущую статистику (за текущий день) и суммарную статистику за каждый месяц. Когда задача поставлена, то дело остаётся за малым: собственно "изготовить" эти скрипты. Поскольку эту задачу в рамках своих запросов на баше я уже решил, то представляю свой вариант скриптов для решения задачи по обработке логов:

free-sa-3proxy-today.sh:
#!/bin/sh
export LANG=ru_RU.UTF-8
export LC_ALL=
p=3proxy
f=free-sa
D=.`date +%Y`.`date +%m`.`date +%d`
N=$p.log$D
DD=/var/log/$p/
lf=/opt/$f-$p/logs/$f-today.log
/opt/$f-$p/$p-log-prepare-today.sh
case "$?" in
0 ) /usr/bin/$f -d today -f /etc/$f/$f-$p-day.conf -l $DD$N && echo $'\n'`date +%c`"  --  Файл лога успешно обработан анализатором." >> $lf && /opt/$f-$p/$f-fix-html-index.sh;;
1 ) echo `date +%c`" -- Исходный файл лога не найден." >> $lf;;
2 ) echo `date +%c`" -- Размер файла лога равен нулю." >> $lf;;
3 ) echo `date +%c`" -- Размер файла лога не изменился относительно предыдущей проверки, запуск анализатора пропускаем." >> $lf;;
esac
3proxy-log-prepare-today.sh:
#!/bin/sh
p=3proxy
D=.`date +%Y`.`date +%m`.`date +%d`
N=$p.log$D
Ns=log.size$D
SD=/usr/local/$p/log/
DD=/var/log/$p/
lf=/opt/free-sa-$p/logs/free-sa-today.log
cp /dev/null $lf
if ! [ -e $SD$N ]; then exit 1; fi
if ! [ -s $SD$N ]; then exit 2; fi
if [ -s $DD$Ns ] && [[ `cat $DD$Ns | sed '/^ *$/d'` == `du -a -b $SD$N | cut -f1` ]]; then exit 3; fi
if [ -e $DD$N ]; then rm -f $DD$N; fi
cp $SD$N $DD
echo `du -a -b $SD$N | cut -f1` > $DD$Ns
sed -i '/bind()/d;/Accepting connections/d;/Exiting thread/d;/0.0.0.0:0/d;/DIRECT\/0.0.0.0/d;/TCP_MISS\/200 0/d' $DD$N
echo `date +%c`"  --  Файл лога ( $N ) найден, успешно почищен от мусора и строк с нулевым трафиком для дальнейшего прогона анализатором" >> $lf
exit 0
free-sa-3proxy-month.sh:
#!/bin/sh
export LANG=ru_RU.UTF-8
export LC_ALL=
f=free-sa
p=3proxy
m=`date +%Y`.`date +%m`
d=/var/log/$p/$m/$p.log.$m
lf=/opt/$f-$p/logs/$f-month.log
if ! [ -e /var/log/$p/$p.log.$m.`date +%d` ]; then echo `date +%c`"  --  Файл лога за сегодняшний день отсутствует, запуск анализатора пропускаем." >> $lf && exit
fi
/opt/$f-$p/$p-log-prepare-month.sh
/usr/bin/$f -d thismonth -f /etc/$f/$f-$p-month.conf -o /var/www/html/$f/$p -l $d
echo $'\n'`date +%c`"  --  Файлы логов за текущий месяц успешно обработаны анализатором" >> $lf
/opt/$f-$p/$f-fix-html-index.sh
3proxy-log-prepare-month.sh:
#!/bin/sh
p=3proxy
f=free-sa
m=`date +%Y`.`date +%m`/
N=$p.log.`date +%Y`.`date +%m`
SD=/usr/local/$p/log/
D=/var/log/$p/
ym=`date +%m`.`date +%Y`
v=0
declare -a days
t=`date +%m | sed 's/^0//'`
LN=log.size.
PN=$p.log.
lf=/opt/$f-$p/logs/$f-month.log
cp /dev/null $lf
if [ ! -e $D$m ]; then
mkdir $D$m
fi
rm -f $D$m$N
for day in {1..31}
do
if (( "$day" < 10 )); then dayvalue="0$day"
else dayvalue="$day"
fi
index=$(( day - 1 ))
if [ -f "$D$N.$dayvalue" ]; then days[index]=$dayvalue
v=$(( v + 1 ))
dayvalue=""
fi
done
if [ $v -eq 0 ]; then echo `date +%c`"  --  Не найдено ни одного файла лога за месяц. Сбор статистики за месяц невозможен." >> $lf && exit 0
fi
if [ $v -eq 1 ]; then echo `date +%c`"  --  Найден всего один лог файл за месяц. Сбор статистики за месяц нецелесообразен." >> $lf
if (( $t > 1 )) && (( $t <= 12 )); then pm=$(( t - 1 )) && py=`date +%Y`; fi
if (( $t == 1 )); then pm=12 && py=$(( `date +%Y` - 1 )); fi
if (( $pm < 10 )); then pm="0$pm"; fi
for day in {1..31}
do
if (( "$day" < 10 )); then dayvalue="0$day"
else dayvalue="$day"
fi
index=$(( day - 1 ))
if [ -f "$D$PN$py.$pm.$dayvalue" ] && [ -f "$D$LN$py.$pm.$dayvalue" ]; then days[index]=$dayvalue; fi
dayvalue=""
done
echo $'\n'`date +%c`"  --  Найдены старые файлы за следующие даты:" >> $lf
for i in ${days[*]}; do
echo "$i.$pm.$py" >> $lf
rm -rf "$D$PN$py.$pm.$i" && rm -rf "$D$LN$py.$pm.$i"
done
echo "Все найденные старые файлы были удалены." >> $lf
if [ -d "$D$py.$pm" ]; then rm -r "$D$py.$pm" && echo $'\n'"Удалён каталог ( $py.$pm ) с логом за прошедший месяц" >> $lf; fi
exit 0
fi
if (( $v > 1 )); then
if ! [ -d "$D$m" ]; then mkdir $D$m; fi
echo `date +%c`"  --  Найдены файлы логов за следующие дни месяца:" >> $lf
for i in ${days[*]}; do
echo "$i.$ym" >> $lf
cat "$D$N.$i" >> $D$m$N
done
fi
/opt/$f-$p/$f-remove-prev-month-statdir.sh
free-sa-remove-prev-statdir.sh:
#!/bin/sh
m=`date +%Y`.`date +%m`/
N=3proxy.log.`date +%Y`.`date +%m`
D=/var/log/3proxy/
dl=/var/www/html/free-sa/3proxy/
ym=`date +%m`.`date +%Y`
lf=/opt/free-sa-3proxy/logs/free-sa-month.log
for day in {1..30}
do
if (( "$day" < 10 )); then dayvalue="0$day"
else dayvalue="$day"
fi
iday=$(( $day + 1 ))
while (( iday <= 31 ))
do
if (( "$iday" < 10 )); then idayvalue="0$iday"
else idayvalue="$iday"
fi
for r in 1 2
do
if [ -d "$dl$dayvalue.$ym-$idayvalue.$ym-$r" ]; then
rm -rf $dl$dayvalue.$ym-$idayvalue.$ym-$r
echo `date +%c`"  --  Найден и успешно удалён старый каталог ( $dayvalue.$ym-$idayvalue.$ym-$r ) со статистикой за текущий месяц" >> $lf && exit 0
fi
done
iday=$(( $iday + 1 ))
done
done
free-sa-fix-html-index.sh:
#!/bin/sh
export LANG=ru_RU.UTF-8
export LC_ALL=
lf=/opt/free-sa-3proxy/logs/free-sa-update-index.log
/usr/bin/free-sa -F -f /etc/free-sa/free-sa-3proxy-day.conf
echo `date +%c`"  --  Индекс файлов с отчётами был успешно обновлён" > $lf

Файлы конфигураций для free-sa (удалены строки с комментариями) для варианта сутки\месяц:
free-sa-3proxy-day.conf
configuration_name="день"
cache_directory="/var/cache/free-sa"
target_directory="/var/www/html/free-sa/3proxy"
username_file="/etc/squid/ip-name.txt"
users_filter="/etc/free-sa/users.filter.sample"
local_filter="/etc/free-sa/HTTP_PUT+POST_method.filter.sample"
reports_bytes_divisor="M"
reports_indicators="yes"
reports_overwrite="1"
reports_url_limit="50"
index_sort="d"
server_efficiency_report="no"
top_sites_report="yes"
top_sites_limit="300"
free-sa-3proxy-month.conf
configuration_name="суммарно за месяц"
cache_directory="/var/cache/free-sa"
target_directory="/var/www/html/free-sa/3proxy"
username_file="/etc/squid/ip-name.txt"
users_filter="/etc/free-sa/users.filter.sample"
local_filter="/etc/free-sa/HTTP_PUT+POST_method.filter.sample"
reports_bytes_divisor="M"
reports_indicators="yes"
reports_overwrite="1"
reports_url_limit="50"
index_sort="d"
server_efficiency_report="no"
top_sites_report="yes"
top_sites_limit="300"

Был создан файл фильтра для учёта трафика по запросам PUT_POST:
HTTP_PUT+POST_method.filter.sample
n Исходящий трафик (PUT/POST)
l 12
w 1
B 0
b 10000
M 0
m P

В моём случае файл /etc/squid/ip-name.txt содержит соответствие между ip адресом и именем пользователя (к примеру, "192.168.1.4 director"), что означает автоматическую замену в отчёте ip адреса на указанное после него через пробел имя. В вашем случае этого файла может и не быть или он может располагаться по другому пути и иметь другое название, поэтому необходимо в файлах конфигурации этот момент поправить под ваши условия.

Как понятно из названий, первые два спойлера - скрипты для обработки файла лога за текущие сутки, следующие три - скрипты для обработки файлов с логами за текущий месяц, а последний скрипт вызывается из каждого скрипта (free-sa-3proxy-month.sh или free-sa-3proxy-today.sh) при определённых условиях для обновления индекса каталогов статистики (об этом далее), отдаваемой веб-сервером браузеру.
  • В моём случае все скрипты располагаются по пути /opt/free-sa
  • Логи демона 3proxy - по пути /usr/loca/3proxy/log
  • Логи, обрабатываемые с помощью скриптов и отдаваемые на обработку анализатору, будут располагаться по пути /var/log/3proxy (файлы логов за месяц при этом будут располагаться в подкаталогах с именами в формате год.месяц, например, var/log/3proxy/2014.01)
  • В каталог /opt/free-sa-3proxy/logs пишутся логи данными скриптами, чтобы можно было через веб-интерфейс мониторить их работу, не обращаясь к ssh или другим средствам удалённого администрирования.
  • Результаты обработки логов в виде подготовленных для просмотра веб-страниц помещаются по пути /var/www/html/free-sa/3proxy.
Все эти значения задаются в самом начале скриптов в переменных и эти значения необходимо подкорректировать для вашего случая установки 3proxy.

В скрипте по подготовке логов 3proxy к обработке анализатором происходит очистка файла от "нулевых" запросов, т.е. тех запросов, по которым было получено ровно ноль байт (их нет особого смысла учитывать, по крайней мере в местных условиях применения прокси). Также прогон файла анализатором пропускается, если размер файла лога не изменился относительно предыдущего запуска, скрипты сохраняют в каталог /var/log/3proxy файлы с размером текущего обработанного анализатором free-sa файла для возможности оценки изменения его размера. Хотел сделать подобное и для всех файлов за месяц, но сходу эту задачку решить не получилось (для сохранения ресурсов машины, если они слабые, можно попробовать дописать недостающий функционал).

Настройка веб-сервера lighttpd

Перед установкой должен быть создан необходимый "скелет" каталогов (см. приложение free-sa-html-tree.png). После установки free-sa штатно из репозитория такая структура и будет создана, за исключением того, что на скрине здесь не указан (затёрт) каталог cgi-bin (т.к. его содержимое, которое предоставляет дополнительные возможности по мониторингу трафика, никак не задействуется в моём случае). Второй затёртый каталог это squid (туда писались результаты обработки free-sa логов squid'а, но впоследствии от последнего решено было отказаться в пользу 3proxy по причине отсутствия в squid нормальных ограничений по трафику). В каталог 3proxy пишется результат обработки логов 3proxy, который мы и можем наблюдать на скриншотах из сообщений ниже. Символическая ссылка logs, как можно догадаться, указывает на каталог с логами (/opt/free-sa/logs), которые создают и заполняют скрипты автоматики. А вот index.html это та самая "основная страница":
index.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head>
<title>Выбор прокси сервера для отчёта по трафику</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="robots" content="noindex,nofollow">
<link rel="stylesheet" href="./rsa.css" type="text/css">
</head><body><center>
<table class=hdr>
<tr><td class=el>
<tr><th><a href="/3proxy/index.html"><span style="font-size:20pt;">3proxy</span></a>
</table><br><br>
<table class=hdr>
<tr><td class=el>
<tr><th><span style="color:#999999;font-size:20pt;">squid</span>
<tr><td class=el>
</table></center>
<hr>Статистика потребления трафика.<span style="text-align:right;float:right;"><a href="/logs">Просмотр логов анализатора</a></span>
</body></html>
Если вам мешает неактивная кнопка "squid", то её можно убрать удалив из файла следующее:
"кнопка" squid
<br><br>
<table class=hdr>
<tr><td class=el>
<tr><th><span style="color:#999999;font-size:20pt;">squid</span>
<tr><td class=el>
</table>
Изменённое оформление silver, что на скринах из третьего сообщения и первого скрина из второго сообщения, (если кому нужно) во вложении (извлечь содержимое второго вложения в папку themes с заменой файлов).
Файл конфигурации для lighttpd прикреплен к сообщению. На что здесь следует обратить внимание:
  • var.server_root = "/var/www" -> корень сервера
  • server.document-root = server_root + "/html/free-sa" -> корневая папка, содержащая непосредственно веб-контент
  • $HTTP["remoteip"] !~ "172\.16\.41\.213|172\.16\.14\.28" {
    $HTTP["url"] =~ "^/*" { url.access-deny = ( "" ) }
    } -> доступ к веб-серверу ограничен двумя адресами (запись несколько странная, но какая есть)
  • alias.url += ( "/3proxy" => server_root + "/html/free-sa/3proxy" ) -> адрес /3proxy относительно корня соответствует расположению /var/www/html/free-sa/3proxy
  • alias.url += ( "/logs" => server_root + "/html/free-sa/logs" ) -> адрес /logs относительно корня соответствует расположению /var/www/html/free-sa/logs
  • $HTTP["url"] =~ "^/logs($|/)" { dir-listing.activate = "enable" } -> для адреса /logs относительно корня включить показ содержимого каталога

Оффлайн sb

  • Модератор глобальный
  • *****
  • Сообщений: 8 991
Настройка связки 3proxy + free-sa
« Ответ #1 : 06.03.2014 08:21:58 »
Скриншоты того, что получается в результате (часть 1):

* Основная страница
* Переход c "основной страницы" по ссылке справа "Просмотр логов анализатора"
* Просмотр лог файла free-sa-month.log
* Просмотр лог файла free-sa-today.log

Переход со страницы, где выводится список лог файлов, по ссылке "Parent Directory/" (вверх по иерархии каталогов) приводит к переходу на "основную страницу".

PS Основная страница - самописная (там буквально несколько строк, о структуре каталогов и самих файлов сказано в первом сообщении), всё остальное это работа lighttpd.

Оффлайн sb

  • Модератор глобальный
  • *****
  • Сообщений: 8 991
Настройка связки 3proxy + free-sa
« Ответ #2 : 06.03.2014 08:23:12 »
Скриншоты того, что получается в результате (часть 2):

* Переход с "основной страницы" по "кнопке" (ссылке) 3proxy
* Переход с предыдущей страницы на страницу с отчётом по выбранному слева периоду (с такого-то числа по такое-то)
* Переход с предыдущей страницы по ссылке "Пользователи"
* Переход с предыдущей страницы на страницу с подробной статистикой одного из пользователей

Как видно, имеющееся оформление отличается от того, что идёт с rpm пакетом в базовых темах (но об этом и о том, как настроить простую отдачу всего этого добра веб-сервером, будет описано в первом сообщении).

PS Вся информация (а точнее все html страницы, скриншоты которых здесь представлены) генерируется анализатором free-sa.

Оффлайн sb

  • Модератор глобальный
  • *****
  • Сообщений: 8 991
Re: Настройка связки 3proxy + free-sa
« Ответ #3 : 12.08.2014 09:28:10 »
За прошедшее время были выявлены ошибки в скриптах, которые были поправлены. Также произведена ревизия кода, размер которого был уменьшен.
Поскольку в файле конфигурации 3proxy задаётся параметр хранения логов только за месяц, то было бы логично возложить на "месячный" подготовительный скрипт похожую функцию для удаления уже обработанных логов и хранения логов только за текущий месяц (или за два прошедших месяца). Код написан, проходит проверку, внесу изменения в скрипт как только получу положительные результаты.

Оффлайн sb

  • Модератор глобальный
  • *****
  • Сообщений: 8 991
Re: Настройка связки 3proxy + free-sa
« Ответ #4 : 20.08.2014 07:34:42 »
Добавлена проверка (файл free-sa-3proxy-month.sh) на наличие активности за текущий день (наличие файла лога), чтобы в случае отсутствия таковой не запускать анализатор по конфигурации "месяц".

Оффлайн sb

  • Модератор глобальный
  • *****
  • Сообщений: 8 991
Re: Настройка связки 3proxy + free-sa
« Ответ #5 : 25.08.2014 09:15:11 »
Исправлена обнаруженная ошибка в файле free-sa-3proxy-month.sh, которая приводила к удалению сгенерированной статистики за текущий месяц в случае выполнения условий из поста выше.

Оффлайн sb

  • Модератор глобальный
  • *****
  • Сообщений: 8 991
Re: Настройка связки 3proxy + free-sa
« Ответ #6 : 15.09.2014 09:04:10 »
Исправлено возможное некорректное поведение cкрипта 3proxy-log-prepare-month.sh при отсутствии директории для обработки суммарного лога за месяц.

Оффлайн sb

  • Модератор глобальный
  • *****
  • Сообщений: 8 991
Re: Настройка связки 3proxy + free-sa
« Ответ #7 : 03.10.2014 07:19:38 »
Удалена лишняя проверка из файла free-sa-3proxy-month.sh, из-за которой в новом месяце статистика не начинала обрабатываться.

Оффлайн sb

  • Модератор глобальный
  • *****
  • Сообщений: 8 991
Re: Настройка связки 3proxy + free-sa
« Ответ #8 : 01.06.2015 10:18:06 »
После отслеживания работы скриптов в течение нескольких месяцев, были выявлены некоторые моменты, которые несколько мешали. Все они были поправлены и скрипты изменены. Выкладываю архив со скриптами в варианте со всеми изменениями (а то уже надоело править первый пост для этого).
В частности, был изменен процесс формирования файлов логов таким образом, чтобы "тупые" современные браузеры могли наконец отображать содержимое в правильной кодировке.