MySQL の Apache ログから大きなファイルのダウンロード数をカウントする

MySQL の Apache ログから大きなファイルのダウンロード数をカウントする

クライアントが要求した約 10 個の異なるファイルのダウンロード数をカウントしたいと考えています。MySQL データベースにロードできる Apache ログ用に別のログ形式を生成しました。

このような特定のクエリの場合、肥大化したログ アナライザーをインストールするのではなく、ダウンロード数をカウントする SQL ステートメントを記述できることを期待していました。

これは MySQL ログに使用されるログ形式です。

LogFormat "\"%a\",%{%Y%m%d%H%M%S}t,%>s,\"%b\",\"%{Content-Type}o\", \"%U\",\"%{Referer}i\",\"%{User-Agent}i\"" mysql

これにより、次のような csv ファイルが生成されます。

"156.107.33.66",20121017113516,200,"10094440","application/x-msdos-program",          "/flexnet/FLEXnetWinSetup.exe","http://www.example.com/downloads/flexnet","Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4"

ただし、100 MB を超える大きなファイルはチャンクに分割されるため、ログを単純に数えることはできません。

同様のことを試した人はいますか?

答え1

チャンクに分割することで、クライアントが複数の 206 HTTP 応答でファイルをダウンロードすることを意味する場合は、応答に含まれるヘッダー Content-Range の内容をログに記録してみてください。

LogFormat "\"%a\",%{%Y%m%d%H%M%S}t,%>s,\"%b\",\"%{Content-Range}o\",\"%{Content-Type}o\", \"%U\",\"%{Referer}i\",\"%{User-Agent}i\"" mysql

次のような結果が生成されるはずです(テストされていません)

"156.107.33.66",20121017113516,200,"10094440","bytes 0-999/3980","application/x-msdos-program",          "/flexnet/FLEXnetWinSetup.exe","http://www.example.com/downloads/flexnet","Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4"

関連情報