Анализ логов squid с помощью sarg

()

В комментариях к предыдущей заметке я обещал выложить свои скрипты для просмотра статистики squid. Обещание сдерживаю:)

Итак. Для начала нам понадобиться sarg. В разных дистрибутивах он устанавливается по разному:

# В Gentoo:
emerge sarg

# В Mandriva:
urpmi sarg

# В Debian/Ubuntu:
apt-get install sarg

# В RedHat/Fedora:
yum install sarg

# Во FreeBSD:
portinstall sarg

Далее нужно немного подредактировать sarg.conf. Для начала изменить значение параметра overwrite_report на yes:

overwrite_report yes

Далее можно по вкусу подправить значение output_dir. После чего создаём два скрипта. Первый скрипт будет запускаться каждый час и обновлять статистику за текущий день, второй будет запускаться раз в сутки и ротировать лог.

Итак, первый скрипт (сохраняется как /root/scripts/sarghourly.sh):

#!/bin/sh
/usr/bin/sarg -d `/bin/date +%d/%m/%Y`-`/bin/date +%d/%m/%Y`

Второй скрипт (сохраняется как /root/scripts/sargdaily.sh):

#!/bin/sh
/usr/bin/sarg -d `/bin/date +%d/%m/%Y --date "-1 day"`-`/bin/date +%d/%m/%Y --date "-1 day"`
/usr/sbin/squid -k rotate

Делаем оба скрипта исполнимыми:

chmod +x /root/scripts/sarg*

И добавляем в /etc/crontab вызов этих скриптов:

# Generate sarg reports
1 0     * * *   root    /root/scripts/sargdaily.sh
5 *     * * *   root    /root/scripts/sarghourly.sh

Следует отметить что в различных дистрибутивах различные команды могут находиться в разных местах, поэтому возможно придётся править эти пути в скриптах. Приведённые здесь скрипты написаны для Debian/Ubuntu.

Просматривать статистику можно локально, открыв в браузере файл index.html из output_dir, или можно поднять веб-сервер и отдавать эту папочку на одном из виртуальных хостов.

Пример статистики, сгенерированной этим скриптом:

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

Ключевые слова: sarg, squid, report, access.log.

Подписаться на обновления: RSS-лента Канал в TamTam Telegram канал Канал в ICQ

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

Bull-Dog 2008-02-25 13:47:58 (#)

Большое спасибо за статью!
ps Теперь у меня появилось большое желание разобраться в sarg =)

MooSE 2008-02-25 14:00:18 (#)

Дело скорее не в самом sarg. Дело в параметрах, с которыми его запускаешь:)

