Задача состоит в регулярной обработке журналов доступа прокси-сервера Squid3, выборке данных по ряду критериев и подготовке её к публикации. Способов много, но я остановился на одном, который полностью удовлетворяет поставленной задаче. Это - SARG (Squid Analysis Report Generator - Генератор Аналитических Отчётов Squid).
Рекомендую посетить сайт разработчиков, посмотреть на простенький до убогости дизайн сайта, убедится в том, что проект практически остановился в развитии и осознать, что ждать чего-то более, чем просто парсера журналов и генератора отчётов не стоит - собственно, нам ничего белее и не нужно:
В дистрибутиве Squeeze готового пакета Sarg нет, потому будем собирать его сами, из исходных кодов, предоставленных разработчиками.
Устанавливаем утилиту, что соберет нам после компиляции из исходных кодов пакет, готовый для установки в систему:
# aptitude install checkinstall
Скачиваем пакет исходных кодов:
# cd /usr/src
# wget http://space.dl.sourceforge.net/project/sarg/sarg/sarg-2.3.1/sarg-2.3.1.tar.gz
# wget http://space.dl.sourceforge.net/project/sarg/sarg/sarg-2.3.1/sarg-2.3.1.tar.gz
Развёртываем его из архива:
# tar xvf ./sarg-2.3.1.tar.gz
# cd ./sarg-2.3.1
# cd ./sarg-2.3.1
Смотрим, не придумали ли разработчики чего нового, нет ли несовместимых с прежней конфигурацией ключей:
# ./configure --help
Формируем строку для компилятора, тестируем на совместимость и наличие всего, что нужно:
# ./configure --no-create --prefix=/usr --sysconfdir=/etc/sarg --mandir=/usr/share/doc/sarg --disable-sargphp --disable-fontdir --disable-imagedir
Конфигурируем:
# ./configure --prefix=/usr --sysconfdir=/etc/sarg --mandir=/usr/share/doc/sarg --disable-sargphp --disable-fontdir --disable-imagedir
Вывод конфигуратора "говорящий" и явно даёт понят, успешно ли прошла процедура.
Компилируем продукт:
# checkinstall -D --install=no --pkggroup=Sarg --pkgname=sarg-custom --pkgversion=2.3.1 --pkgrelease=1 --pkgsource=sarg.sourceforge.net --maintainer=name@example.net make install
На выходе утилиты получаем готовый пакет, уложенный в директории с исходными кодами, если не было иных указаний на путь сохранения.
Done. The new package has been saved to
/usr/src/sarg-2.3.1/sarg-custom_2.3.1-1_amd64.deb
You can install it in your system anytime using:
dpkg -i sarg-custom_2.3.1-1_amd64.deb
/usr/src/sarg-2.3.1/sarg-custom_2.3.1-1_amd64.deb
You can install it in your system anytime using:
dpkg -i sarg-custom_2.3.1-1_amd64.deb
Устанавливаем полученный пакет:
# dpkg -i ./sarg-custom_2.3.1-1_amd64.deb
Создадим конфигурационный файл, которым будет руководствоваться Sarg при работе:
# touch /etc/sarg/sarg.conf
# Отключаем подсистему генерирования графиков
#
graphs no
# Задаём заголовок для страницы индекса отчётов
#
title "Proxy User Access Reports"
# Явно указываем адрес директории хранения временных файлов
#
temporary_dir /tmp
# Указываем директорию, в которой будут размещены отчёты для последующего отображения
#
output_dir /var/www/stat.proxy.local
# Отключаем "обратный резольвинг" IP в символические имена
#
resolve_ip no
# Разрешаем использовать в отчёте IP адреса вместо идентификаторов пользователей, если таковые не обнаружены
#
user_ip yes
# Задаём принцип сортировки отчёта наиболее активных пользователей
# Allowed fields: USER CONNECT BYTES TIME
#
topuser_sort_field BYTES reverse
# Задаём принцип сортировки отчёта активности пользователей
# Allowed fields: SITE CONNECT BYTES TIME
#
user_sort_field BYTES reverse
# Укажем путь к файлу, содержащему имена пользователей, которых не нужно включать в отчёт
#
exclude_users /etc/sarg/exclude_users
# Укажем путь к файлу, содержащему адреса хостов и сетей, которые не нужно включать в отчёт
#
exclude_hosts /etc/sarg/exclude_hosts
# Выбираем формат даты отображаемой в отчётах
# e (European=dd/mm/yy), u (American=mm/dd/yy), w (Weekly=yy.ww)
#
date_format e
# Никак не ограничиваем Sarg в количестве отчётов (управлять ими будем с помощью внешнего скрипта)
# 0 - no limit.
#
lastlog 0
# Даём указание очищать временную директорию от рабочих файлов после завершения генерации
#
remove_temp_files yes
# Указываем создавать индексную страницу после завершения генерации отчётов
#
index yes
# Определяем тип генерируемого индекса
#
index_tree file
# Указываем перезаписывать отчёты, входящие в диапазон дат заданный для текущего, иначе говоря, следует перезаписывать отчёт, если таковой за указанный диапазон дат уже существует
#
overwrite_report yes
# Указываем подставлять вместо отсутствующего userdi IP пользователя
#
records_without_userid ip
# Указываем использовать запятую вместо десятичной точки
#
use_comma yes
# Выбираем тип сортировки для индекса отчётов: в обратном порядке
#
index_sort_order D
# Укажем путь к файлу, содержащему HTTP-коды; Sarg будет игнорировать в отчёте записи с этими кодами
#
exclude_codes /etc/sarg/exclude_codes
# Из всего богатства отчётов Sarg я выбираю только два: список пользователей и список ресурсов, ими посещённых
#
report_type topusers users_sites
# Отказываемся от вывода детального адреса посещаемых ресурсов, остановившись на обобщённой статистике по домену
#
long_url no
# При формировании и сортировке отчётов ориентируемся на полученные байты, а не на затраченное время
#
date_time_by bytes
# Указываем кодировку генерируемых отчётов
#
charset UTF-8
# Никак не ограничиваем доступ к результирующим отчётам
#
privacy no
# Показывать сообщение "Successful report generated on dir" по завершению генерации отчётов
#
show_successful_message yes
# Показывать детальную статистику по завершению генерации отчёта
#
show_read_statistics yes
# Определяемся со списком параметров, выводимых в отчёте сравнительной активности пользователей
#
topuser_fields NUM DATE_TIME USERID CONNECT BYTES %BYTES IN-CACHE-OUT USED_TIME %TIME TOTAL
# Определяемся со списком параметров, выводимых в отчёте индивидуальной активности
#
user_report_fields CONNECT BYTES %BYTES IN-CACHE-OUT USED_TIME %TIME TOTAL
# Не ограничиваем Sarg в количестве пользователей в отчёте сравнительной активности
#
topuser_num 0
# Не ограничиваем Sarg в днях недели, во время которых нужно генерировать отчёты
#
weekdays 0-6
# Не ограничиваем Sarg во времени суток, для которого нужно генерировать отчёты
#
hours 0-23
# Указываем не выводить ссылку на сайт автора в каждом отчёте
#
show_sarg_info no
# Указываем не выводить эмблему Sarg в каждом отчёте
#
show_sarg_logo no
# Указываем выводить отображаемые данные в округлённом и человеко-понятном виде
#
displayed_values abbreviation
# Указываем путь к подключаемому CSS-файлу, правила которого будут применены при отображении отчётов
#
external_css_file /default.css
# Указываем максимальное число открываемых Sarg файлов
#
ulimit 60000
# Отключаем совместимость с журналами доступа старой версии Squid
#
squid24 off
#
graphs no
# Задаём заголовок для страницы индекса отчётов
#
title "Proxy User Access Reports"
# Явно указываем адрес директории хранения временных файлов
#
temporary_dir /tmp
# Указываем директорию, в которой будут размещены отчёты для последующего отображения
#
output_dir /var/www/stat.proxy.local
# Отключаем "обратный резольвинг" IP в символические имена
#
resolve_ip no
# Разрешаем использовать в отчёте IP адреса вместо идентификаторов пользователей, если таковые не обнаружены
#
user_ip yes
# Задаём принцип сортировки отчёта наиболее активных пользователей
# Allowed fields: USER CONNECT BYTES TIME
#
topuser_sort_field BYTES reverse
# Задаём принцип сортировки отчёта активности пользователей
# Allowed fields: SITE CONNECT BYTES TIME
#
user_sort_field BYTES reverse
# Укажем путь к файлу, содержащему имена пользователей, которых не нужно включать в отчёт
#
exclude_users /etc/sarg/exclude_users
# Укажем путь к файлу, содержащему адреса хостов и сетей, которые не нужно включать в отчёт
#
exclude_hosts /etc/sarg/exclude_hosts
# Выбираем формат даты отображаемой в отчётах
# e (European=dd/mm/yy), u (American=mm/dd/yy), w (Weekly=yy.ww)
#
date_format e
# Никак не ограничиваем Sarg в количестве отчётов (управлять ими будем с помощью внешнего скрипта)
# 0 - no limit.
#
lastlog 0
# Даём указание очищать временную директорию от рабочих файлов после завершения генерации
#
remove_temp_files yes
# Указываем создавать индексную страницу после завершения генерации отчётов
#
index yes
# Определяем тип генерируемого индекса
#
index_tree file
# Указываем перезаписывать отчёты, входящие в диапазон дат заданный для текущего, иначе говоря, следует перезаписывать отчёт, если таковой за указанный диапазон дат уже существует
#
overwrite_report yes
# Указываем подставлять вместо отсутствующего userdi IP пользователя
#
records_without_userid ip
# Указываем использовать запятую вместо десятичной точки
#
use_comma yes
# Выбираем тип сортировки для индекса отчётов: в обратном порядке
#
index_sort_order D
# Укажем путь к файлу, содержащему HTTP-коды; Sarg будет игнорировать в отчёте записи с этими кодами
#
exclude_codes /etc/sarg/exclude_codes
# Из всего богатства отчётов Sarg я выбираю только два: список пользователей и список ресурсов, ими посещённых
#
report_type topusers users_sites
# Отказываемся от вывода детального адреса посещаемых ресурсов, остановившись на обобщённой статистике по домену
#
long_url no
# При формировании и сортировке отчётов ориентируемся на полученные байты, а не на затраченное время
#
date_time_by bytes
# Указываем кодировку генерируемых отчётов
#
charset UTF-8
# Никак не ограничиваем доступ к результирующим отчётам
#
privacy no
# Показывать сообщение "Successful report generated on dir" по завершению генерации отчётов
#
show_successful_message yes
# Показывать детальную статистику по завершению генерации отчёта
#
show_read_statistics yes
# Определяемся со списком параметров, выводимых в отчёте сравнительной активности пользователей
#
topuser_fields NUM DATE_TIME USERID CONNECT BYTES %BYTES IN-CACHE-OUT USED_TIME %TIME TOTAL
# Определяемся со списком параметров, выводимых в отчёте индивидуальной активности
#
user_report_fields CONNECT BYTES %BYTES IN-CACHE-OUT USED_TIME %TIME TOTAL
# Не ограничиваем Sarg в количестве пользователей в отчёте сравнительной активности
#
topuser_num 0
# Не ограничиваем Sarg в днях недели, во время которых нужно генерировать отчёты
#
weekdays 0-6
# Не ограничиваем Sarg во времени суток, для которого нужно генерировать отчёты
#
hours 0-23
# Указываем не выводить ссылку на сайт автора в каждом отчёте
#
show_sarg_info no
# Указываем не выводить эмблему Sarg в каждом отчёте
#
show_sarg_logo no
# Указываем выводить отображаемые данные в округлённом и человеко-понятном виде
#
displayed_values abbreviation
# Указываем путь к подключаемому CSS-файлу, правила которого будут применены при отображении отчётов
#
external_css_file /default.css
# Указываем максимальное число открываемых Sarg файлов
#
ulimit 60000
# Отключаем совместимость с журналами доступа старой версии Squid
#
squid24 off
Создаём директорию, в которой будут размещаться публикуемые отчёты:
# mkdir -p /var/www/stat.proxy.local/
Создаём служебные файлы:
# touch /etc/sarg/exclude_users
# touch /etc/sarg/exclude_hosts
# touch /etc/sarg/exclude_codes
# touch /etc/sarg/exclude_hosts
# touch /etc/sarg/exclude_codes
Вносим в файл "exclude_codes" соответствующие коды, строки с которыми Sarg не будет отрабатывать:
TCP_REFRESH_FAIL/200
NONE/400
NONE/411
NONE/417
TCP_MISS/000
TCP_HIT/000
TCP_CLIENT_REFRESH_MISS/000
TCP_DENIED/403
TCP_MISS/503
TCP_MISS/504
NONE/400
NONE/411
NONE/417
TCP_MISS/000
TCP_HIT/000
TCP_CLIENT_REFRESH_MISS/000
TCP_DENIED/403
TCP_MISS/503
TCP_MISS/504
Копируем CSS-файл из дистрибутивного набора в директорию публикации:
# cp /etc/sarg/css.tpl /var/www/stat.proxy.local/default.css
Удаляем лишние скрипты и конфигурационные файлы:
# mv -f /etc/sarg/user_limit_block
Создаём директорию для журналов Sarg:
# mkdir -p /var/log/sarg
Теперь можно попробовать сгенерировать первый отчёт:
# sarg -f /etc/sarg/sarg.conf -l /var/log/squid3/access-ordinary.log -x
SARG: Init
SARG: Loading configuration from /etc/sarg/sarg.conf
SARG: Parameters:
SARG: Hostname or IP address (-a) =
SARG: Useragent log (-b) =
SARG: Exclude file (-c) =
SARG: Date from-until (-d) =
SARG: Email address to send reports (-e) =
SARG: Config file (-f) = /etc/sarg/sarg.conf
SARG: Date format (-g) = Europe (dd/mm/yyyy)
SARG: IP report (-i) = No
SARG: Input log (-l) = /var/log/squid3/access-ordinary.log
SARG: Resolve IP Address (-n) = No
SARG: Output dir (-o) = /var/www/stat.proxy.local/
SARG: Use Ip Address instead of userid (-p) = Yes
SARG: Accessed site (-s) =
SARG: Time (-t) =
SARG: User (-u) =
SARG: Temporary dir (-w) = /tmp/sarg
SARG: Debug messages (-x) = Yes
SARG: Process messages (-z) = No
SARG:
SARG: sarg version: 2.3.1 Sep-18-2010
SARG: Reading access log file: /var/log/squid3/access-ordinary.log
SARG: Records in file: 498146, reading: 100.00%
SARG: Records read: 498187, written: 498101, excluded: 86
SARG: Squid log format
SARG: Period: ....
SARG: pre-sorting files
SARG: Making file: /tmp/sarg/192_168_....
....
SARG: Sorting file: /tmp/sarg/192_168_....
SARG: Making report: 192.168....
....
SARG: Making index.html
SARG: Successful report generated on /var/www/stat.proxy.local/....
SARG: Purging temporary file sarg-general
SARG: End
SARG: Loading configuration from /etc/sarg/sarg.conf
SARG: Parameters:
SARG: Hostname or IP address (-a) =
SARG: Useragent log (-b) =
SARG: Exclude file (-c) =
SARG: Date from-until (-d) =
SARG: Email address to send reports (-e) =
SARG: Config file (-f) = /etc/sarg/sarg.conf
SARG: Date format (-g) = Europe (dd/mm/yyyy)
SARG: IP report (-i) = No
SARG: Input log (-l) = /var/log/squid3/access-ordinary.log
SARG: Resolve IP Address (-n) = No
SARG: Output dir (-o) = /var/www/stat.proxy.local/
SARG: Use Ip Address instead of userid (-p) = Yes
SARG: Accessed site (-s) =
SARG: Time (-t) =
SARG: User (-u) =
SARG: Temporary dir (-w) = /tmp/sarg
SARG: Debug messages (-x) = Yes
SARG: Process messages (-z) = No
SARG:
SARG: sarg version: 2.3.1 Sep-18-2010
SARG: Reading access log file: /var/log/squid3/access-ordinary.log
SARG: Records in file: 498146, reading: 100.00%
SARG: Records read: 498187, written: 498101, excluded: 86
SARG: Squid log format
SARG: Period: ....
SARG: pre-sorting files
SARG: Making file: /tmp/sarg/192_168_....
....
SARG: Sorting file: /tmp/sarg/192_168_....
SARG: Making report: 192.168....
....
SARG: Making index.html
SARG: Successful report generated on /var/www/stat.proxy.local/....
SARG: Purging temporary file sarg-general
SARG: End
Как только настроим web-сервер, можно будет посмотреть на результат. Если применить такой CSS-файл, то можно получить отчёты следующего вида:
SARG: Proxy User Access Report.
SARG: Proxy Top Users Access Report.
9 октября 2012 в 12:11
9 октября 2012 в 17:08