
クライアントが要求した約 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"