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  
相关推荐
byte轻骑兵2 小时前
BlueZ源码编译环境配置全指南:Linux桌面原生编译 + 嵌入式ARM交叉编译 + 定制裁剪与调试实战
linux·arm开发·蓝牙·bluez·电脑蓝牙
纪伊路上盛名在2 小时前
NVML ERROR_ RM has detected an NVML_RM version mismatch
linux·数据库·gpu·驱动
醉逍遥_祥2 小时前
Linux进程与NuttX任务(Linux Processes vs NuttX Tasks)
linux·单片机·嵌入式软件
网安老伯2 小时前
网络安全基础要点知识介绍(非常详细),零基础入门到精通,看这一篇就够了
运维·前端·网络协议·web安全·网络安全·职场和发展
迷茫中的自我2 小时前
GitHub Actions自动化运维实战:从CI/CD到云原生部署
运维·自动化·github
XH华2 小时前
Linux系统第二章:常见的Linux指令(上)
linux·运维·服务器
nVisual3 小时前
01-环境监控集成方案
运维·服务器·开发语言·网络·数据库·数据中心布线·综合布线管理软件
北龙云海12 小时前
案例分享 | 面向公网业务系统境内访问白名单配置实操方案
运维·网络·安全·网络安全·告警·数据泄露·入侵攻击
FoldWinCard12 小时前
D5 Linux 网络及端口命令
linux·运维·服务器
零涂毕业设计14 小时前
毕业设计模块开发-OLED显示屏(IIC协议0.96寸)STM32 ESP32 FPGA Linux驱动免费分享
linux·stm32·单片机·嵌入式·esp32·fpga·oled