Мы — долго запрягаем, быстро ездим, и сильно тормозим.
www.lissyara.su —> статьи —> FreeBSD —> программы —> SARG

SARG - анализатор логов SQUID

Автор: lissyara.


    SARG (Squid Analysis Report Generator - анализатор логов SQUID и генератор отчётов по ним) - малюсенькая программа (чуть больше 300кб) которая анализирует логи прокси сервера SQUID и выдаёт отчёт - кто, куда лазил, сколько соединений, сколько мегов скачано. Строит достаточно красивые графики - по часам суток, дням месяца и другие. Также выдаёт и побочную инфу - процент попадания в кэш (т.е. сколько squid отдал из своего локального кэша, а не из инета). Программа простая до безобразия, но очень функциональная. Траффик ей особо не посчитаешь - т.к. даже если у вас только инет через squid всё равно SARG считает вместе с инфой отданной из кэша - т.е. всегда будет врать в большую сторону. Статистику выдаёт в html-виде, т.е. для человеческого просмотра нужен установленный WWW-сервер на машине (можно просто вытаскивать её к себе на комп, но это тоже не для слабонервных занятие - несколько тысяч мелких файлов, мегов под 300 размером).
   Собираем как обычно - из портов:
/root/>cd /usr/ports/
/usr/ports/>make search name='sarg'

Port:   sarg-2.0.9
Path:   /usr/ports/www/sarg
Info:   Squid log analyzer and HTML report generator
Maint:  mt@primats.org.ua
B-deps: freetype2-2.1.10_1 gd-2.0.33_1,1 jpeg-6b_3 pkgconfig-0.17.2 png-1.2.8_2
R-deps: freetype2-2.1.10_1 gd-2.0.33_1,1 jpeg-6b_3 pkgconfig-0.17.2 png-1.2.8_2
WWW:    http://sarg.sourceforge.net/

   После сборки (подразумевается что апач у Вас уже стоит - т.к. настройки я привожу для отчётов в html и выкладываемых на локальной машине) радактируем его конфиг до такого состояния: /usr/local/etc/sarg/sarg.conf
language Russian_koi8
graphs yes
title "Squid User Access Reports"
temporary_dir /tmp
output_dir /usr/local/www/data/statistic/http_stat
max_elapsed 28800000
charset Koi8-r

- конечно же никто Вам не запрещает поизгаляться над стилем отображения всего этого хозяйства - конфиг снабжён очень подробными комментариями. Запускаем командой
/usr/local/bin/sarg -l /путь_к_логам_сквида/squid.log

