URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID12
Нить номер: 2609
[ Назад ]

Исходное сообщение
"Sarg+Squid = отчет и дата отчетов!"

Отправлено Lotos20 , 28-Окт-04 15:44 
Есть проблема. Стоит сквида 2.5, все работает нормально, пользователи лезут в инет через авторизацию. Нужно посчитать трафик сколько скачено каждым пользователем, и желательно сделать чтобы отсылалось на мыло. Я установил сарг, настроил его, но вот появилась проблема, как мне заставить сарг чтобы присылал отчет за сутки только определенного пользователя? Я так понимаю мне надо постоянно теперь ручками прописывать дату :-( ведь геморойно... как заставить сарг чтобы генерил отчет за сутки или же генерил по времени? попробовал сделать так:

sarg -d 22/10/2004-22/10/2004 -e pisya@kamushkin.ru -u pisya - Я так понимаю мне только ручками светит делать енто? или же есть вариант чтобы как-то подставлять дату или вреся? кто с этим сталкивался помогите с вопросом.


Содержание

Сообщения в этом обсуждении
"Sarg+Squid = отчет и дата отчетов!"
Отправлено Аскет , 28-Окт-04 20:23 
>Есть проблема. Стоит сквида 2.5, все работает нормально, пользователи лезут в инет
>через авторизацию. Нужно посчитать трафик сколько скачено каждым пользователем, и желательно
>сделать чтобы отсылалось на мыло. Я установил сарг, настроил его, но
>вот появилась проблема, как мне заставить сарг чтобы присылал отчет за
>сутки только определенного пользователя? Я так понимаю мне надо постоянно теперь
>ручками прописывать дату :-( ведь геморойно... как заставить сарг чтобы генерил
>отчет за сутки или же генерил по времени? попробовал сделать так:
>
>
>sarg -d 22/10/2004-22/10/2004 -e pisya@kamushkin.ru -u pisya - Я так понимаю мне
>только ручками светит делать енто? или же есть вариант чтобы как-то
>подставлять дату или вреся? кто с этим сталкивался помогите с вопросом.
>

А если поставить на Cron?


"Sarg+Squid = отчет и дата отчетов!"
Отправлено zabudkin , 24-Ноя-04 08:30 
Если через Cron, то может возникнуть проблема связанная с тем, что за минуту генерации можент кто-то полезть в инет.
Для избежания данной проблемы:
#!/bin/sh
dat=`date +%d/%m/%Y`
dats="$dat-$dat"
/usr/bin/sarg -d $dats

"Sarg+Squid = отчет и дата отчетов!"
Отправлено Name , 26-Ноя-04 11:53 
>Если через Cron, то может возникнуть проблема связанная с тем, что за
>минуту генерации можент кто-то полезть в инет.
>Для избежания данной проблемы:
>#!/bin/sh
>dat=`date +%d/%m/%Y`
>dats="$dat-$dat"
>/usr/bin/sarg -d $dats


А как заставить запускаться этот скрипт в последний день месяца, ночью?
Ведь в каждом месяце разное количество дней. Чтобы считать трафик squid-а за месяц.

#!/bin/sh
/bin/cat /var/log/squid/access.log > /tmp/access.log.tmp
/bin/zcat /var/log/squid/access.log.1.gz >> /tmp/access.log.tmp
/bin/zcat /var/log/squid/access.log.2.gz >> /tmp/access.log.tmp
/bin/zcat /var/log/squid/access.log.3.gz >> /tmp/access.log.tmp
/bin/zcat /var/log/squid/access.log.4.gz >> /tmp/access.log.tmp
/bin/zcat /var/log/squid/access.log.5.gz >> /tmp/access.log.tmp
dat1=`date +01/%m/%Y`
dat2=`date +%d/%m/%Y`
dats="$dat1-$dat2"
/usr/bin/sarg -l /tmp/access.log.tmp -d $dats && /bin/rm -f /tmp/access.log.tmp

И запускать этот скрипт за 15 минут до полуночи последнего дня месяца.
Но как указать, чтобы он именно в поседний день стартовал, не просто такого-то числа. Потому что то 30 дней в месяце, то 31, то 29, то 28.



"Sarg+Squid = отчет и дата отчетов!"
Отправлено zabudkin , 26-Ноя-04 12:00 
>А как заставить запускаться этот скрипт в последний день месяца, ночью?
>Ведь в каждом месяце разное количество дней. Чтобы считать трафик squid-а за
>месяц.
Скрипт нужно запускать в 23 часа 59 минут, дабы в момент запуска скрипта команда date выдала нужную нам дату.

Статистика за месяц:
#!/bin/sh
dat=`date +/%m/%Y`
dats="01$dat-31$dat"
/usr/bin/sarg -d $dats

Статистика с 1 по 15 число каждого месяца:
#!/bin/sh
dat=`date +/%m/%Y`
dats="01$dat-15$dat"
/usr/bin/sarg -d $dats

Статистика за день (скажем из недельного, месячного лога):
#!/bin/sh
dat=`date +%d/%m/%Y`
dats="$dat-$dat"
/usr/bin/sarg -d $dats

>И запускать этот скрипт за 15 минут до полуночи последнего дня месяца.
>Но как указать, чтобы он именно в поседний день стартовал, не просто
>такого-то числа. Потому что то 30 дней в месяце, то 31,
>то 29, то 28.
Просто запускайте в 23 часа 59 минут (см. выше).
Вот мой /etc/crontab:

59 * * * * root nice -n 19 run-parts /etc/cron.hourly
59 23 * * * root nice -n 19 run-parts /etc/cron.daily
59 23 * * 0 root nice -n 19 run-parts /etc/cron.weekly
59 23 1 * * root nice -n 19 run-parts /etc/cron.monthly


"Sarg+Squid = отчет и дата отчетов!"
Отправлено Name , 26-Ноя-04 13:03 
>Просто запускайте в 23 часа 59 минут (см. выше).
>Вот мой /etc/crontab:
>
>59 * * * * root nice -n 19 run-parts /etc/cron.hourly
>59 23 * * * root nice -n 19 run-parts /etc/cron.daily
>59 23 * * 0 root nice -n 19 run-parts /etc/cron.weekly
>59 23 1 * * root nice -n 19 run-parts /etc/cron.monthly

Спасибо.


"Sarg+Squid = отчет и дата отчетов!"
Отправлено Name , 26-Ноя-04 13:21 
>Скрипт нужно запускать в 23 часа 59 минут, дабы в момент запуска
>скрипта команда date выдала нужную нам дату.

Так как же в ПОСЛЕДНИЙ день месяца запустить?
Что в 23:59 - это понятно.

>>И запускать этот скрипт за 15 минут до полуночи последнего дня месяца.
>>Но как указать, чтобы он именно в поседний день стартовал, не просто
>>такого-то числа. Потому что то 30 дней в месяце, то 31,
>>то 29, то 28.
>Просто запускайте в 23 часа 59 минут (см. выше).
>Вот мой /etc/crontab:
>

>59 23 1 * * root nice -n 19 run-parts /etc/cron.monthly

Это запуск ПЕРВОГО числа каждого месяца.
А мне нужно ПОСЛЕДНЕГО.
Иначе

#!/bin/sh
dat=`date +/%m/%Y`
dats="01$dat-31$dat"
/usr/bin/sarg -d $dats

Даст неверное значение.
Всё-таки как?


"Sarg+Squid = отчет и дата отчетов!"
Отправлено zabudkin , 26-Ноя-04 13:31 
>Так как же в ПОСЛЕДНИЙ день месяца запустить?
>Что в 23:59 - это понятно.
>Это запуск ПЕРВОГО числа каждого месяца.
>А мне нужно ПОСЛЕДНЕГО.
>Всё-таки как?
Запускайте каждый день и всё, всё равно же это будет происходить ночью.
У меня логи ротатятся каждый месяц. Размер access.log почти полутора гигов, и работают два скрипта:
в /etc/cron.hourly:
#!/bin/sh
dat=`date +%d/%m/%Y`
dats="$dat-$dat"
/usr/bin/sarg -d $dats

в /etc/cron.daily:
dat1=`date +01/%m/%Y`
dat2=`date +%d/%m/%Y`
dats="$dat1-$dat2"
/usr/bin/sarg -d $dats

Crontab:
59 * * * * root nice -n 19 run-parts /etc/cron.hourly
59 23 * * * root nice -n 19 run-parts /etc/cron.daily

Для системы практически не заметно и это на логе почти 1.5 Гига, система P-III, 700 Мгц.


"Sarg+Squid = отчет и дата отчетов!"
Отправлено zabudkin , 26-Ноя-04 13:37 
В /etc/cron.dayly у меня это скрипт:
#!/bin/sh
dat=`date +/%m/%Y`
dats="01$dat-31$dat"
/usr/bin/sarg -d $dats

Если использовать Ваш, то он будет создавать каждый раз папки на текущий день.
А вот как узнать сколько дней в данном месяце я даже не знаю :(
А так хоть будут папки 2004/11/01-2004/11/01
хоть и 30 дней в ноябре.


"Sarg+Squid = отчет и дата отчетов!"
Отправлено zabudkin , 26-Ноя-04 13:48 
П Р И Д У М А Л ! ! ! :)))
#!/bin/sh
datm=`date +%m/%Y`
datm2=`date +%m`
daysinmonth=( 31 28 31 30 31 30 31 31 30 31 30 31)
dats="01/$datm-${daysinmonth[$datm2-1]}/$datm"
/usr/bin/sarg -d $dats

