SARG – Squid Analysis Report Generator. Как видно из названия умеет работать с логом proxy сервера Squid. В результате работы мы получим много-много сгенерированных html страничек с отчетами кто и в какое время тратил трафик интернет. Для удобства работы с программой на сервере желательно наличие http сервера, например apache, чтобы странички отчетов можно было просматривать удаленно. Для новичков можно посоветовать после создания отчета запаковать его в архив и уже переносить архивом на любой компьютер сети для просмотра, т.к. в больших отчетах иногда бывает до несколько тысяч мелких html файлов.
Если сравнивать SARG с ее конкурентом lightsquid, то основные преимущества SARG
1. Умеет считать статистику только по заданному пользователю (пользователям).
2. Гибко работает с датами для создания отчетов. Поясню – может сделать отчет только по заданному пользователю с заданной даты по требуемую.
3. Не обязательно наличие сервера http.
Недостатки SARG если сравнивать опять же с lightsquid
1. Долго создаются отчеты.
2. Отчеты занимают много места и состоят из большого числа мелких html файлов.
3. Не умеет объединять пользователей в группы и вести статистику по группам.
Про установку программы писать не буду, она простая и тривиальная. Исходные тексты программы можно всегда получить на сайте SARG.
Конфигурирование SARG
В принципе конфиг достаточно подробно откомментирован. В основном все опции в конфиге по умолчанию и мудрить с ними не надо. В своем конфиге я придерживался сортировки клиентов по трафику (можно по времени проведенному в интернете, количеству запросов), ну и хотелось чтобы SARG строил графики и отображал странички в правильной кодировке 🙂 Вот мой конфиг.
#язык отчетов
language Russian_koi8
#путь до логов squid
access_log /usr/local/squid/var/logs/access.log
#будем строить графики в отчетах
graphs yes
graph_days_bytes_bar_color orange
#путь до шрифта для графиков. По умолчанию шрифт DejaVuSans.ttf
#отображал все русские буквы неправильно, поэтому подобрал Verdana.TTF
graph_font /usr/local/sarg2/fonts/Verdana.TTF
#заголовок отчетов
title "Squid User GW Access Reports"
#временная директория при создании отчетов
temporary_dir /tmp
#куда по умолчанию выгружаем отчеты.
#рекомендую выгружать сразу в папку директорию http сервера
output_dir /usr/local/sarg2/reports
#формат даты европейский dd/mm/YY
date_format e
#выводим TOP сайтов в сортировке по трафику
topsites_sort_order BYTES D
#если с начала лога access.log squid прошло меньше 8 часов то отчет не составляем
#если надо сразу же проверить работу отчетов как создали новый access.log то переменную
# max_elapsed поставьте в 0
max_elapsed 28800000
#в отчетах выводим короткие URL
long_url no
#кодировка отчета
charset Koi8-r
#для примера показал, как не учитывать строки в access.log в которых
#встречается сочетания символов 127.0.0.1 и domain.ru
exclude_string "127.0.0.1:domain.ru"
#отображаем отчет в байтах. Я считаю это одной из важных переменных в конфиге, т.к. если эту
#строку не раскомментировать, то округление в Kb, Mb и Gb даст очень большую погрешность
#в б0льшую сторону расходования трафика
displayed_values bytes
Для первого пробного отчета достаточно запустить бинарник sarg безо всяких параметров. В директории отчетов должен появиться ваш первый отчет за весь период, который содержится в файле access.log
Настройка периодичности отчетов
Поскольку отчеты делаются достаточно долго (но это все зависит от размера access.log) я рекомендую делать ежедневные и ежемесячные запуски создания отчетов, а при необходимости можно и недельные еще делать.
Создадим 3 папки в нашей директории для отчетов (на самом деле сколько создавать папок решать вам)
#cd /usr/local/sarg2/reports
#mkdir daily
#mkdir weekly
#mkdir monthly
Напишим 3 скрипта каждый скрипт будет соответствовать своему времени запуску.
sarg-daily
#!/bin/sh
TODAY=`date +%d/%m/%Y`
YESTERDAY=`date -d '-1 day' +%d/%m/%Y`
#если у вас FreeBSD то формат переменной YESTERDAY=`date -v-1d +%d/%m/%Y`
/usr/bin/sarg -f /usr/local/sarg2/sarg.conf -o /usr/local/sarg2/reports/daily -d $YESTERDAY-$TODAY
sarg-weekly
#!/bin/sh
TODAY=`date +%d/%m/%Y`
YESTERDAY=`date -d '-1 week' +%d/%m/%Y`
#если у вас FreeBSD то формат переменной YESTERDAY=`date -v-1w +%d/%m/%Y`
/usr/bin/sarg -f /usr/local/sarg2/sarg.conf -o /usr/local/sarg2/reports/weekly -d $YESTERDAY-$TODAY
sarg-monthly
#!/bin/sh
TODAY=`date +%d/%m/%Y`
YESTERDAY=`date -d '-1 month' +%d/%m/%Y`
#если у вас FreeBSD то формат переменной YESTERDAY=`date -v-1m +%d/%m/%Y`
/usr/bin/sarg -f /usr/local/sarg2/sarg.conf -o /usr/local/sarg2/reports/monthly -d $YESTERDAY-$TODAY
Таким образом в этих скриптах через параметры мы задаем sarg-у в какие директории складывать отчеты и за какой период их проводить. Естественно учтите, если у вас происходит ротация лога access.log раз в неделю, то месячный отчет при всем желании вы из лога не получите 🙂 А недельный надо будет запускать как раз перед ротацией.
Делаем эти скрипты исполняемыми
#chmod +x ./имя_скрипта
Теперь добавляем выполнение скриптов в crontab и желательно разнести их по времени, чтобы скрипты sarg-weekly и sarg-monthly не наложились с sarg-daily. Иначе возможны сбои в отчетах.
Вот мой crontab
30 3 * * * root /usr/local/sarg/sarg-daily > /dev/null
3 6 * * 6 root /usr/local/sarg/sarg-weekly > /dev/null
3 0 1 * * root /usr/local/sarg/sarg-monthly > /dev/null
Теперь можно всегда будет решить вопрос куда исчезал квота интернет.
Чтобы статистика была более понятной можно провести соотношение ip-ФИО пользователя или логин-ФИО. Это задается в переменной usertab, которая ссылается на файл в котором будут описаны соотношения ip(логинов) – ФИО.
Детальные отчеты SARG по разбору полетов
У меня достаточно часто просят показать статистику не за день или месяц, а с указанием с какого по какое число и только по 1 пользователю. На этот случай у меня рядом с основным конфигом sarg.conf лежит похожий конфиг sarg-user.conf.
Отличается он только одной добавленной строкой
include_users 192.168.0.x
В этой строке я задаю пользователя(лей) по которым я хочу составить отчет, а потом запускаю скрипт очень похожий на вышеприведенный, но с указанием дат. Обратите внимание что в скрипте я уже выбираю sarg-user.conf и задаю какой-нибудь временный каталог для отчетов.
#!/bin/sh
TODAY="27/08/2010"
YESTERDAY="08/08/2010"
/usr/bin/sarg -f /usr/local/sarg2/sarg-user.conf -o /tmp/reports -d $YESTERDAY-$TODAY
Вот такие маленькие хитрости.
Мое заключение такое: в повседневной жизни использовать lightsquid, а для разбора полетов нужно применять SARG.