Считаем Squid proxy трафик через SARG

SARGSARG – 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

Теперь можно всегда будет решить вопрос куда исчезал квота интернет.

Пример ежедневного отчета для 1 клиента

Детальная статистика по общему трафику за день

График по дням

Чтобы статистика была более понятной можно провести соотношение 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.

Запись опубликована в рубрике Proxy, Считаем трафик с метками , , , . Добавьте в закладки постоянную ссылку.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *