从 mysql 中的 apache 日志统计大文件下载次数

从 mysql 中的 apache 日志统计大文件下载次数

我想统计客户要求的大约 10 个不同文件的文件下载量。我们为 Apache 日志生成了单独的日志格式,可以将其加载到 MySQL 数据库中。

对于这样一个特定的查询,我希望能够编写一个 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"

但是,大于 100MB 的文件会被分成多个块,因此它并不是简单的日志计数。

有人尝试过类似的事情吗?

答案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"

相关内容