Теперь всё ок :)


"Sarg+Squid = отчет и дата отчетов!"
Отправлено Name , 26-Ноя-04 15:20 
>П Р И Д У М А Л ! ! ! :)))
>
>#!/bin/sh
>datm=`date +%m/%Y`
>datm2=`date +%m`
>daysinmonth=( 31 28 31 30 31 30 31 31 30 31 30
>31)
>dats="01/$datm-${daysinmonth[$datm2-1]}/$datm"
>/usr/bin/sarg -d $dats
>
>Теперь всё ок :)

Почти :)
А если в феврале 29 дней? :)
Хотя ход ваших мыслей мне нравится :)


"Sarg+Squid = отчет и дата отчетов!"
Отправлено Name , 26-Ноя-04 15:35 
>П Р И Д У М А Л ! ! ! :)))
>
>#!/bin/sh
>datm=`date +%m/%Y`
>datm2=`date +%m`
>daysinmonth=( 31 28 31 30 31 30 31 31 30 31 30
>31)
>dats="01/$datm-${daysinmonth[$datm2-1]}/$datm"
>/usr/bin/sarg -d $dats
>
>Теперь всё ок :)

Мне кажется Ваш первый вариант был удобнее.
Создание статистики за день, месяц (жалко, что за неделю не получится таким образом).
Т.е запуск двух скриптов ежечасно, один будет за день считать, а другой суммировать за месяц. потом меняется месяц, изменяется %m и начинает создаваться следующая папка с логом.