У меня логи cron`ом убираются в отдельные файлы - по месяцам, поэтому при запуске этой команды из скрипта путь подставляется автоматом. На слабых машинах работать будет относительно долго (минуты 4 лохматит месячные логи на 300 мегабайт, машина - P-IV 2GHz, причём много времени уходит на запись самих логов - генерится очень много мелких файлов)
   Вот и всё :) Пользуйтесь.



размещено: 2005-09-20,
последнее обновление: 2005-09-20,
автор: lissyara


Romik, 2005-11-28 в 13:30:21

Еще бы подробнее рассказал о том, как логи cron убирает, цены бы не было =)

lissyara, 2005-11-28 в 14:16:59

Нашёл проблему, прям :)))

#!/bin/sh
#
#
#
current_year=`date '+%Y'`
current_month=`date '+%m'`
current_date=`date '+%d'`
## Sozdayem direktoiyu pod logi
log_dir="/var/old_log/${current_year}/${current_month}"
mkdir -p ${log_dir} 2>/dev/null

## ubiraem logi SQUID
cat /var/log/squid/access.log > /tmp/log.tmp
cat /dev/null > /var/log/squid/access.log
cat /tmp/log.tmp >> ${log_dir}/squid.log


ну и в crontab это хозяйство, раз в 10 минут, скажем.

ALex_hha, 2005-12-28 в 12:02:22

вот скрипты для sarg с линуха

# cat /etc/cron.daily/sarg
#!/bin/bash
exec /usr/bin/sarg \
         -o /var/www/sarg/daily \
         -d "$(date --date "1 day ago" +%d/%m/%Y)"  > /dev/null 2>&1

exit 0

# cat /etc/cron.weekly/sarg
#!/bin/bash
LOG_FILES=
if [[ -s /var/log/squid/access.log.1.gz ]]; then
   LOG_FILES="$LOG_FILES -l /var/log/squid/access.log.1.gz"
fi
if [[ -s /var/log/squid/access.log ]]; then
   LOG_FILES="$LOG_FILES -l /var/log/squid/access.log"
fi

# Get yesterday's date
YESTERDAY=$(date --date "1 days ago" +%d/%m/%Y)

# Get one week ago date
WEEKAGO=$(date --date "7 days ago" +%d/%m/%Y)

exec /usr/bin/sarg \
       $LOG_FILES \
       -o /var/www/sarg/weekly \
       -d $WEEKAGO-$YESTERDAY > /dev/null 2>&1

exit 0

# cat /etc/cron.monthly/sarg
#!/bin/bash
LOG_FILES=
if [[ -s /var/log/squid/access.log.4.gz ]]; then
   LOG_FILES="$LOG_FILES -l /var/log/squid/access.log.4.gz"
fi
if [[ -s /var/log/squid/access.log.3.gz ]]; then
   LOG_FILES="$LOG_FILES -l /var/log/squid/access.log.3.gz"
fi
if [[ -s /var/log/squid/access.log.2.gz ]]; then
   LOG_FILES="$LOG_FILES -l /var/log/squid/access.log.2.gz"
fi
if [[ -s /var/log/squid/access.log.1.gz ]]; then
   LOG_FILES="$LOG_FILES -l /var/log/squid/access.log.1.gz"
fi
if [[ -s /var/log/squid/access.log ]]; then
   LOG_FILES="$LOG_FILES -l /var/log/squid/access.log"
fi


# Get yesterday's date
YESTERDAY=$(date --date "1 day ago" +%d/%m/%Y)

# Get 1 month ago date
MONTHAGO=$(date --date "1 month ago" +%d/%m/%Y)

exec /usr/bin/sarg \
       $LOG_FILES \
       -o /var/www/sarg/monthly \
       -d $MONTHAGO-$YESTERDAY  > /dev/null 2>&1

exit 0

Думаю понятно, что daily, weekly, monthly будут выполняться каждый день, раз в неделю и раз в месяц соответственно.

Единственное что, для freebsd надо поменять пути к access.log и sarg.

lissyara, 2006-01-12 в 19:17:07

Ага, а ещё неплохо бы было на shell писать - bash в FreeBSD по-дефолту отсутствует.
Вообще стандарт - shell, остальное - от лукавого.

Владимир, 2006-05-12 в 12:06:04

А во FreeBSD как сделать, чтобы bash работал?

Dilmas, 2006-05-28 в 12:11:40

Я насчёт
"несколько тысяч мелких файлов, мегов под 300 размером)." - это можно исправить, если в файле sarg.conf добавить строчку
"overwrite_report yes"
и файли будут переписываться "друг на друга", тум самым можно реально уменьшить размер генерируемых отчетов.

BAV_Lug, 2006-06-02 в 14:54:43

У меня запускается SARG два раз в день (С перезаписью отчетов). Когда мне надоело удалять вручную отчеты которые он создает, я написал вот такой простенький скриптик

#!/bin/sh

TodayDate='01'`date '+%b%Y'`-`date '+%d%b%Y'`
rm -R /var/www/html/squid-reports/${TodayDate}

и засунул его в cron
Теперь у меня только актуальные на сегодняшний день данные.
Да, вот еще, первого числа каждого месяца, я запускаю ротацию логов squid-а. Sarg запускается последний раз в месяц уже после запуска приведенного выше скрипта. Как следствие у меня остаются отчеты за предыдущий месяц.

BAV_Lug, 2006-06-02 в 14:59:54

Совсем забыл. У приведенного мною скрипта есть один бок. Если, в первый день месяца (например было воскресенье), никто не лазил в инет, то SARG генерит отчет с того дня как была первая запись в логе сквида :( Как с этим боротся (кроме как правкой начальной даты в скрипте) я еще не придумал.

chinga, 2006-09-19 в 9:01:49

Насчет "...траффик ею особо не посчитаешь...": считать можно, надо просто вычесть  
из результата процент попадания в кеш. А прога кульная, особенно для тех, кто сам не хочет писать скрипты для обработки логов.

tormozok, 2007-03-12 в 10:10:32

написал скриптик, чтобы отчеты разбивались по месецам и при смене месяца проходила ротация логов squid
# cat sarg-a.sh
#!/bin/sh
monday=$(date -v-0m +%m)
fname=/usr/local/etc/sarg-a.cash
if [ -f $fname ]
   then
#----------читаем содержимое файла--------
       exec < $fname
       while read ldate
           do
               zmonday=$ldate
           done
#--------сравниваю сегодняшний месяц с месяцем в файле
       if [  $monday -ne $zmonday ]
           then
#               echo 'Даты не совпадают'
#-------------делаем последний отче за прошлый месяц-------
               ddate=$(date -v-1m  +01/%m/%Y)-$(date -v1d -v-0m  -v-1d  +%d/%m/                                              %Y)
               /usr/local/bin/sarg -l /usr/local/squid/logs/access.log -d sarg                                               -d $ddate
                /usr/local/sbin/squid -k rotate
               echo $monday > $fname

           else
               ddate=$(date  +01/%m/%Y)-$(date -v1d -v+1m  -v-1d  +%d/%m/%Y)
               /usr/local/bin/sarg -l /usr/local/squid/logs/access.log -d sarg                                               -d $ddate
#               echo 'Даты  совпадают'
       fi

   else
#--------если файла нет то создадим
       echo $monday > $fname
#       echo "Файл создан"
fi

KaMa-CyTpA, 2007-03-31 в 18:09:29

Настроил - красиво всё и шокоЛАДНО.
Только одна проблема - меня интересуют только домены 2 уровня
images.ucomic.com
poncho.ucomic.com

Они по разным строчкам. А объединять домены никак нельзя?

KsI, 2007-08-22 в 12:55:21

а я тоже писал статью на тему.
Чуть по подробнее, чем у Вас сделал.
лежит здесь.
Если интересно, разместите у себя.
http://ksimute.by.ru/squid-sarg.shtml

ewgen, 2007-10-15 в 14:35:01

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

ewgen, 2007-10-15 в 14:36:50

мелочь конечно все равно а неприятно :)

ewgen, 2007-10-15 в 14:36:58

мелочь конечно все равно а неприятно :)

ewgen, 2007-10-15 в 14:37:33

мелочь конечно все равно а неприятно :)

ewgen, 2007-10-15 в 14:37:40

мелочь конечно все равно а неприятно :)

storm, 2007-11-16 в 4:42:03

давно есть прога лучше - LightSquid

drurus, 2007-12-12 в 3:01:43

to storm
благодарю за наводку, а то так бы и мучался с корой и вебалайзером :)

drurus, 2007-12-12 в 3:25:22

/usr/ports/www/free-sa

List, 2007-12-20 в 16:27:16

Да, сколько мона воровать статьи с других сайтов, менять заголовки, переставлять запятые?

lissyara, 2007-12-20 в 16:31:27

Не балуюсь таким.
И вам не советую.

saper, 2008-01-28 в 0:50:40

Не хотите посмотреть российскую разработку, именуемую Free-SA? Должна быть раз в 7 быстрее SARG-а, ну и некоторые интересные функции там добавлены.

Страница проекта: http://free-sa.sourceforge.net

mak_v_, 2011-08-12 в 11:17:05

Вот обновился, теперь постоянно лезут опшипки
SARG: IP to name resolution (getnameinfo) on IP address 192.168.0.23 failed with error 4 - Non-recoverable failure in name resolution
Хотя все резолвиться
FreeBSD 8.2-RELEASE i386
sarg-2.3.1

pavel_l, 2011-08-24 в 11:13:52

тоже обновился до 2,3,1 и лезет ошибка эта.
добавил в resolv_ip no в sarg.conf до времени устранения бага.
Кстати в этой версии заметил появилась возможность интеграции в AD!

pavel_l, 2011-08-25 в 9:45:02

http://sourceforge.net/tracker/?func=detail&aid=3384496&group_id=68910&atid=522791

по этой ссылке в коментах решение

pavel_l, 2011-08-25 в 9:46:23

For reference I managed to get it compiled using the following steps:
svn co https://sarg.svn.sourceforge.net/svnroot/sarg/branches/v2.3
autoreconf (it produced no output - so I assumed it was fine)
cd /usr/ports/www/sarg
make extract
cd /usr/ports/www/sarg/work/sarg-2.3.1
I deleted everything in here and copied the files I checked out in its
place
I manually applied the diff from /usr/ports/www/sarg/files/Makefile.in to
what is the sarg-2.3.1 dir and then delete it (otherwise it tries to apply
it and fails)
cd /usr/ports/www/sarg/
make
make install

SergeySL, 2011-09-05 в 22:31:52

Выложил статью про интеграцию SARG и AD.



 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.0475 секунд
Из них PHP: 21%; SQL: 79%; Число SQL-запросов: 77 шт.
Исходный размер: 38331; Сжатая: 9756