nginx

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > nginx > Nginx日志按天分割

Nginx日志按天分割实战

作者:龙叔运维

本文主要介绍了Nginx日志按天分割实战,方便快速按照天的维度分析以及查找报错定位,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

前言

nginx日志文件建议按照天的维度进行分割,方便快速按照天的维度分析以及查找报错定位

一、方式1:定时任务执行分割脚本

1.分割日志脚本

创建一个sh文件,写入以下内容(个别内容根据自己nginx的情况修改)

我这里的文件为 /usr/local/nginx/log_bak.sh

#/bin/bash 
 
yesterday=$(date +%Y-%m-%d)  #取得服务器当前时间
 
savepath_log=' /var/log/nginx_bak'#分割后的日志文件保存目录(注意结尾目录斜杠去掉)
 
nglogs='/usr/local/nginx/logs'  #nginx日志文件目录,具体根据实际地址替换(结尾目录斜杠去掉 以免与下面路径中的"/"重复)
 
 
 
#判断分割日志保存目录是否存在不存在则创建 
 
if [ ! -d ${savepath_log} ]   # 注意 语句之间 空格不可省略,这是bash脚本 不是php脚本那样随和 
 
then
 
mkdir -p ${savepath_log}
 
fi 
 
#通过mv命令将日志移动到分割后的日志目录里,然后发送kill -USR1信号给Nginx的主进程号,让Nginx重新生成一个新的日志文件。
 
mv ${nglogs}/access.log  ${savepath_log}/access_${yesterday}.log  #具体根据你的实际日志文件名路径 进行修改access.log名字
 
mv ${nglogs}/error.log  ${savepath_log}/error_${yesterday}.log  #具体根据实际日志文件名地址 修改error.log名字
 
mv ${nglogs}/host.access.log  ${savepath_log}/host.access_${yesterday}.log 
kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid)  #通知nginx重新生成新的日志

2.添加定时任务

crontab -e 后添加下面内容

59  23  * * * /usr/local/nginx/log_bak.sh(自己写的脚本的路径)

这样每天的23点59就会将当天的日志进行备份,并生成新的日志文件继续记录访问日志

二、方式2:logrotate配置分割

1.logrotate简单介绍

logrotate 是一个 Linux系统日志的管理工具。可以对单个日志文件或者某个目录下的文件按时间 / 大小进行切割,压缩操作;指定日志保存数量;还可以在切割之后运行自定义命令。

主流 Linux 发行版上都默认安装有 logrotate 包,如果你的 Linux 系统中找不到 logrotate, 可以使用 apt-get 或 yum 命令来安装。

yum install -y logrotate

下面命令可以查看是否安装了

rpm -ql logrotate

/etc/logrotate.conf是主配置文件,/etc/logrotate.d 文件夹下面是自定义的配置文件

2.新增切割nginx日志的配置文件

在/etc/logrotate.d目录下新增nginx文件 

vi nginx 写入下面内容(我的日志文件目录是/data/wxl/nginx/logs/)

/data/wxl/nginx/logs/

/data/nginx/logs/*.log {
    daily        # 按天分割              
    rotate 30    #保留30个文件 
    create
    sharedscripts   # 所有的文件切割之后只执行一次下面脚本,通知nginx重新打开新的日志文件进行后续写入
    postrotate
        if [ -f /data/nginx/logs/nginx.pid ]; then
            kill -USR1 `cat /data/nginx/logs/nginx.pid`  # 通过USER1信号通知nginx重新打开日志文件
        fi
    endscript
}

这样就会每天定时分割日志了

也可以手动执行命令测试一下能否正常分割日志

logrotate -f /etc/logrotate.d/nginx

3.备份日志压缩

如果分割后的日志想要压缩进行空间节约

可以加上下面配置

    compress           # 以gzip方式压缩
    nodelaycompress    # 所有分割后的文件都进行压缩

 推荐将 nodelaycompress 改为 delaycompress,这样分割后对最新的序号为1的文件不会进行压缩,对其他序号的文件进行压缩,这样可以方便我们查看最新的分割日志。

4.分割日志后缀改为日期

如果想要分割后的日志后缀为当天日志的日期,可以加上下面的配置

    dateext  # 切割后的文件添加日期作为后缀
    dateyesterday # 配合dateext使用,添加前一天的日期作为分割后日志的后缀
    dateformat -%Y-%m-%d  # 格式为2022-02-08

到此这篇关于Nginx日志按天分割实战的文章就介绍到这了,更多相关Nginx日志按天分割内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

您可能感兴趣的文章:
阅读全文