Централизованное хранилище логов для Squid Proxy или как мы логи в базу заворачивали

в 16:05, , рубрики: db, perl, proxy, squid3, system administration, Администрирование баз данных, Настройка Linux, системное администрирование, хранение данных
image

Привет %username%,

Сегодня я хотел бы рассказать про достаточно тривиальную задачу сбора логов с децентрализованных Squid proxy серверов и подводные камни с которыми мы столкнулись.

Что имеем:

  1. Squid-hq
  2. Squid-br1
  3. Squid-br2
  4. Squid-br3
  5. Squid-br4
  6. Squid-db


Как видно из списка, в наличии 5 серверов squid proxy в разных удаленых офисах, и 1 база данных для сбора логов. Все OS CentOS 7.3, squid proxy от 3.3.8 до 3.5.26, Squid-db — с установленной mariadb 5.6

Из того что удалось найти это перловые скрипты и схема, собственно их и берем за основу:

  1. Ставим зависимости на сервера squid proxy:
    yum install perl perl-Readonly* perl-URI perl-YAML perl-DBI perl-Carp perl-DBD-mysql
  2. После чего раскладываем по местам скрипты и конфиг для подключения к базе:

    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

  3. Далее создаем конфиг файл для подключения скрипта к базе:

    vi /etc/squid/log_mysql_daemon.conf

    host: "<database-ip>"
    database: "squid_log"
    table: "access_log"
    user: "squid"
    pass: "<squid-passwd>"

  4. Создаем базу, импортируем схему и создаем юзера:

    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>';
    exit

    cat log_mysql_daemon-table.sql log_mysql_daemon-views.sql | mysql -p squid_log

  5. Переходим на сторону зла 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 — путь к перловому демону

  6. Перечитываем конфиги squid proxy

    squid reconfigure
    squid -k reconfigure

    и получаем желаемый результат:
    image

    Доступные таблицы и вьюшки:
    image

Заключение:

Как видно, данные теперь находятся централизованно в базе данных и легко доступны для обработки. Далее планиурем написать фронтэнд для фильтрации и экспорта данных (репортинга). В целом статья написана и собрана из разных источников, к сожалению нигде не смог найти все вместе, поэтому считаю целесообразым оставить это здесь.

Было ли бы вам интересно почитать продолжения цикла статей про Squid Proxy?

Автор: iRandom

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js