sarg.month.sh
#!/bin/sh
dat1=`date +/%m/%Y`
dat2=`date +%d/%m/%Y`
dats="01/$dat1-$dat2"
/usr/bin/sarg -d $dats

sarg.day.sh
#!/bin/sh
dat=`date +%d/%m/%Y`
dats="$dat-$dat"
/usr/bin/sarg -d $dats

И запускать их ежечасно, с промежутком в минуту между собой.

58 * * * * /etc/squid/sarg.day.sh
59 * * * * /etc/squid/sarg.month.sh

Может так?


"Sarg+Squid = отчет и дата отчетов!"
Отправлено zabudkin , 26-Ноя-04 15:54 
>Мне кажется Ваш первый вариант был удобнее.
>Создание статистики за день, месяц (жалко, что за неделю не получится >таким образом).
:))) Я вновь придумал!!!

За неделю:
#!/bin/sh
datm=`date +%m/%Y`
datm2=`date +%m`
datd=`date +%d`
datw=`date +%u`
startw=$(bc << EOF
($datd-$datw)+1
EOF
)
endw=$(bc << EOF
$startw+7
EOF
)
dats="$startw/$datm-$endw/$datm"
/usr/bin/sarg -d $dats

>Т.е запуск двух скриптов ежечасно, один будет за день считать, а другой
>суммировать за месяц. потом меняется месяц, изменяется %m и начинает
>создаваться  следующая папка с логом.

