SquidARM - Система сбора access-логов прокси сервера Squid с возможностями формирования отчётности

SquidARM - Squid proxy server access log collection system with reporting capabilitiesПри развёртывании разнообразных вариантов высоко-доступных конфигураций Squid может возникнуть задача централизованного сбора, хранения и обработки access-логов с нескольких прокси-серверов Squid. Для решения этой задачи может использоваться система SquidARM, которую мы хотим представить в данной статье.

Архитектура и системные требования

SquidARM - это система предназначенная для накопления и аналитики журналов посещений прокси серверов Squid (access-логов). Система может быть полезна в качестве инструмента для анализа посещаемости тех или иных веб-ресурсов и анализа пользовательской активности в сети Интернет. Архитектурно система состоит из коллектора логов прокси-сервера Squid, передаваемых по сети, процесса парсинга и записи логов в файлы и базу данных, а также веб-интерфейса для формирования отчётности.

SquidARM - это открытый свободнораспространяемый проект с исходными кодами, доступными на GitHub: p5-App-SquidArm - непосредственно коллектор и squidarm – веб-интерфейс. Проект был создан ещё в 2015 году и использовался для собственных нужд. Функционал скромен, но покрывает базовые потребности.

Минимальные требования для установки SquidARM:

1) Виртуальная машина с Linux, например, Debian 12

  • Процессор: 2 CPU
  • Память: 4 Гб
  • Сетевой интерфейс: 1
  • Диск: разделы на LVM, файловая система ext4
    • / - от 20 Гб
    • /var - 150 Гб (ёмкость зависит от объёма логов прокси за месяц)
    • swap - 8 Гб

2) Базовые настройки системы:

  • Сеть (IP-адрес, шлюз, DNS)
  • Имя сервера
  • Клиент точного времени (например, systemd-timesyncd)
  • Сервис sshd

 

Установка SquidARM

Рассмотрим установку из пакета, на примере Debian 12.

Создайте каталог для ключей репозитория, если не существует:

$ sudo mkdir /etc/apt/keyrings/

Загрузите публичный ключ, которым подписан репозиторий:

$ curl -sSfL https://squidarm.ru/squidarm.asc | sudo tee /etc/apt/keyrings/squidarm.asc

Добавьте репозиторий SquidARM:

$ echo "deb [signed-by=/etc/apt/keyrings/squidarm.asc] https://squidarm.ru/repo/ bookworm main" \
| sudo tee /etc/apt/sources.list.d/squidarm.list

Установка:

$ sudo apt update
$ sudo apt install squidarm

 

Настройка SquidARM

Конфигурационный файл расположен по пути /etc/squidarm/sarm.conf , по синтаксису напоминает squid.conf и по-умолчанию выглядит так:

port 8000
memcache_host 127.0.0.1
memcache_port 8080
#allowed 10.0.0.1
access_log /var/log/sarm/squid_access.log
db_driver sqlite
db_dir /var/lib/sarm
db_update_interval 5
ignore_denied true
log_level note
log_file /var/log/sarm/sarm.log
#debug_unixsocket /var/log/sarm/sarm_debug
tz Europe/Moscow
dist_dir /usr/share/squidarm-web
#usernames_source system

Пояснения по возможным параметрам конфигурации:

  • port 8000 – TCP-порт, на котором ожидается приём логов;
  • host x.x.x.x - можно явно задать IP-адрес, на котором запускается прослушиватель логов,
    если параметр host не указан, то прослушиватель запускается на всех IP-адресах сервера;
  • memcache_host 127.0.0.1 - адрес, на котором запускается прослушиватель процесса memcache;
  • memcache_port 8080 - порт прослушивателя memcache;
  • allowed 10.0.0.1 - Явно указывается IP-адрес прокси-сервера, с которого ожидается приём
    логов. По-умолчанию всё запрещено. Если прокси-серверов несколько, то каждый сервер
    прописывается директивой allowed в отдельной строке;
  • access_log /var/log/sarm/squid_access.log - путь к файлу для сохранения получаемых суммарных
    логов всех прокси-серверов;
  • db_driver , db_dir , db_update_interval - параметры СУБД, не требуют изменения;
  • ignore_denied true - в СУБД не сохраняются логи о запрещённых попытках загрузки с прокси (например, коды ответов 407), которые бесполезны для статистики, но могут занимать
    существенный объём;
  • log_level , log_file - параметры журнала службы SquidARM;
  • debug_unixsocket /var/log/sarm/sarm_debug - параметры сокета для отладки работы процессов SquidARM. По умолчанию закомментирован, так как может замедлять работу сервиса. Не рекомендуется включать в продуктиве;
  • tz Europe/Moscow - временная зона, в которой работают прокси-сервера и их пользователи.
    Имя зоны должно быть каноническим. Корректность имени можно проверить по наличию файла в /usr/share/zoneinfo. Например, Asia/Yekaterinburg, Europe/Samara, Asia/Irkutsk;
  • dist_dir /usr/share/squidarm-web - каталог с веб-интерфейсом SquidARM;
  • usernames_source system - источник полных имён пользователей в отчётах. По умолчанию
    закомментирован, пользователи представлены именем учётной записи, с которой они
    авторизовались на прокси. Если авторизация на прокси не используется, в статистике будут отображаться IP-адреса. Если задан источник "system", то имена пользователей берутся через системный вызов getent passwd. Если сервер, на котором развёрнут squidarm, введён в AD домен это будет полное имя пользователя.

 

