Есть проблема. Стоит сквида 2.5, все работает нормально, пользователи лезут в инет через авторизацию. Нужно посчитать трафик сколько скачено каждым пользователем, и желательно сделать чтобы отсылалось на мыло. Я установил сарг, настроил его, но вот появилась проблема, как мне заставить сарг чтобы присылал отчет за сутки только определенного пользователя? Я так понимаю мне надо постоянно теперь ручками прописывать дату :-( ведь геморойно... как заставить сарг чтобы генерил отчет за сутки или же генерил по времени? попробовал сделать так:sarg -d 22/10/2004-22/10/2004 -e pisya@kamushkin.ru -u pisya - Я так понимаю мне только ручками светит делать енто? или же есть вариант чтобы как-то подставлять дату или вреся? кто с этим сталкивался помогите с вопросом.
>Есть проблема. Стоит сквида 2.5, все работает нормально, пользователи лезут в инет
>через авторизацию. Нужно посчитать трафик сколько скачено каждым пользователем, и желательно
>сделать чтобы отсылалось на мыло. Я установил сарг, настроил его, но
>вот появилась проблема, как мне заставить сарг чтобы присылал отчет за
>сутки только определенного пользователя? Я так понимаю мне надо постоянно теперь
>ручками прописывать дату :-( ведь геморойно... как заставить сарг чтобы генерил
>отчет за сутки или же генерил по времени? попробовал сделать так:
>
>
>sarg -d 22/10/2004-22/10/2004 -e pisya@kamushkin.ru -u pisya - Я так понимаю мне
>только ручками светит делать енто? или же есть вариант чтобы как-то
>подставлять дату или вреся? кто с этим сталкивался помогите с вопросом.
>А если поставить на Cron?
Если через Cron, то может возникнуть проблема связанная с тем, что за минуту генерации можент кто-то полезть в инет.
Для избежания данной проблемы:
#!/bin/sh
dat=`date +%d/%m/%Y`
dats="$dat-$dat"
/usr/bin/sarg -d $dats
>Если через 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.
>А как заставить запускаться этот скрипт в последний день месяца, ночью?
>Ведь в каждом месяце разное количество дней. Чтобы считать трафик 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
>Просто запускайте в 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Спасибо.
>Скрипт нужно запускать в 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Даст неверное значение.
Всё-таки как?
>Так как же в ПОСЛЕДНИЙ день месяца запустить?
>Что в 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 $datsCrontab:
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 Мгц.
В /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 дней в ноябре.
П Р И Д У М А Л ! ! ! :)))
#!/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Теперь всё ок :)
>П Р И Д У М А Л ! ! ! :)))
>
>#!/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 дней? :)
Хотя ход ваших мыслей мне нравится :)
>П Р И Д У М А Л ! ! ! :)))
>
>#!/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 $datssarg.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Может так?
>Мне кажется Ваш первый вариант был удобнее.
>Создание статистики за день, месяц (жалко, что за неделю не получится >таким образом).
:))) Я вновь придумал!!!За неделю:
#!/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
>Не верно :) Таким образом каждый день будут папки вида:
>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) :)
>Это запуск ПЕРВОГО числа каждого месяца.
>А мне нужно ПОСЛЕДНЕГО.
>Иначе
>
>#!/bin/sh
>dat=`date +/%m/%Y`
>dats="01$dat-31$dat"
>/usr/bin/sarg -d $dats
>
>Даст неверное значение.
>Всё-таки как?Последний день предыдущего месяца - это первый день текущего минус 1 день
date -v -1d (в BSD)
>>Ведь в каждом месяце разное количество дней. Чтобы считать трафик 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Все! Начался новый месяц - подвели итоги за прошлый, с точностью до минуты :)
Вообщем подведем итоги :)))Статистика за текущий день (скажем из недельного, месячного лога):
#!/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 должна быть ЕЖЕМЕСЯЧНОЙ или более долгой.
>Статистика за текущий месяц:
>#!/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 года корректировать? Так и забыть можно, а потом
вспоминать отчего не сходится чего-то :)
>Изменения в /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 должна быть ЕЖЕМЕСЯЧНОЙ или более
>долгой.Согласен, хотя можно и мой метод, тогда и лог не будет таким пухлым и
посчитать можно :)) И ротация тогда будет еженедельной :)
Только тогда недельный подсчёт делать раньше ротации :)