統計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"

相關內容