Nginx全自动日志分割、压缩、分析一步到位

  • A+
所属分类:Nginx
对于web站点来说nginx无论是正向代理还是反向代理都是非常强大的。并且nginx是一个强大的站点负载均衡软件。nginx有着优秀的高并发高负载特点。然而nginx的安装配置非常的简单。在实际的工作中我们运维工作的绝大部分时间是对nginx日志进行分析,进而分析出web用户的行为和web网站哪些内容是热点,哪些页面响应速度很长,影响用户的体验。

然而我们通常面临的最大一个问题就是分割nginx的日志。今天我们通过一个简单的shell脚本配合crontab计划任务来实现按照时间切分nginx高负载下的web站点日志这些功能。
Nginx全自动日志分割、压缩、分析一步到位

第一步:

首先我们创建脚本nginxlogs.sh

vim nginxlogs.sh

#!/bin/bash     
LOGS_PATH=/data/logs #定义变量日志文件路径
YESTERDAY=$(date -d "yesterday" +%Y-%m-%d)  #定义变量时间
mv ${LOGS_PATH}/access.log ${LOGS_PATH}/access_${YESTERDAY}.log  
#mv ${LOGS_PATH}/error.log ${LOGS_PATH}/error_${YESTERDAY}.log  
#touch ${LOGS_PATH}/access.log
#touch ${LOGS_PATH}/error.log
#向 Nginx 主进程发送 USR1 信号。USR1 信号是重新打开日志文件  
kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid)  
zip ${LOGS_PATH}/access_${YESTERDAY}.log.zip ${LOGS_PATH}/access_${YESTERDAY}.log
#zip ${LOGS_PATH}/error_${YESTERDAY}.log.zip ${LOGS_PATH}/error_${YESTERDAY}.log
rm -rf ${LOGS_PATH}/access_${YESTERDAY}.log
#rm -rf ${LOGS_PATH}/error_${YESTERDAY}.log
/opt/openresty/nginx/sbin/nginx -s reload   #这里为了防止意外多加了一个加载nginx配置文件命令

脚本编写好了,记得给它赋予相应的执行权限。这里我在计划任务中用root执行该脚本所以只给root执行权限。
# chmod 700 nginxlogs.sh

第二步:

接下来这一步就简单了我们创建一个计划任务定时的去执行这个脚本就可以了。

vim /etc/crontab

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed
0 0 * * * root /data/nginxlogRotate.sh

:wq保存后就完成了。是不是特别简单?
说明:这里使用的脚本主要有1.分割日志、2.压缩日志文件、3.删除旧的日志文件。功能可根据实际情况进行修改删除。

avatar

发表评论

您必须登录才能发表评论!