1

LAMP (Debian/PHP/MySQL) サイトのデータベース アクティビティをログに記録するという問題に直面しています。

これは、たとえば「誰が何をしたか」を知るために、すべてのクエリが起動されたユーザーのコンテキストでログに記録されることを望んでいるという事実によって複雑になります。MySQL のロギング機能について十分な情報を得ていないことは認めますが、特定のシナリオに関する情報を見つけるのに問題があります。

これで、クエリを実行してログ テーブルに記録するmysql_query()代替手段が実装されました(PDO とプリペアド ステートメントを使用したコードの書き換えが進行中です!) 。INSERT DELAYED

問題は、簡単に予測できるように、ログ テーブルが数百万行に達し、そのうちの最も古い行がまったく役に立たないことです。その他の問題は、必要なクエリごとに 2 つが実行されることです。SELECT部分的な解決策は、 sをログに記録しないことです。

別の解決策は、派手なログローテーションと gzip などを使用してテキストファイルにログオンすることです。しかし、クエリが実行されたユーザー コンテキストを知るにはどうすればよいでしょうか。

ログに記録されたユーザーもログに記録し、パフォーマンスを認識するクエリロガーを実装した人はいますか?

4

1 に答える 1

2

それはトレードオフです。ユーザー アクティビティをログに記録する場合は、多くのスペースが必要になり、より多くの処理が必要になります。

SQL クエリではなく、PHP ファイル (GET、POST、COOKIE などを含む) に対するすべての HTTP リクエストを個人的にログに記録します。しかし、それでも数百万行になります。また、HDD 容量は一般的に安価であるため、永久に保管しています。監査を行う必要がある場合、時間がかかることがありますが、頻繁に監査する必要はありません。

ファイルに書き込むと分析が難しくなり、リクエストごとに余分な IO を処理することになります。

スペースが問題になる場合は、cron ジョブを実行して、X 時間経過したすべての行を削除できます。

于 2012-06-29T14:29:06.210 に答える