Настройка прокси-сервера Squid

Для отправки логов с прокси-сервера Squid, можно использовать штатную директиву в конфигурации squid.conf:

access_log tcp://10.X.X.X:8000 logformat=squid on-error=drop

где 10.X.X.X - это IP-адрес коллектора SquidARM

После внесения изменений в squid.conf перезапускается служба Squid:

# systemctl restart squid

 

Настройка веб-интерфейса SquidARM

По умолчанию веб-интерфейс запускается на loopback-интерфейсе (http://127.0.0.1:5000). Чтобы обеспечить доступ к веб-интерфейсу из сети, можно настроить фронтенд веб-сервер для проксирования доступа. Например, apache2

Установка apache2:

$ sudo apt install apache2

Минимальный вариант конфигурации сайта:

$ cat << 'EOF' | sudo tee /etc/apache2/sites-available/squidarm.conf
<VirtualHost _default_:80>
ProxyRequests off
ErrorLog ${APACHE_LOG_DIR}/sarm-error.log
CustomLog ${APACHE_LOG_DIR}/sarm-access.log combined
ProxyPass / http://127.0.0.1:5000/
ProxyPassReverse / http://127.0.0.1:5000/
</VirtualHost>
EOF

Включение модулей apache2 и веб-сайта:

$ sudo a2enmod proxy
$ sudo a2enmod proxy_http
$ sudo a2ensite squidarm

При необходимости можно добавить SSL, авторизацию или ограничения доступа по IP-адресу.

 

Запуск

Запуск сервиса сбора логов прокси:

$ sudo systemctl start squidarm

Запуск веб-интерфейса SquidARM:

$ sudo systemctl start squidarm_web

 

Сопровождение СУБД и журналов прокси

Передаваемые журналы прокси-сервера squid сохраняются в текстовом виде в каталоге /var/log/sarm в виде отдельных файлов. Необходимо периодически удалять старые логи, чтобы не исчерпать всё доступное пространство на диске. Например, создав задачу в cron (глубина 8 дней):

05 05 * * * root /usr/bin/find /var/log/sarm -name 'squid_access.log_*' -mtime +8 -type f -delete

В каталоге /var/lib/sarm файлы базы данных сегментируются помесячно. Также через cron
можно управлять глубиной хранения СУБД (например, 180 дней):

10 05 1 * * root /usr/bin/find /var/lib/sarm -name 'access_log_*' -mtime +180 -type f -delete

 

Веб-интерфейс SquidARM

В интерфейсе доступно три вида отчётов:

  • Трафик пользователей за месяц;
  • Трафик по дням;
  • Сайты за месяц

Трафик пользователей за месяц

На странице показана статистика по всем пользователям за текущий месяц, отсортированным по уменьшению трафика, начиная с лидеров. Можно выбрать произвольный месяц/год. В таблице доступен поиск по имени учётной записи или IP-адресу, можно менять сортировки столбцов. При клике на имени пользователя можно посмотреть его детальную статистику по посещённым сайтам за выбранный месяц.

SquidARM - Monthly User Traffic Report from Squid proxy server

 

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

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

SquidARM - Traffic report by day in proxy Squid

 

Сайты за месяц

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

SquidARM - Monthly Squid proxy Websites Report

 

Время загрузки отчётов

Иногда загрузка отчётов занимает существенное время (1-3 минуты). Определить то, что страница загружается, можно по вращающемуся индикатору загрузки в углу страницы:

SquidARM - Report loading time

 

Web API для отчётов

В SquidARM реализована возможность получения отчётов в машиночитаемом формате (json) через Web API.

Пример запроса к Web API с помощью утилиты curl:

curl -sSf http://squidarm.holding.com/api/users/2024/4.json

{"data":[["vasya001",0,123456,10,0],....]}

Возвращаемые данные представляют собой массив, состоящий из массивов со статистикой: пользователь/IP-адрес, байт из кэша, байт загружено, число запросов, число отказов (например, ошибка 407).

Для получения отчёта по трафику по всем пользователям за определённый месяц делается GET-запрос:

GET /api/users/2024/3.json

где 2024 - год, 3 – месяц.

Для получения отчёта по трафику по всем пользователям за определённый день:

GET /api/users/2024/3/21.json

где 2024 - год, 3 - месяц, 21 – день.

Для получения отчёта по трафику определённого пользователя за месяц:

GET /api/user/vasya001/2024/3.json

где vasya001 - имя пользователя, где 2024 - год, 3 – месяц.

Для получения отчёта по трафику пользователя за день:

GET /api/user/vasya001/2024/3/21.json

где vasya001 - имя пользователя, где 2024 - год, 3 - месяц, 21 –день.

Для получения отчёта по трафику по дням месяца:

GET /api/traf/2024/3.json

где 2024 - год, 3 – месяц.

Для получения отчёта по сайтам за месяц:

GET /api/sites/2024/3.json

где 2024 - год, 3 – месяц

С помощью возможностей Web API и собственных скриптовых наработок можно реализовать дополнительные варианты кастомизированной отчётности. Например, с помощью PowerShell скрипта можно быстро получить HTML отчёт об использовании Интернет-ресурсов за любой период времени по любому пользователю:

SquidARM - Generating a proxy report using Web API and PowerShell

Только один комментарий Комментировать

  1. JohnDoe /

    Хорошее

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