nginx日志切割
2017-01-05 00:00
387 查看
背景:上线了好几个月,nginx加上了健康检查模块,所以每次在重启服务,如果没有切换nginx,或者节点挂掉的时候,会产生大量的error日志,昨天发现error日志有270M,就一个文件,也没做切割,整个文件臃肿,不利于查找归类。
在网上查了几种日志分割的方法,第一种说是新版nginx可以自动按照access.1.log,access.2.log……这样自动分割,再找了一下资料,其实是用logrotate进行日志分割的。服务器本身是有logrotate,但是用的是root权限,本人没root权限,故不考虑此方案。
第二种是写shell脚本,利用crontab定时任务分割。脚本如下
再在0点0分执行就可以了.
解决完第一个问题,日志分割,现在有第二个问题,270M的日志文件怎么处理?我想整理归类,网上找了一圈,发现cronolog也是可以用来分割日志的,但是必须在重启后,基本上也是处理以后的日志,对于以前的日志处理没啥帮助,于是自己写了个脚本处理日志。脚本如下
思路就是把按照日期把日志写到对应的日志文件。
再之后,就是日志的归档整理问题了。一样写了个脚本,把日志压缩,存到备份目录,删掉原来的文件,大功告成。这里有3个地方有日志要处理,就写了个数组形式,需要处理的再加。
之后就类似的crontab 定时任务了,这里就不写了,现在这个模式是一个月执行一次。
在网上查了几种日志分割的方法,第一种说是新版nginx可以自动按照access.1.log,access.2.log……这样自动分割,再找了一下资料,其实是用logrotate进行日志分割的。服务器本身是有logrotate,但是用的是root权限,本人没root权限,故不考虑此方案。
第二种是写shell脚本,利用crontab定时任务分割。脚本如下
#!/bin/bash #设置日志文件存放目录 logs_path="/app/nginx/logs/" #设置pid文件 pid_path="/app/nginx/logs/nginx.pid" #重命名日志文件 mv ${logs_path}error.log ${logs_path}error_$(date -d "yesterday" +"%Y%m%d").log #向nginx主进程发信号重新打开日志 kill -USR1 `cat ${pid_path}`
再在0点0分执行就可以了.
0 0 * * * sh /app/shell/rotate_nginx_log.sh
解决完第一个问题,日志分割,现在有第二个问题,270M的日志文件怎么处理?我想整理归类,网上找了一圈,发现cronolog也是可以用来分割日志的,但是必须在重启后,基本上也是处理以后的日志,对于以前的日志处理没啥帮助,于是自己写了个脚本处理日志。脚本如下
#!/bin/bash file="/app/nginx/logs/error.log" outfile="/app/nginx/logs/error_" last_d=0 d=0 while read line do if [ -n "$line" ]; then #非空 d=${line:0:10} #nginx默认格式,取日期,比如2016/11/11 d=${d//'/'/''} #去掉/ if [ $last_d = 0 ]; then last_d=$d fi if [ $last_d != $d ]; then last_d=$d fi echo $line >> $outfile$d'.log' fi done < $file echo "split done!!!"
思路就是把按照日期把日志写到对应的日志文件。
再之后,就是日志的归档整理问题了。一样写了个脚本,把日志压缩,存到备份目录,删掉原来的文件,大功告成。这里有3个地方有日志要处理,就写了个数组形式,需要处理的再加。
#!/bin/bash log_path=("/app/log/" "/app/log/order/" "/app/nginx/logs/") bak_path="bak/" proj_name=("app1" "app2" "error") d1=`date -d '5 months ago' '+%Y-%m'` d2=`date -d '5 months ago' '+%Y%m'` d=($d1 $d1 $d2) size=${#log_path[*]} for((i=0;i<size;i++)); do echo -e "cd ${log_path[$i]}" cd ${log_path[$i]} #进入目录 echo -e "tar -czf ${proj_name[$i]}-${d[$i]}.tar.gz *${proj_name[$i]}*${d[$i]}*.log" tar -czf ${proj_name[$i]}-${d[$i]}.tar.gz *${proj_name[$i]}*${d[$i]}*.log #压缩 echo -e "mv ${proj_name[$i]}-${d[$i]}.tar.gz ${log_path[$i]}$bak_path" mv ${proj_name[$i]}-${d[$i]}.tar.gz ${log_path[$i]}$bak_path #移到备份目录 echo -e "rm ${log_path[$i]}*${proj_name[$i]}*${d[$i]}*.log" rm ${log_path[$i]}*${proj_name[$i]}*${d[$i]}*.log #删除文件 echo "" done echo "done!!!"
之后就类似的crontab 定时任务了,这里就不写了,现在这个模式是一个月执行一次。
相关文章推荐
- nginx日志切割配置
- nginx(日志管理之日志的使用、定时任务完成日志切割)
- 编写每天定时切割Nginx日志的脚本
- Nginx日志切割脚本
- LNMP - nginx日志切割
- nginx日志自动切割打包
- Nginx日志定时切割脚本
- nginx日志切割
- linux编译安装及配置Nginx(包含pcre), 日志定时切割
- nginx 切割日志文件
- nginx切割日志
- Nginx日志切割脚本
- 七、编写每天定时切割Nginx日志的脚本【LNMP安装 】
- NGINX日志切割
- [转载·运维案例一]nginx日志切割及7天前的历史日志删除脚本
- Linux下Nginx如何切割访问日志?
- nginx切割日志
- 切割Nginx日志的脚本
- 2.0-nginx日志切割
- nginx日志切割