shell脚本对apache日志分割并统计保存到数据库
apache的日志主要是access_log和error_log,定时有效的将日志进行分割和统计能够减少access_log的大小以及拿到对自己的有用的信息。
一、目的
对access_log进行分割,把每天的数据单独另存为,同时统计每个ip的访问次数(根据实际的需求进行更改)
二、实现
日志拆分的依据有两种:
1、分割主要是每一天的数据进行分割,比如在凌晨0.00,通过date yesterday生成昨天的时间,把分割出来的都作为昨天
2、在access_log中匹配时间,那就得一行一行的处理,比较麻烦,效率低下。
主要如下:
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.sh
yesterday=`date -d yesterday +%Y%m%d`
srclog="/var/log/httpd/access_log"
# httpd 日志文件
dstlog="/mnt/log/httpd/logsbak/access_${yesterday}.log"
# 目标地址
mv $srclog $dstlog
pkill -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`
do
ip=`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"
三、效果
文章版权:Postbird-There I am , in the world more exciting!
本文链接:http://www.ptbird.cn/apache-log-cut-count-to-mysql.html
转载请注明文章原始出处 !
扫描二维码,在手机阅读!