こんにちは、ユーザー名、
今日は、分散型Squidプロキシサーバーからログを収集するというささいなタスクと、遭遇した落とし穴についてお話したいと思います。
私たちは何を持っています:
- イカ本部
- イカbr1
- イカbr2
- イカbr3
- イカbr4
- イカdb
リストからわかるように、異なるリモートオフィスに5つのsquidプロキシサーバーがあり、ログを収集するために1つのデータベースがあります。 すべてのOS CentOS 7.3、3.3.8から3.5.26のSquidプロキシ、Squid-db-mariadb 5.6がインストール済み
この大麦のスクリプトとスキームを見つけることができたという事実から、実際にそれらを基礎として取ります:
- squidプロキシサーバーに依存関係を配置します。
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>';
exit
cat log_mysql_daemon-table.sql log_mysql_daemon-views.sql | mysql -p squid_log
-
邪悪なイカのプロキシ設定に移動します
デーモンの構成を追加する
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-パールデーモンへのパス
- squidプロキシ設定の再読み込み
squid reconfigure
squid -k reconfigure
目的の結果を取得します。
利用可能なテーブルとビュー:
結論:
ご覧のとおり、データはデータベースの中央に配置され、処理のために簡単にアクセスできます。 次に、データのフィルタリングとエクスポート(レポート)のフロントエンドを作成する予定です。 一般に、この記事はさまざまなソースから作成および編集されていますが、残念ながらすべてをどこにも見つけることができなかったため、ここに残すことをお勧めします。
Squid Proxyの続編を読んで興味がありますか?