Nginx访问日志切割

文章目录

  • 原理
  • 准备工具
  • 参考文献

原理

  利用定时任务+脚本,实现日志的自动切割。

准备工具

操作系统:CentOS 7
Nginx版本: 1.13.1
Nginx安装目录:/application/nginx

$ cat /etc/redhat-release 
CentOS Linux release 7.2.1511 (Core)
$ /application/nginx/sbin/nginx -v
nginx version: nginx/1.13.1

  默认情况Nginx会把所有的访问日志生成到一个指定的访问日志文件access.log里,但这样一来,时间长了就会导致日志个头很大,不利于日志的分析和处理,因此,有必要对Nginx日志、按天或按小时进行切割,使其分成不同的文件保存。这里使用按天切割的方法。

切割脚本内容如下
$ cat /server/script/cut_nginx_log.sh

#! /bin/bash
Dateformat=`date -d yesterday +"%Y%m%d"`  #可以省略双引号
Basedir='/application/nginx'
Nginxlogdir="/application/nginx/logs"
Logname='access'
[ -d $Nginxlogdir ] && cd $Nginxlogdir || exit 1
[ -f ${Logname}.log ] || exit 1
/bin/mv ${Logname}.log ${Dateformat}_${Logname}.log
$Basedir/sbin/nginx -s reload

/bin/mv www_access.log www_access$(date +%F -d -1day).log

注意:
  脚本实现切割Nginx日志的思想为将写入的Nginx日志(access.log)改名为带日期的格式文件(年年年月月日日_access.log),然后平滑重新加载Nginx,生成新的
Nginx日志(access.log)。

  通过定时任务实现每天00点整定时执行/server/script/cut_nginx_log.sh切割日志。将Nginx日志修改为带昨天日期的文件。

# cat >> /var/spool/cron/root << EOF
> #cut nginx access log by 某某人
> 00 00 * * * /bin/sh /server/script/cut_nginx_log.sh > /dev/null 2>&1
> EOF

操作后结构如下

[root@sy-pc ~]# crontab -l
#cut nginx access log by 某某人
00 00 * * * /bin/sh /server/script/cut_nginx_log.sh > /dev/null 2>&1

最终日志切割效果如下

[root@sy-pc ~]# ll /application/nginx/logs/
total 72
-rw-r--r--. 1 root sy  1606 Jul 31 16:02 20190730_access.log
-rw-r--r--. 1 root sy 61104 Jul 31 15:58 20190731_access.log
-rw-r--r--. 1 root sy     0 Jul 31 16:02 access.log
-rw-r--r--. 1 root sy   241 Jul 31 16:02 error.log
-rw-r--r--. 1 root sy     5 Jul 31 13:28 nginx.pid

删除 更改日期7天前的日志。

find /application/nginx/logs -mtime +7 -type f -name \*.log | xargs rm -rf

CentOS 7
systemctl status crond #查看定时任务状态
systemctl stop crond #关闭定时任务
systemctl start crond #开启定时任务

  Nginx常用的日志收集及分析工具有rsyslog、awstats、flume、ELK(Elasticsearch logstash Kibana)、storm等。如果读者有需求,可以自行研究或参考老男孩的其他课程、书籍或网上资料。更多常用的开源运维工具见 http://oldboy.blog.51cto.com/2561410/775056

参考文献

[1] 老男孩. 跟老男孩学Linux运维:Web集群实战[M]. 机械工业出版社,2016-03-01.
[2] nginx切割日志[DB|OL]. https://www.cnblogs.com/jsonhc/p/8120520.html
[3] linu查找find命令及删除7天前的文件[DB|OL]. https://blog.csdn.net/ak57193856/article/details/78251611

你可能感兴趣的:(Nginx,Linux)