>sarg.month.sh
>#!/bin/sh
>dat1=`date +/%m/%Y`
>dat2=`date +%d/%m/%Y`
>dats="01/$dat1-$dat2"
>/usr/bin/sarg -d $dats

Не верно :) Таким образом каждый день будут папки вида:
2004/11/01-2004/11/02
2004/11/01-2004/11/03
2004/11/01-2004/11/04
2004/11/01-2004/11/05
.....
2004/11/01-2004/11/30


>И запускать их ежечасно, с промежутком в минуту между собой.
Ни в коем случае!
Ваша система будет подсчитывать за месяц каждый час? И Вы готовы ее этим загрузить?
Всё-туки лучший вариант каждый день запускать подсчет статистики за месяц, а каждый час - за день.

Для месяцев лучше использовать такой скрипт:
#!/bin/sh
datm=`date +%m/%Y`
datm2=`date +%m`
daysinmonth=( 31 28 31 30 31 30 31 31 30 31 30 31)
dats="01/$datm-${daysinmonth[$datm2-1]}/$datm"
/usr/bin/sarg -d $dats


"Sarg+Squid = отчет и дата отчетов!"
Отправлено Name , 26-Ноя-04 16:24 
>Не верно :) Таким образом каждый день будут папки вида:
>2004/11/01-2004/11/02
>2004/11/01-2004/11/03
>2004/11/01-2004/11/04
>2004/11/01-2004/11/05
>.....
>2004/11/01-2004/11/30
>
>
>>И запускать их ежечасно, с промежутком в минуту между собой.
>Ни в коем случае!
>Ваша система будет подсчитывать за месяц каждый час? И Вы готовы ее
>этим загрузить?
>Всё-туки лучший вариант каждый день запускать подсчет статистики за месяц, а каждый
>час - за день.
>
>Для месяцев лучше использовать такой скрипт:
>#!/bin/sh
>datm=`date +%m/%Y`
>datm2=`date +%m`
>daysinmonth=( 31 28 31 30 31 30 31 31 30 31 30
>31)
>dats="01/$datm-${daysinmonth[$datm2-1]}/$datm"
>/usr/bin/sarg -d $dats

Не будут, ибо можно поставить опцию удаления предидущей записи (кажется так overwrite_report yes) :)


"Sarg+Squid = отчет и дата отчетов!"
Отправлено PJ , 29-Ноя-04 16:38 

>Это запуск ПЕРВОГО числа каждого месяца.
>А мне нужно ПОСЛЕДНЕГО.
>Иначе
>
>#!/bin/sh
>dat=`date +/%m/%Y`
>dats="01$dat-31$dat"
>/usr/bin/sarg -d $dats
>
>Даст неверное значение.
>Всё-таки как?

Последний день предыдущего месяца - это первый день текущего минус 1 день
date -v -1d (в BSD)



