Linux:apache优化(7)—— 日志分割|日志合并
作用:随着网站访问量的增加,访问日志中的信息会越来越多, Apache 默认访问日志access_log单个文件会越来越大,日志文件体积越大,信息都在一个文件中,查看及分析信息会及不方便。
分割
实现方式:
1.利用 apache 自带的日志轮循程序 rotatelogs
ErrorLog "|rotatelogs 命令的绝对路径 -l logs/error_%Y%m%d_%H%M%S.log 秒数"
CustomLog "| rotatelogs 命令的绝对路径-l logs/access_%Y%m%d_%H%M%S.log 秒数" Combined
2.利用一个发展已经比较成熟的日志轮循工具 cronolog
ErrorLog "|cronolog 绝对路径 -l /usr/local/httpd/logs/error_%Y%m%d%H%M%S.log "
CustomLog "|cronnolog绝对路径 -l /usr/local/httpd/logs/access_%Y%m%d%H%M%S.log" combined
3.利用定时任务和 shell 脚本做日志切割
方式一: 利用 apache 自带的日志轮循程序 rotatelogs日志分割:
[root@linuxa ~]# vi /usr/local/httpd/conf/httpd.conf
##10秒切割一次日志文件(切割日志时间频率可以自行改变,根据PV来决定,),-l选项是小写的L表示local time(本地时间)
215行插入 CustomLog "|/usr/local/httpd/bin/rotatelogs -l /usr/local/httpd/logs/access_%Y%m%d%H%M%S.log 10" combined :wq
方式二:利用一个发展已经比较成熟的日志轮循工具 cronolog
[root@linuxa ~]# tar xf cronolog-1.6.2.tar.gz -C /usr/src/
[root@linuxa ~]# cd /usr/src/cronolog-1.6.2/
[root@linuxa cronolog-1.6.2]# ./configure && make && make install
[root@linuxa cronolog-1.6.2]# cd
[root@linuxa ~]# which cronolog
/usr/local/sbin/cronolog
[root@linuxa ~]# vi /usr/local/httpd/conf/httpd.conf
##可以跟据文件名中的变量来设置分割的频率,Y表示四位年份、m表示月份、d表示月份中的天数
213行 CustomLog "|usr/local/sbin/cronolog /usr/local/httpd/logs/access_%Y%m%d.log" combined :wq
[root@linuxa ~]# /usr/local/httpd/bin/apachectl restart
[root@linuxa ~]# ls /usr/local/httpd/logs/
access_20171206.log access_log error_log httpd.pid
方式三:脚本完成(定期移动httpd日志文件,并且保存期限为30天):
[root@linuxa ~]# vi /opt/cut_httpd_log.sh
#!/bin/bash
logpath="/usr/local/httpd/logs"
datetime=$(date -d "-1 day" "+%Y%m%d")
[ -d $logpath/backup ] || mkdir $logpath/backup
mv $logpath/access_log $logpath/backup/access_log-$datetime
/usr/local/httpd/bin/apachectl graceful
##重新加载apache的配置,不会中断请求
find $logpath/backup/ -mtime +30 | xargs rm –f
find /usr/local/httpd/logs/backup/ -type f -mtime +30 -exec rm -rf {} \;
[root@linuxa ~]# chmod +x /opt/cut_httpd_log.sh
[root@linuxa ~]# echo "00 00 * * * /bin/bash /opt/cut_httpd_log.sh &> /dev/null" >>/var/spool/cron/root
[root@linuxa ~]# service crond restart
当成功分割之后如果要进行合并
合并
可以将每个服务器每天的日志文件通过 rsync 下载到专门进行访问统计分析的服务器上进行合并。合并多个服务器的日志文件,例如: log1 log2 log3 并输出到 log_all 中的方法是:
sort -k 4 -o log_all access_log1 access_log2 access_log3
-m 使用 merge 优化算法
-t 指定排序的分割符
-k 4 指定排序时行中多列时,排序的依据列为哪列,表示根据时间进行排序
-o 表示将排序结果存放到指定的文件中
所以这里使用
sort -k 4 -o accessall access_20240102051040.log access_20240102051050.log