shell脚本对apache日志分割并统计保存到数据库
2016-12-05 20:23
609 查看
版权属于: Postbird - There
I am , in the world more exciting!
原文地址: http://www.ptbird.cn/apache-log-cut-count-to-mysql.html
转载时必须以链接形式注明原始出处及本声明。
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、保存到数据库中。
I am , in the world more exciting!
原文地址: http://www.ptbird.cn/apache-log-cut-count-to-mysql.html
转载时必须以链接形式注明原始出处及本声明。
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"
三、效果
相关文章推荐
- shell脚本统计信息插到数据库中去
- 用 js 写了一个批量保存文本文件入数据库的脚本
- MySQL :: Linux 下自动备份数据库的 shell 脚本
- Linux下统计当前目录下源代码行数的Shell脚本
- Linux下备份cvs数据库shell脚本
- 利用shell脚本对大文件进行分割
- 简便的MS SQL 数据库 表内容 脚本 生成器,支持多级关联(含源代码)(更新:添加对NVARCHAR的特别支持、结果保存)
- Linux下统计某个目录下所有源代码行数的Shell脚本
- Shell脚本 网卡流量统计(转)
- shell脚本分割文件成相同行数的文件
- Linux下统计某个目录下所有源代码行数的Shell脚本;
- shell脚本导出数据库备份
- vbs wscript.shell objShell.Run 字符串 脚本 定时监控链路质量并保存
- Linux下统计某个目录下所有源代码行数的Shell脚本
- vb 图片分割并保存到数据库
- shell脚本-统计邮箱地址
- 监控数据库服务器的shell脚本
- 数据库表与权限之间关系统计脚本
- Shell操作数据库流控脚本实例
- shell脚本实现系统监视统计与数据备份