"Sarg+Squid = отчет и дата отчетов!"
Отправлено NoName , 30-Ноя-04 15:19 
>>Ведь в каждом месяце разное количество дней. Чтобы считать трафик squid-а за месяц.
>Скрипт нужно запускать в 23 часа 59 минут

Нет, я конечно понимаю, что это дело принципа, но так ли важна для вас пара минут?
Как вариант, генерим статистику 1-го числа ЛЮБОГО месяца часиков, эдак, в 0:01, за предыдущий. Разница в 2 минуты, а проблем восприятия меньше.

MONTHAGO=$(date --date "1 month ago" +01/%m/%Y)-$(date --date "1 month ago" +31/%m/%Y)
/usr/sbin/sarg -d $MONTHAGO

Запускаем, например, так:
01 0 1 * * run-parts /etc/cron.monthly

Все! Начался новый месяц - подвели итоги за прошлый, с точностью до минуты :)


"Sarg+Squid = отчет и дата отчетов!"
Отправлено zabudkin , 26-Ноя-04 15:58 
Вообщем подведем итоги :)))

Статистика за текущий день (скажем из недельного, месячного лога):
#!/bin/sh
dat=`date +%d/%m/%Y`
dats="$dat-$dat"
/usr/bin/sarg -d $dats

Статистика текущую за неделю:
#!/bin/sh
datm=`date +%m/%Y`
datm2=`date +%m`
datd=`date +%d`
datw=`date +%u`
startw=$(bc << EOF
($datd-$datw)+1
EOF
)
endw=$(bc << EOF
$startw+7
EOF
)
dats="$startw/$datm-$endw/$datm"
/usr/bin/sarg -d $dats

Статистика за текущий месяц:
#!/bin/sh
datm=`date +%m/%Y`
datm2=`date +%m`
daysinmonth=( 31 28 31 30 31 30 31 31 30 31 30 31)
dats="01/$datm-${daysinmonth[$datm2-1]}/$datm"
/usr/bin/sarg -d $dats

Изменения в /etc/crontab:
59 * * * * root nice -n 19 run-parts /etc/cron.hourly
59 23 * * * root nice -n 19 run-parts /etc/cron.daily

В /etc/cron.hourly кладем скрипт подсчета статистики за день,
а в /etc/cron.daily кладем остальные два скрипта.

При этом учитываем, что РОТАЦИЯ логов SQUID должна быть ЕЖЕМЕСЯЧНОЙ или более долгой.


"Sarg+Squid = отчет и дата отчетов!"
Отправлено Name , 26-Ноя-04 16:20 
>Статистика за текущий месяц:
>#!/bin/sh
>datm=`date +%m/%Y`
>datm2=`date +%m`
>daysinmonth=( 31 28 31 30 31 30 31 31 30 31 30
>31)
>dats="01/$datm-${daysinmonth[$datm2-1]}/$datm"
>/usr/bin/sarg -d $dats

А как же високосный и невисокосный года? :))
Каждые 4 года корректировать? Так и забыть можно, а потом
вспоминать отчего не сходится чего-то :)


"Sarg+Squid = отчет и дата отчетов!"
Отправлено Name , 26-Ноя-04 16:33 
>Изменения в /etc/crontab:
>59 * * * * root nice -n 19 run-parts /etc/cron.hourly
>59 23 * * * root nice -n 19 run-parts /etc/cron.daily
>
>В /etc/cron.hourly кладем скрипт подсчета статистики за день,
>а в /etc/cron.daily кладем остальные два скрипта.

Наверное за неделю лучше всё-таки положить в cron.weekly
иначе он каждый день будет отсчитывать неделю назад :))

>При этом учитываем, что РОТАЦИЯ логов SQUID должна быть ЕЖЕМЕСЯЧНОЙ или более
>долгой.

Согласен, хотя можно и мой метод, тогда и лог не будет таким пухлым и
посчитать можно :)) И ротация тогда будет еженедельной :)
Только тогда недельный подсчёт делать раньше ротации :)