Привет %username%,
Сегодня я хотел бы рассказать про достаточно тривиальную задачу сбора логов с децентрализованных Squid proxy серверов и подводные камни с которыми мы столкнулись.
Что имеем:
- Squid-hq
- Squid-br1
- Squid-br2
- Squid-br3
- Squid-br4
- Squid-db
Как видно из списка, в наличии 5 серверов squid proxy в разных удаленых офисах, и 1 база данных для сбора логов. Все OS CentOS 7.3, squid proxy от 3.3.8 до 3.5.26, Squid-db — с установленной mariadb 5.6
Из того что удалось найти это перловые скрипты и схема, собственно их и берем за основу:
- Ставим зависимости на сервера squid proxy:
yum install perl perl-Readonly* perl-URI perl-YAML perl-DBI perl-Carp perl-DBD-mysql
- После чего раскладываем по местам скрипты и конфиг для подключения к базе:
cp log_mysql_daemon.pl /usr/libexec/squid/log_mysql_daemon.pl
Даем права:
chmod +x /usr/libexec/squid/log_mysql_daemon.pl
chown squid:squid /usr/libexec/squid/log_mysql_daemon.pl - Далее создаем конфиг файл для подключения скрипта к базе:
vi /etc/squid/log_mysql_daemon.conf
host: "<database-ip>"
database: "squid_log"
table: "access_log"
user: "squid"
pass: "<squid-passwd>" - Создаем базу, импортируем схему и создаем юзера:
mysql -p
create database squid_log;
CREATE USER 'squid'@'%' IDENTIFIED BY '<squid-passwd>';
GRANT ALL PRIVILEGES ON squid_log.* TO 'squid'@'<Squid-hq-ip>';
GRANT ALL PRIVILEGES ON squid_log.* TO 'squid'@'<Squid-br1-ip>';
GRANT ALL PRIVILEGES ON squid_log.* TO 'squid'@'<Squid-br2-ip>';
GRANT ALL PRIVILEGES ON squid_log.* TO 'squid'@'<Squid-br3-ip>';
GRANT ALL PRIVILEGES ON squid_log.* TO 'squid'@'<Squid-br4-ip>';
exitcat log_mysql_daemon-table.sql log_mysql_daemon-views.sql | mysql -p squid_log
-
Переходим на сторону
злаsquid proxy конфигаДобавляем конфигурацию для демона
vi /etc/squid/squid.conf
acl dontLog http_status 403 407
logformat squid_mysql %ts.%03tu %6tr %>a %Ss %03Hs %<st %rm %ru %un %Sh %<A %mt squid-hq
access_log /var/log/squid/access.log squid
access_log daemon:/etc/squid/log_mysql_daemon.conf squid_mysql !dontLog
logfile_daemon /usr/libexec/squid/log_mysql_daemon.plРазбираем:
acl dontLog http_status 403 407 — опциональная строка, убирает ошибки из лога идущих в базу данных связаные с эрор кодами 403, 407. База будет расти в геометрической последовательности, а для репортинга не будет нести никакой ценностиlogformat squid_mysql %ts.%03tu %6tr %>a %Ss %03Hs %<st %rm %ru %un %Sh %<A %mt squid-hq — задаем формат логу, одно из важных условий для множественных squid серверов последнее значение с названием сервера с которого приходят логи. В оригинальных скриптах функционал отсутствует поэтому подкручиваем эту строку и сам скрипт следующим образом:
в /usr/libexec/squid/log_mysql_daemon.pl в настройку колонок добавляем squid-server
# fields that we should have in the database table
# this list depends on the log format configuration
my @required_fields = qw(
id
time_since_epoch
response_time
client_src_ip_addr
squid_request_status
http_status_code
reply_size
request_method
request_url
username
squid_hier_status
server_ip_addr
mime_type
squid_server
);access_log /var/log/squid/access.log squid — Оставляем локальные логи для отладок и случаев проблем с базой, у них включен ротейшен поэтому лишним не будет
access_log daemon:/etc/squid/log_mysql_daemon.conf squid_mysql !dontLog — собственно сама строка к конфигурации демона. Обратите внимание что !dontLog отменяет логирование 403,407 только для базы данных, так что в случае отладки можно легко использовать локальные логи
logfile_daemon /usr/libexec/squid/log_mysql_daemon.pl — путь к перловому демону
- Перечитываем конфиги squid proxy
squid reconfigure
squid -k reconfigureи получаем желаемый результат:
Доступные таблицы и вьюшки:
Заключение:
Как видно, данные теперь находятся централизованно в базе данных и легко доступны для обработки. Далее планиурем написать фронтэнд для фильтрации и экспорта данных (репортинга). В целом статья написана и собрана из разных источников, к сожалению нигде не смог найти все вместе, поэтому считаю целесообразым оставить это здесь.
Было ли бы вам интересно почитать продолжения цикла статей про Squid Proxy?
Автор: iRandom