Squidプロキシの集中ログストレージ、またはデータベースでログをラップする方法

画像

こんにちは、ユーザー名、

今日は、分散型Squidプロキシサーバーからログを収集するというささいなタスクと、遭遇した落とし穴についてお話したいと思います。

私たちは何を持っています:

  1. イカ本部
  2. イカbr1
  3. イカbr2
  4. イカbr3
  5. イカbr4
  6. イカdb

リストからわかるように、異なるリモートオフィスに5つのsquidプロキシサーバーがあり、ログを収集するために1つのデータベースがあります。 すべてのOS CentOS 7.3、3.3.8から3.5.26のSquidプロキシ、Squid-db-mariadb 5.6がインストール済み

この大麦のスクリプトとスキームを見つけることができたという事実から、実際にそれらを基礎として取ります:

  1. squidプロキシサーバーに依存関係を配置します。
    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. 邪悪なイカのプロキシ設定に移動します

    デーモンの構成を追加する

    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サーバーの重要な条件の1つは最後の値ですログの取得元のサーバーの名前。 元のスクリプトには機能がないため、この行とスクリプト自体を次のようにひねります。

    /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デーモン:/etc/squid/log_mysql_daemon.conf squid_mysql!dontLog-実際にはデーモン構成への行自体。 !DontLogはデータベースの403,407 のみのログをキャンセルするため、デバッグの場合はローカルログを簡単に使用できます。

    logfile_daemon /usr/libexec/squid/log_mysql_daemon.pl-パールデーモンへのパス

  6. squidプロキシ設定の再読み込み

    squid reconfigure
    squid -k reconfigure


    目的の結果を取得します。
    画像

    利用可能なテーブルとビュー:
    画像

結論:


ご覧のとおり、データはデータベースの中央に配置され、処理のために簡単にアクセスできます。 次に、データのフィルタリングとエクスポート(レポート)のフロントエンドを作成する予定です。 一般に、この記事はさまざまなソースから作成および編集されていますが、残念ながらすべてをどこにも見つけることができなかったため、ここに残すことをお勧めします。

Squid Proxyの続編を読んで興味がありますか?

Source: https://habr.com/ru/post/J335204/


All Articles