apache訪問日誌access.log的解析以及如何將其導入mysql

首先,我們對apache訪問日誌進行一個解讀,

220.181.108.92 - - [22/Aug/2013:23:59:59 +0800] "GET /min/f=/media/js/jquery-1.7.2.media/js/global_interaction.js&201308221836 HTTP/1.1" 200 70550 "http://adfdfs.com.cn1071-2130-1.html" "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9) Gecko Minefield/3.0"

第一項信息是遠程主機的地址,即它表明訪問網站的究竟是誰。

第二項是空白,用一個“-”佔位符替代。實際上絕大多數時候這一項都是如此。這個位置用於記錄瀏覽者的標識,這不只是瀏覽者的登錄名字,而是瀏覽者的email地址或者其他唯一標識符,通常只是"-";

第三項也是空白用一個佔位符"-"來替代。這個位置用於記錄瀏覽者進行身份驗證時提供的名字。當然,如果網站的某些內容要求用戶進行身份驗證,那麼這項信息是不會空白的。但是,對於大多數網站來說,日誌文件的大多數記錄中這一項仍舊是空白的。

第四項,表示訪問者的訪問時間記錄,無需多解釋,時間信息最後的“+800”表示服務器所處時區位於UTC之後的8小時。

第五項,是整個日誌記錄中最有用的信息,它告訴我們服務器收到的是一個什麼樣的請求

第六項,200狀態代碼

第七項,70500,是服務器發送給客戶端的總字節數

第八項,客戶在提出請求時所在的目錄或URL。

第九項,客戶端的詳細信息

根據需求可以建張表

CREATE TABLE IF NOT EXISTS `apache_log` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id號',
`hostip` char(32) NOT NULL DEFAULT '0.0.0.0' COMMENT '遠程主機的IP地址',
`marking` char(30) COMMENT '瀏覽者的標識',
`client_name` char(30) COMMENT '瀏覽者的名字',
`addtime` char(64) NOT NULL COMMENT '瀏覽時間',
`time_zone` char(8) NOT NULL COMMENT '時區',
`method` char(8) NOT NULL COMMENT '方法',
`resource` char(64) NOT NULL COMMENT ' 請求的資源',
`protocol` char(8) COMMENT '請求使用的協議',
`status` int(5) COMMENT '狀態代碼',
`bytes` int(5) COMMENT '發送給客戶端的總字節數',
`refer` char(128) COMMENT '客戶在提出請求時所在的目錄或URL',
`client_info` char(128) COMMENT '客戶在提出請求時所在的目錄或URL',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

先用awk處理apache日誌,將每一項都用空格分開,那麼大家看到下面的好多數字就迷惑了,這到底是個什麼東西呢。首先awk '{print 0 ,像apache日誌的文本中每行寫入一個0,原因是,表結構的第一個字段是自增列,我只要把0導入,0表示默認值,它就可以自動增長了。
cat apache_log|awk '{print 0 " "$1 " "$2 " "$3" " for (i=4;i<=NF;i++) printf $i;printf "\n"}'>> apache_log.txt


mysql>load data infile "/root/apache_log.txt" into table apache_log fields terminated by " " lines terminated by '\n';

ERROR 13 (HY000): Can't get stat of '/root/apache_log.txt' (Errcode: 13 - Permission denied)

mysql>load data local infile "/root/apache_log.txt" into table apache_log fields terminated by " " lines terminated by '\n';

Query OK, 2000 rows affected, 2672 warnings (0.61 sec)
Records: 2000 Deleted: 0 Skipped: 0 Warnings: 2672

順便比較一下load data infile 和load data local infile 區別

如果你沒有給出local,則服務器按如下方法對其進行定位:
1)如果你的filename爲絕對路徑,則服務器從根目錄開始查找該文件.
2)如果你的filename爲相對路徑,則服務器從數據庫的數據目錄中開始查找該文件.
如果你給出了local,則文件將按以下方式進行定位:
1)如果你的filename爲絕對路徑,則客戶機從根目錄開始查找該文件.
2)如果你的filename爲相對路徑,則客戶機從當前目錄開始查找該文件.

mysql> desc apache_log;
+--------------+-----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+-----------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| hostip | char(32) | NO | | 0.0.0.0 | |
| marking | char(30) | YES | | NULL | |
| browser_name | char(30) | YES | | NULL | |
| addtime | char(64) | NO | | NULL | |
| time_zone | char(8) | NO | | NULL | |
| method | char(8) | NO | | NULL | |
| resource | char(64) | NO | | NULL | |
| protocol | char(8) | YES | | NULL | |
| status | int(5) | YES | | NULL | |
| bytes | int(5) | YES | | NULL | |
| refer | char(128) | YES | | NULL | |
| client_info | char(128) | YES | | NULL | |
+--------------+-----------+------+-----+---------+----------------+
13 rows in set (0.00 sec)

mysql> select * from apache_log limit 3;
+----+-----------------+---------+--------------+-----------------------+-----------+--------+--------------------------------------------+----------+--------+-------+-------+------------------------------------------------------------------------------------+
| id | hostip | marking | browser_name | addtime | time_zone | method | resource | protocol | status | bytes | refer | client_info |
+----+-----------------+---------+--------------+-----------------------+-----------+--------+--------------------------------------------+----------+--------+-------+-------+------------------------------------------------------------------------------------+
| 1 | 220.181.108.116 | - | - | [21/Aug/2013:23:59:59 | +0800] | "GET | /search/prj/tag/2089-2124-2350-2354-1.html | HTTP/1.1 | 200 | 8181 | "-" | "Mozilla/5.0(compatible;Baiduspider/2.0;+http://www.baidu.com/search/spider.html)" |
| 2 | 220.181.165.5 | - | - | [21/Aug/2013:23:59:59 | +0800] | "GET | /event/bushanping/admin_login.php | HTTP/1.1 | 200 | 32095 | "-" | "Mozilla/5.0(Windows;U;WindowsNT5.1;zh-CN;rv:1.9.1.1)Gecko/20090715Firefox/3.5.1" |
| 3 | 220.181.165.136 | - | - | [21/Aug/2013:23:59:59 | +0800] | "GET | /search/diy/server-status/ | HTTP/1.1 | 404 | 21795 | "-" | "Mozilla/5.0(Windows;U;WindowsNT5.1;zh-CN;rv:1.9.1.1)Gecko/20090715Firefox/3.5.1" |
+----+-----------------+---------+--------------+-----------------------+-----------+--------+--------------------------------------------+----------+--------+-------+-------+------------------------------------------------------------------------------------+
3 rows in set (0.00 sec)

導入成功



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章