您当前位置:设计在线网 >> Sql Server >> 浏览文章

如何将Apache日志实时写入mysql

分享到:
本文章讲述了如何将Apache日志实时写入mysql.

rotatelogs logfile [ rotationtime [ offset ]] | [ filesizeM ]

logfile

它加上基准名就是日志文件名。如果logfile中包含’%',则它会被视为用于的strftime(3)的格式字串;否则,它会被自动加上以秒为单位的.nnnnnnnnnn后缀。这两种格式都表示新的日志开始使用的时间。

rotationtime

日志文件回卷的以秒为单位的间隔时间

offset

相对于UTC的时差的分钟数。如果省略,则假定为0,并使用UTC时间。比如,要指定UTC时差为-5小时的地区的当地时间,则此参数应为-300。

filesizeM

指定回卷时以兆字节为单位的后缀字母M的文件大小,而不是指定回卷时间或时差。

主机至少需要预安装apache(废话!)和mysql的客户端。如果访问量不大且服务器的资源管够的话可以将mysql装在本地,否则建议一台独立的mysql服务器。

在apache配置文件或者虚拟主机配置文件中面添加:

建立数据库apacheLog。

REATE TABLE ` apacheLog ` (

02`ID` int(11) NOT NULL auto_increment,

03`dateTime` datetime NOT NULL,

04`IP` varchar(15) NOT NULL,

05`URL` varchar(256) NOT NULL,

06`code` varchar(3) NOT NULL,

07`referer` varchar(256) NOT NULL,

08`userAgent` varchar(256) NOT NULL,

09`size` int(11) NOT NULL,

10`request` float NOT NULL,

11PRIMARY KEY(`ID`),

12KEY `dateTime` (`dateTime`)

13) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;

14SET character_set_client = @saved_cs_client;

确认无误后重启apache生效!

其实整个流程很简单:先是利用LogFormat设置将日志转换为接近sql的格式,再通过CustomLog 调用pipe实现mysql写入。

Apache主要有access.log和error.log,时间运行长了日志会很大,一个日志文件甚至达到几G,这样进行读写相当不方便,会造成内存不足,服务器死机的情况,所以需要进行日志分割

在windows下日志分割的配置如下,在httpd.conf中添加

ErrorLog "|bin/rotatelogs.exe logs/error_%Y_%m_%d.log 86400 480"

CustomLog "|bin/rotatelogs.exe logs/access_%Y_%m_%d.log 86400 480" common

在Linux下日志分割的配置如下,在httpd.conf中添加

ErrorLog "|rotatelogs /var/log/httpd/example_error_log/%Y%m%d 86400 480"

CustomLog "|rotatelogs /var/log/httpd/example_access_log/%Y%m%d 86400 480" common

注意,Linux下和Windows下的配置是不一样的,Linux下不需要bin目录,并且日志的位置要写绝对路径

rotatelogs是一个配合Apache管道日志功能使用的简单程序。举例:

CustomLog "|/usr/sbin/rotatelogs /var/logs/logfile 86400" common

此配置会建立文件/var/logs/logfile.nnnn,其中的nnnn是名义上的日志启动时的系统时间 (此时间总是回卷时间的倍数,可以用于cron脚本的同步)。 在回卷时间到达时(在此例中是24小时以后),会产生一个新的日志。

CustomLog "|/usr/sbin/rotatelogs /var/logs/logfile 5M" common

此配置会在日志文件大小增长到5兆字节时回卷该日志。

概要

rotatelogs logfile [ rotationtime [ offset ]] | [ filesizeM ]

选项

logfile

它加上基准名就是日志文件名。如果logfile中包含'%',则它会被视为用于的strftime(3)的格式字串;否则,它会被自动加上以秒为单位的.nnnnnnnnnn后缀。这两种格式都表示新的日志开始使用的时间。

rotationtime

日志文件回卷的以秒为单位的间隔时间

offset

相对于UTC的时差的分钟数。如果省略,则假定为0,并使用UTC时间。比如,要指定UTC时差为-5小时的地区的当地时间,则此参数应为-300。

filesizeM

指定回卷时以兆字节为单位的后缀字母M的文件大小,而不是指定回卷时间或时差。

可移植性

下列日志文件格式字串可以为所有的strftime(3)实现所支持,见各种扩展库对应的strftime(3)的手册。

%A星期名全称(本地的)

%a3个字符的星期名(本地的)

%B月份名的全称(本地的)

%b3个字符的月份名(本地的)

%c日期和时间(本地的)

%d2位数的一个月中的日期数

%H2位数的小时数(24小时制)

%I2位数的小时数(12小时制)

%j3位数的一年中的日期数

%M2位数的分钟数

%m2位数的月份数

%pam/pm 12小时制的上下午(本地的)

%S2位数的秒数

%U2位数的一年中的星期数(星期天为一周的第一天)

%W2位数的一年中的星期数(星期一为一周的第一天)

%w1位数的星期几(星期天为一周的第一天)

%X时间 (本地的)

%x日期 (本地的)

%Y4位数的年份

%y2位数的年份

%Z时区名

%%符号`%'本身

为什么要分割日志

随着网站的访问越来越大,WebServer产生的日志文件也会越来越大,如果不对日志进行分割,那么只能一次将大的日志(如Apache的日志)整个删除,这样也丢失了很多对网站比较宝贵的信息,因为这些日志可以用来进行访问分析、网络安全监察、网络运行状况监控等,因此管理好这些海量的日志对网站的意义是很大的。

本文将总结一些实用的日志分割方法,希望能够方便Linux/Unix管理员对日志文件进行有效的管理,如果文件过多过大,可以删除一些历史的文件。

推荐阅读:
基于MYSQL外部的客户端软件执行MYSQL命令介绍
谈谈在mysql中使用分割符来分割数据方法
基于mysql中的if条件语句用法介绍
上一篇:访问游标中的记录介绍
下一篇:没有了
推荐文章  
赞助商链接  
热门排行  
主题推广  
中国设计在线网 All Rights Reserved. 互联网违法和不良信息举报
信息产业部备案号:湘ICP备09001063号