作为网站运行来说,日志分析是一个很重要的工作。当一个网站的日志到了一定程度,或者一个网站同时有多台服务器的时候,传统的文本日志分析总会遇到瓶颈。
这个时候我就会想起强大的sql语句。看了网上很多人的帖子,都是将日志转成sql语句再导入的,搞得有点复杂。本方案不需要任何多余的软件和操作,一切全是实时、自动,供各位参考。
主机至少需要预安装apache(废话!)和mysql的客户端。如果访问量不大且服务器的资源管够的话可以将mysql装在本地,否则建议一台独立的mysql服务器。
在apache配置文件或者虚拟主机配置文件中面添加
LogFormat INSERT INTO apacheLog (ID, dateTime, IP, URL, code, referer, userAgent, size, request) VALUES ( NULL , "%{%Y-%m-%d %H:%M:%S}t", "%a", "%U", "%>s", " %{Referer}i", "%{User-Agent}i", %b, %T);" sqlcomm CustomLog "| /usr/local/Mysql --host=HOST --user=USER --password=PASSWORD --database=LITRIN_NET" sqlcomm
CREATE TABLE ` apacheLog ` ( `ID` int(11) NOT NULL auto_increment, `dateTime` datetime NOT NULL, `IP` varchar(15) NOT NULL, `URL` varchar(256) NOT NULL, `code` varchar(3) NOT NULL, `referer` varchar(256) NOT NULL, `userAgent` varchar(256) NOT NULL, `size` int(11) NOT NULL, `request` float NOT NULL, PRIMARY KEY (`ID`), KEY `dateTime` (`dateTime`) ) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=latin1; SET character_set_client = @saved_cs_client;
确认无误后重启apache生效!
其实整个流程很简单:先是利用LogFormat设置将日志转换为接近sql的格式,再通过CustomLog 调用pipe实现mysql写入。你也可以参照http://httpd.apache.org/docs/2.2/mod/mod_log_config.html#formats的格式设置写入自己关心的数据。
此外,你也可以使用SetEnvIf配合正则表达式过滤掉诸如图片、CSS、JS之类相对不重要的信息。
转载请注明:爱开源 » 将Apache日志实时写入mysql