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  
相关推荐
C++忠实粉丝28 分钟前
Linux环境基础开发工具使用(2)
linux·运维·服务器
康熙38bdc1 小时前
Linux 环境变量
linux·运维·服务器
存储服务专家StorageExpert1 小时前
DELL SC compellent存储的四种访问方式
运维·服务器·存储维护·emc存储
hakesashou2 小时前
python如何比较字符串
linux·开发语言·python
Ljubim.te2 小时前
Linux基于CentOS学习【进程状态】【进程优先级】【调度与切换】【进程挂起】【进程饥饿】
linux·学习·centos
cooldream20092 小时前
Linux性能调优技巧
linux
大G哥2 小时前
记一次K8S 环境应用nginx stable-alpine 解析内部域名失败排查思路
运维·nginx·云原生·容器·kubernetes
醉颜凉2 小时前
银河麒麟桌面操作系统修改默认Shell为Bash
运维·服务器·开发语言·bash·kylin·国产化·银河麒麟操作系统
QMCY_jason3 小时前
Ubuntu 安装RUST
linux·ubuntu·rust
慕雪华年3 小时前
【WSL】wsl中ubuntu无法通过useradd添加用户
linux·ubuntu·elasticsearch