一、日志需求

Apache、Nginx、MariaDB的访问日志及访问错误日志,默认是保存在一个指定的文件内。

如果访问量很大,文件会变的很大,影响的日志写入的速度及备份。

因此需要对Apache、Nginx、MariaDB的日志进行按日分割并进行压缩,压缩日志保存30天(可根据需要调节)

 

二、解决方案

使用cron 和 logrotate 来管理日志文件

1. 编写nginx的logrotate配置文件,并将文件放到/etc/logrotate.d/目录下,权限0644(读写/读/读)

# ll /etc/logrotate.d/
-rw-r--r--  1 root root 194 Apr 12 21:50 httpd
-rw-r--r--  1 root root 868 Aug 17 18:12 mysql
-rw-r--r--  1 root root 255 Sep 20 08:29 nginx
-rw-r--r--  1 root root 203 Nov  6  2016 php-fpm
-rw-r--r--. 1 root root 136 Jun 10  2014 ppp
-rw-r--r--. 1 root root 224 Sep  8  2015 syslog
-rw-r--r--. 1 root root 100 Jun 16  2015 wpa_supplicant
-rw-r--r--. 1 root root 100 Dec  3  2015 yum

 

nginx 文件内容

vim /etc/logrotate.d/nginx

# nginx logrotate
#
# 默认配置详见 vim /etc/logrotate.conf
# weekly
# rotate 4
# create
# dateext
# #compress
#
# Author: mimvp.com
# create: 2017.09.01
# update: 2024.07.08

/usr/local/nginx/logs/*.log {
    daily
    rotate 30
    create 0644 www www
    dateext
    size 100M

    olddir /usr/local/nginx/logs/old_log

    # compress
    # delaycompress
    missingok
    notifempty
    sharedscripts
    postrotate
        /bin/kill -USR1 `cat /usr/local/nginx/logs/nginx.pid 2>/dev/null` 2>/dev/null || true
    endscript
}

配置参数说明:

/usr/local/nginx/logs/*.log  nginx访问日志文件存放的目录,默认是所有.log文件

日志每天截断并压缩,保留30天的数据

错误信息忽略,空日志文件不转储

压缩的日志文件存储到指定的日志保存目录 /usr/local/nginx/logs/old_log

在日志截断后,kill进程后重启nginx,以便生成新的访问日志文件

 

httpd 文件内容

vim /etc/logrotate.d/httpd 

/var/log/httpd/*.log {
    daily
    rotate 30
    missingok
    notifempty
    compress
    sharedscripts
    olddir /var/log/httpd/old_log
    postrotate
        /bin/kill -HUP `cat /var/run/httpd.pid 2> /dev/null` 2> /dev/null || true
    endscript
}

2.  确认  logrotate 运行正常

1)检查 logrotate主配置文件/etc/logrotate.conf

vim /etc/logrotate.conf

# see "man logrotate" for details
# rotate log files weekly
weekly

# keep 4 weeks worth of backlogs
rotate 4

# create new (empty) log files after rotating old ones
create

# use date as a suffix of the rotated file
dateext

# uncomment this if you want your log files compressed
#compress

# RPM packages drop log rotation information into this directory
include /etc/logrotate.d

# no packages own wtmp and btmp -- we'll rotate them here
/var/log/wtmp {
    monthly
    create 0664 root utmp
        minsize 1M
    rotate 1
}

/var/log/btmp {
    missingok
    monthly
    create 0600 root utmp
    rotate 1
}

# system-specific logs may be also be configured here.

 

2)  确认/etc/cron.daily/下面有logrotate脚本

# ll /etc/cron.daily/ 
-rwxr-xr-x. 1 root root 332 Dec  3  2015 0yum-daily.cron
-rwx------. 1 root root 180 Jul 31  2013 logrotate
-rwxr-xr-x. 1 root root 618 Mar 18  2014 man-db.cron

 

3)  查看脚本内容 /etc/cron.daily/logrotate

vim /etc/cron.daily/logrotate

#!/bin/sh

/usr/sbin/logrotate /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0

 

 

参考推荐

Nginx 使用 cron 和 logrotate 管理日志文件

Apache 日志分割轮询配置详解

Linux crond 不执行原因分析

Linux 定时运行命令脚本:crontab

CentOS 7 sytemctl 自定义服务开机启动

LNMP(CentOS+Nginx+Mysql+PHP)服务器环境配置