shell脚本对apache日志分割并统计保存到数据库

来源:互联网 发布:均不是c语言关键字 编辑:程序博客网 时间:2024/06/07 10:04



apache的日志主要是access_logerror_log,定时有效的将日志进行分割和统计能够减少access_log的大小以及拿到对自己的有用的信息。

一、目的

对access_log进行分割,把每天的数据单独另存为,同时统计每个ip的访问次数(根据实际的需求进行更改)

二、实现

日志拆分的依据有两种:

1、分割主要是每一天的数据进行分割,比如在凌晨0.00,通过date yesterday生成昨天的时间,把分割出来的都作为昨天

2、在access_log中匹配时间,那就得一行一行的处理,比较麻烦,效率低下。

logcut1

主要如下:

1、找到apache的日志文件路径

centos下一般有两种:/var/log/httpd/access_log  或者 /usr/local/apache2/logs/access_log (源代码安装的)

2、移动另存当前日志文件(原来目录下此时被删除)

3、恢复原来目录的日志文件

挂起一次apache即可。

pkill -1 httpd

4、对日志进行分割处理并保存临时文件

本例中保存的样式为 192.168.229.1:40 

冒号链接是为了后面再次分割使用

5、循环处理临时文件的每一行

根据冒号分割每一行得到ip和访问次数。

6、保存到数据库中。

三、脚本

#!/bin/bash#logcut.shyesterday=`date -d yesterday +%Y%m%d`srclog="/var/log/httpd/access_log"# httpd 日志文件dstlog="/mnt/log/httpd/logsbak/access_${yesterday}.log"# 目标地址mv $srclog $dstlogpkill -1 httpd#需要挂起一次 否则access_log不会自动生成tmpfile=$$.txt#对日志进行处理`cat /mnt/log/httpd/logsbak/access_${yesterday}.log |awk '{print $1}' |sort |uniq -c |awk '{print $2":"$1}'>>${tmpfile}`#数据库mysql='mysql -uroot -p123456 -Dtest'#对临时文件处理for item in `cat $tmpfile`doip=`echo ${item}|awk -F: '{print $1}'`num=`echo ${item}|awk  -F: '{print $2}'`sql="insert into log_count(date,ip,num) values('${yesterday}','${ip}','${num}')"$mysql -e "$sql"done#删除文件rm -f $tmpfile#验证一下#sql="select * from log_count"#$mysql -e "$sql"

三、效果

logcut2

0 0