1

わかりました、これが私がやりたいことです。Web サーバー (openSuSE 11.1 を実行している) で squid プロキシをセットアップしており、新しいエントリが access.log に追加されるたびに、アクセス情報を MySQL データベースにダンプしたいと考えています。これを行うための最良のアプローチは何ですか?

現在、ファイルへの変更を 2 ~ 3 秒ごとにチェックするデーモンを作成することを考えていますが、それはあまり効率的な方法ではないと思います。他にどのような方法でこれを達成できますか?

4

4 に答える 4

2

iNotify も参照してください。

http://linux.die.net/man/7/inotify

http://www.infoq.com/articles/inotify-linux-file-system-event-monitoring

于 2011-07-08T06:29:54.873 に答える
1

squidをデータベースに直接ログインするか、(概念的には)ログファイルに対して「tail-f」を実行してレコードを挿入する(継続的に実行される)デーモンを使用することをお勧めします。

許容できるデータ損失の量によっては、永続的な方法で到達したファイルの「ポイント」(同じトランザクションで書き込むデータベース内の小さなテーブルなど)を覚えておくために、多くのトリックを実行する必要がある場合があります。 )など。これを正しく行うことは簡単ではありませんが、行うことはできます。

通常、これは非同期で実行する必要があります。これは、squidがファイルにレコードを作成する可能性が高いため、特にそれがoffilneの場合、mysqlがレコードを取得するよりも速くなります。

また、単一のレコードを挿入するのは比較的非効率的であるため、レコードをバッチ処理することもできます。

于 2011-07-08T06:36:32.010 に答える
0

私が見つけた最良の解決策は、私の要件に非常に固有であり、Squidに「redirect_program」を使用することです:http ://wiki.squid-cache.org/Features/Redirectors

これは私の目的には完全に機能し、プログラム内で自分のことを行うのに十分な情報を提供してくれます。

そのような機能が利用できない場合の完璧な解決策を提供してくれたpaulsm4に感謝します。

于 2011-07-08T06:40:02.257 に答える
0

これが機能するかどうかはわかりませんが、CSVストレージエンジンtable.CSVを使用してテーブルを作成し、squidプロキシに作成されたファイルの代わりに直接書き込むことができますaccess.log

于 2011-07-08T07:23:56.167 に答える