自己做个一个apache日志监控

来源:互联网 发布:野口笑子 知乎 编辑:程序博客网 时间:2024/05/12 01:39

蛋疼自己整一个access_log监控,从中遇到蛮多问题,基本解决了,记录下流程吧^_^

1.首先是access_log输出内容的调整:

我的想法是插入数据库做记录的,因为shell不是很好所以着手调整accesslog内容方便插入数据库;

原输出内容:

        127.0.0.1 - - [14/Sep/2013:15:09:13 +0800] "GET / HTTP/1.1" 200 4148

想调整为:(日期格式)

127.0.0.1 - - '2014-01-01 22:40:35' GET / HTTP/1.1 200 3059

方法:

修改:apache配置文件

LogFormat "%h %l %u %t \"%r\" %>s %b" common

改为(由于不想修改原有的格式所有添加了一个规则)

LogFormat "%h %l %u '%{%Y-%m-%d %T}t' %r %>s %b" ayoah

2.日志分割:(按每日按)

由于后面做一个cronjob定时每天插入数据库,加之服务器跑时间长accesslog目测巨大,so这一步在我看来还蛮有用。分割后日志格式:log_年_月_日

方法:

1).安装cronlog:

http://cronolog.org/download/index.html《=下载地址

安装过程3步走:./confiure ;make;make install.(各种编译已吐)

安装path(我的是mac,目测linux的也不会出其左右):/usr/bin/local/sbin/cronlog 

2).修改vhost(如果你有)

在你的对应vhost 下添加CustomLog "|/usr/local/sbin/cronolog /private/var/log/apache2/site_ayoah_log/log_%Y_%m_%d" ayoah

3).重启apache(可能log目录有点权限问题777全部解决,男人就应该粗糙点么。。,再有什么问题看你的errollog把)

3.建个数据库吧

create database mymoniter;

CREATE TABLE `accesslog` (
  `id` int(4) NOT NULL AUTO_INCREMENT,
  `link` varchar(8000) DEFAULT NULL,
  `riqi` varchar(100) DEFAULT NULL,
  `status` int(4) DEFAULT NULL,
  `ip` varchar(20) DEFAULT NULL,
  `requesttime` int(4) DEFAULT NULL,
  PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8

4.定时任务:

1).bash:

本人shell简直就是菜,血淋淋的菜鸟。。。看完莫喷(笑喷是可以的。。)

#bash
logfile="/var/log/apache2/site_ayoah_log/log_$(date -v-1d '+%Y_%m_%d')"#mac 日期处理是date -vXXXX ,我这个crontab是跑的昨天的日志
cat $logfile |awk '{if($9>0 && $10>0) print "insert into mymoniter.accesslog (`ip`,`riqi`,`link`,`status`,`requesttime`) values('\'\"'$1'\"\'',"$4" "$5",'\'\"'$7'\"\'',"$9","$10");"}' >test.sql#拼sql,拼出一个未来,拼出一个全世界。。。
mysql <"test.sql"#insert

优化来日方长。。。但今天,恩今天就到这儿吧。。。

2).cronjob

sh-3.2# crontab -e

30 0 * * * /Users/ayoah/mytest/test

已完,多一个字我都不写,打死我不写。。。。

0 0