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の続編を読んで興味がありますか?



All Articles