robb 2008-02-26 10:39:57 (#)

Уже полгода использую http://lightsquid.sourceforge.net/
Рекомендую - проще, надежнее, есть имена и группы пользователей.
Sarg, запускаемый каждые 15 мин, иногда глючил, приходилось находить и в access.log удалять некоторые строки.

Shlomo 2008-02-26 11:06:45 (#)

Немного другой подход к подсчету траффика. Скрипт выполняется ежедневно в конце рабочего дня. Если день==воскресенье, то создаётся недельный отчет. Плюсы этого подхода - никакие логи не удаляются, а аккуратно архивируются, и, если понадобится, можно создать отчет за любой период.

[root@proxy]-<10:59:28>-[/var/log/squid]
# cat /etc/cron.misc/squid-logrotate.sh
#!/bin/bash
####
# Parameters:
sarg="/usr/sbin/sarg"
dateno=`date +%d`
logdir="/var/log/squid"
savelogdir="$logdir/`date +%Y-%m`"
weekday=`date +%u`
logfiles="access.log
cache.log
redirector.log
store.log
"
tmpdir="/tmp/squid-report"
####

# Daily logrotate
mkdir $savelogdir 2>/dev/null
mkdir $logdir/lastweek 2>/dev/null
for logfile in $logfiles
do
cp $logdir/$logfile $savelogdir/$dateno-$logfile
cp $logdir/$logfile $logdir/lastweek/$weekday-$logfile
echo > $logdir/$logfile
done

# If today is sunday, make weekly report
if [[ `date +%u` == 7 ]]
then
rm -rf $tmpdir 2>/dev/null
mkdir $tmpdir
for logfile in $logfiles
do
for i in `seq 1 7`
do
cat $logdir/lastweek/$i-$logfile >> $tmpdir/$logfile
done
done
$sarg
rm -rf $tmpdir
fi

Второй скрипт - выполняется в первый день каждого месяца. Создаёт ежемесячный отчет и архивирует старые логи.

[root@proxy]-<11:05:57>-[/var/log/squid]
# cat /etc/cron.misc/squid-monthly.sh
#!/bin/bash

####
# Parameters:
sarg="/usr/sbin/sarg"
dateno=`date +%d`
logdir="/var/log/squid"
savelogdir="$logdir/curmonth"
tarfile="$logdir/archives/`ls -gG $savelogdir | awk '{print $9}'`.tar.bz2"
weekday=`date +%u`
logfiles="access.log
cache.log
redirector.log
store.log
"
tmpdir="/tmp/squid-report"
####

# Make monthly report
rm -rf $tmpdir
mkdir $tmpdir
for logfile in $logfiles
do
for i in `find $savelogdir/ -name "*-$logfile"`
do
cat $i >> $tmpdir/$logfile
done
done
$sarg
rm -rf $tmpdir

# Monthly logrotate
tar -cjf $tarfile $savelogdir/*
if (( ! $? ))
then rm -rf $logdir/`ls -gG $savelogdir | awk '{print $9}'`
fi
rm $savelogdir
mkdir $logdir/`date +%Y-%m` 2>/dev/null
ln -s `date +%Y-%m` $savelogdir

Moose, добавь, пожалуйста, тег codebox!!

MooSE 2008-02-26 12:37:49 (#)

quadrik, нету тут такого тэга. Можешь своё детище в виде заметки оформить. Я подтвержу.

P.S. В моём случае логи тоже не удаляются. Ротация их ведь просто переименовынвает..

Shlomo 2008-02-26 14:22:03 (#)

Не хочется создавать кучу одинаковых тем. Это просто другой способ, может, кому-то понравится.
P.S. я просто очень люблю баш :)

Proghat 2008-05-26 11:57:18 (#)

host scripts # which sarg
/usr/sbin/sarg

у меня, в gentoo, sarg находится в /usr/sbin

;)

MooSE 2008-11-12 14:39:35 (#)

День добрый.
Столкнулся с проблемой при конфигурированиb SARG.
Суть проблемы: авторизация на SQUID сделана по ncsa.
Имме файл для USERTAB в котром сперва логин, через пробел ФИО пользователя.
Вся связка на одно сервере работает нормально. Все отображает
Через год установаливаю новый сервер. Переношу на него конфиги со старого и имею проблему: в статистике где обший список пользователей - указаны логины пользователей, а не расшифоровк. Если войти в детальную статистику - то там показывается ФИО.
Как сделать что бы и в общем списке было расшифровка ФИО ?

Заранее всем спасибо

MooSE 2008-11-26 12:55:17 (#)

А вдумчивое чтение конфига ничего не подсказало?

дария 2008-12-24 17:26:08 (#)

Добрый день, граждане.
Помогите, пожалуйста.
настроила сарг (2.2.51), прописала в crontab запуск скриптов hourly и daily
небольшой скриптик запихнутый в cron.hourly
что тут не так? (дело в том что он генерит отчеты каждый час, тут вопросов нет, но он эти данные плюсует с предыдущими, т.е.
в 8 утра 100 метров потрачено
в 9 утра 200 метров потрачено
в 10 утра 300 метров потрачено), то есть он доплюсовывает новый результат к прошлому (((
подскажите если знаете в чем косяк?!

сам скрипт для почасового:

#!/bin/bash

today=$(date +%d/%m/%Y)

# Get yesterday's date

hour=$(date --date "1 hour ago" +%d/%m/%Y)

exec /usr/bin/sarg \
-o /var/www/sarg/hourly \
-d $hour - $today &>/dev/null

/var/log/squid -k rotate
exit 0

для по часового он добавляет предыдущий результат, а для результатов дневного скрипта он не добавляет предыдущие данные.
Мне надо, чтобы он генерил отчеты за каждый час не доплюсовывая прошлых результатов

MooSE 2008-12-25 09:27:25 (#)

1. Плюсовать он не умеет впринципе:)

2. Скрипт написан в корне не верно. Ибо:

2.1 /var/log/squid это папка, для ротации надо вызывать /usr/bin/squid или /usr/sbin/squid

2.2. в $today и в $hour у тебя реально получается одно и тоже значение (за исключением промежутка времени с полуночи до часа). sarg не умеет генерировать репорты по часам. только по суткам.

дария 2008-12-25 09:33:29 (#)

спасибо за помощь.
"sarg не умеет генерировать репорты по часам. только по суткам." - и это ни как не изменить ? (даже с помощью каких либо скриптов?)
насчет ротации поняла, спасибо, согласна.

MooSE 2008-12-25 16:42:53 (#)

Никак. А тебе нужно? Там в самих репортах уже кнопочка есть чтобы посмотреть отдельно по каждому пользователю его активность по времени. Этого не хватит?

дария 2008-12-26 15:34:28 (#)

разобралась. сделать это можно по часам, но тогда не получится по дням ) (хотя можно и скриптом еще 1 это решить).
просто изначально была задача выдавать трафик за каждый час сколько потратили и куда каждый юзер лазил, и как отчет было бы удобнее чтобы это было в разных репортах.
но так же было необходимость смотреть активность и за день. спасибо за помощь, дальше уже разобралась и разгребусь )

MooSE 2008-12-28 17:27:35 (#)

Кстати посмотри ещё в сторону srg. Практически полный аналог sarg, но ещё использует php и потому там репорты чуть подробнее и красивше. Может он тебя устроит?

дария 2008-12-29 08:57:23 (#)

посмотреола, он реально симпатишнее, спасибо ))))

MooSE 2008-12-30 09:31:13 (#)

Ну и гуд:)

pavlo 2009-03-05 23:17:57 (#)

у меня нет файла index.html в squid-reports
ls /var/www/squid-reports/
итого 12
drwxr-xr-x 7 root root 4096 Мар 5 22:38 2009Mar04-2009Mar04
drwxr-xr-x 7 root root 4096 Мар 5 23:05 2009Mar05-2009Mar05
drwxr-xr-x 2 root root 4096 Мар 5 08:48 images
-rw-r--r-- 1 root root 0 Мар 5 23:05 index.unsort

MooSE 2009-03-06 09:01:25 (#)

А вот это что за файл: index.unsort?

Это вроде как временный файл, который создаёт sarg. Похоже что по какой-то причине он у тебя не отработал корректно и упал.

pavlo 2009-03-07 00:25:41 (#)

я компилировал из исходного, работает нормально.
спс за пост.

Anonymous 2009-10-13 19:57:13 (#)

Уважаемый автор, чем собственно Вам не подошел: office:/etc/squid# sarg-reports --help
SARG - Daily / Weekly / Monthly - Squid proxy usage reports creation tool
Written by Ugo Viti <ugo.viti@initzero.it>
Version: 20050202

Usage: /usr/sbin/sarg-reports [OPTIONS]

Allowed options:
manual, Create Manual report
today, Create Today report
daily, Create Daily report
weekly, Create Weekly report
monthly, Create Monthly report
office:/etc/squid#
??? (три знака вопроса говорят о том, что мне очень интересно)
Который между прочим сам добавляется в крон /etc/cron.* и все работает без Ваших чудо-скриптов.

MooSE 2009-10-14 11:42:04 (#)

тем что он есть только в Debian based дистрибутивах. А в искаробочном sarg его нет.

Anonymous 2009-10-17 23:31:06 (#)

aptitude download отменили?
И вообще можно скачать из репозитория.... поменять пути и все. Не такли?? это же скрипт на баше.
M.W.

MooSE 2009-10-18 00:47:10 (#)

можно. но чем выдирать чужие скрипты из чужих пакетов - куда полезнее написать свои:)

Anonymous 2009-10-22 16:00:28 (#)

Уважаемый, Вы считаете пустую трату времени полезной?
У Вас хобби велосипеды придумывать?
M.W.

MooSE 2009-10-22 23:15:58 (#)

Я не считаю это пустой тратой времени. Пустой тратой времени я считаю написание идиотских комментариев к чужой работе.

Как минимум я получил полезный опыт от написания этих скриптов.
Новый комментарий

Жирный текстКурсивный текстПодчёркнутый текстЗачёркнутый текстПрограммный кодСсылкаИзображение




© 2006-2024 Вадим Калинников aka MooSE
Политика конфиденциальности