14. Nginx进阶-日志切割

本文介绍了如何使用Logrotate工具管理和切割大量日志文件,包括安装、配置、Nginx应用中的日志轮转策略,以及如何通过shell脚本实现定时自动日志切割,以提高网站性能和维护效率。
摘要由CSDN通过智能技术生成

日志概述

简介

当网站访问量大后,日志数据就会很多。
如果全部写到一个日志文件中去,文件会变得越来越大。
文件大速度就会慢下来,比如一个文件几百兆,写入日志的时候,就会影响操作速度。

工具

常见的日志切割工具:

  1. 工具切割:logrotate
  2. 脚本切割:Shell脚本、Python脚本

日志切割- logrotate

安装Logrotate

CentOS、Redhat系统默认安装了Logrotate,如需安装如下:

查看logrotate是否安装

rpm -ql logrotate

查看logrotate命令所属安装包

yum search logrotate

安装logrotate命令

yum -y install logrotate

配置Logrotate

查看logrotate安装文件

rpm -ql logrotate

/etc/cron.daily/logrotate										#
/etc/logrotate.conf													#logrotate的配置文件,用于配置主切割规则
/etc/logrotate.d														#logrotate的子配置文件,用于配置子切割规则
/etc/rwtab.d/logrotate
/usr/sbin/logrotate													#logrotate的程序
/usr/share/doc/logrotate-3.8.6
/usr/share/doc/logrotate-3.8.6/CHANGES
/usr/share/doc/logrotate-3.8.6/COPYING
/usr/share/man/man5/logrotate.conf.5.gz
/usr/share/man/man8/logrotate.8.gz
/var/lib/logrotate
/var/lib/logrotate/logrotate.status

配置文件详解

cat /etc/logrotate.conf | grep -v "^#" | grep -v "^$"
weekly													#定义日志每周一轮轮转
rotate 4												#定义日志保留4个备份
create													#定义日志创建新的空白日志文件替代旧文件
dateext													#定义日志使用日期为文件名后缀,禁用此项默认数字为后缀
include /etc/logrotate.d				#加载指定目录下配置文件,此目录下保存的是日志切割策略规则
/var/log/wtmp {									#定义那个目录下日志的轮转
    monthly											#此目录下的个性化设置,定义每月轮转一次
    create 0664 root utmp				#此目录下的个性化设置,定义创建的新日志文件权限、属主、数组
	minsize 1M										#此目录下的个性化设置,定义日志文件超过1M后才会切割
    rotate 1										#此目录下的个性化设置,定义日志保留1个备份
    compress										#此目录下的个性化设置,定义日志文件压缩启动,后缀为.gz
}
/var/log/btmp {
    missingok										#此目录下的个性化设置,设置在日志轮转期间任何错误都会被忽略
    monthly
    create 0600 root utmp
    rotate 1
}

Nginx应用logrotate切割日志

  1. 编辑配置文件
cat > /etc/logrotate.d/nginx << EOF
/usr/local/nginx/logs/access.log {
hourly
rotate 7
missingok
dateext
compress
delaycompress
notifempty
sharedscripts
postrotate
  if [ -f /usr/local/nginx/logs/nginx.pid ]; then     #判断nginx是否启动
    /usr/local/nginx/sbin/nginx -s reload				#重启Nginx
  fi
  /bin/kill -HUP `cat /usr/local/nginx/logs/nginx.pid 2> /dev/null` 2> /dev/null || true    #防止切割的新日志文件出现旧日志
endscript
}

/usr/local/nginx/logs/error.log {
hourly
rotate 7
missingok
dateext
compress
delaycompress
notifempty
sharedscripts
postrotate
  if [ -f /usr/local/nginx/logs/nginx.pid ]; then     #判断nginx是否启动
    /usr/local/nginx/sbin/nginx -s reload				#重启Nginx
  fi
  /bin/kill -HUP `cat /usr/local/nginx/logs/nginx.pid 2> /dev/null` 2> /dev/null || true    #防止切割的新日志文件出现旧日志
endscript
}
EOF
  • 参数解释
--配置参数解释
/usr/local/nginx/logs/access.log    指定需要轮转处理的日志文件
hourly    日志文件轮转周期,可用值为'hourly/daily/weekly/yearly'
rotate 7    轮转次数,即最多存储7个归档日志,会删除最久的归档日志
missingok    忽略错误信息
dateext        以当前日期作为命名格式
compress    轮循结束后,已归档日志使用gzip进行压缩
delaycompress     与compress共用,最近的一次归档不要压缩
notifempty        日志文件为空,轮循不会继续执行
sharedscripts    表示postrotate脚本在压缩了日志之后只执行一次
postrotate        将日志文件转储后执行的命令,以endscript结尾,命令需要单独成行
endscript        重启nginx日志服务,写入到新的文件中去,否则会依然写入重命名后的文件中
  1. 启动切割
#测试日志切割
logrotate -fv /etc/logrotate.d/nginx

#添加日志切割定时任务
(echo "0 1 * * * logrotate -fv /etc/logrotate.d/nginx > /dev/null 2>&1"; crontab -l) | crontab

日志切割-shell脚本

编辑切割脚本

mkdir -p /data/script/

cat > /data/script/nginx-rotate.sh << 'EOF'
#!/bin/bash

#注意:
#脚本应在凌晨执行,移动的是前一日的日志数据

# 你的日志文件存放目录
logs_path="/usr/local/nginx/logs/"


# 日志文件的名字,多个需要空格隔开
logs_names=(error access)
dates=`date -d "yesterday" +"%Y-%m-%d"`
mkdir -p ${logs_path}$dates/

num=${#logs_names[@]}
for((i=0;i<num;i++));do
mv ${logs_path}${logs_names[i]}.log ${logs_path}$dates/${logs_names[i]}.log
done


#nginx平滑重启
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
EOF

启用日志切割

#添加日志切割定时任务
(echo "0 1 * * * /data/script/nginx-rotate.sh > /dev/null 2>&1"; crontab -l) | crontab
  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
本火锅店点餐系统采用Java语言和Vue技术,框架采用SSM,搭配Mysql数据库,运行在Idea里,采用小程序模式。本火锅店点餐系统提供管理员、用户两种角色的服务。总的功能包括菜品的查询、菜品的购买、餐桌预定和订单管理。本系统可以帮助管理员更新菜品信息和管理订单信息,帮助用户实现在线的点餐方式,并可以实现餐桌预定。本系统采用成熟技术开发可以完成点餐管理的相关工作。 本系统的功能围绕用户、管理员两种权限设计。根据不同权限的不同需求设计出更符合用户要求的功能。本系统中管理员主要负责审核管理用户,发布分享新的菜品,审核用户的订餐信息和餐桌预定信息等,用户可以对需要的菜品进行购买、预定餐桌等。用户可以管理个人资料、查询菜品、在线点餐和预定餐桌、管理订单等,用户的个人资料是由管理员添加用户资料时产生,用户的订单内容由用户在购买菜品时产生,用户预定信息由用户在预定餐桌操作时产生。 本系统的功能设计为管理员、用户两部分。管理员为菜品管理、菜品分类管理、用户管理、订单管理等,用户的功能为查询菜品,在线点餐、预定餐桌、管理个人信息等。 管理员负责用户信息的删除和管理,用户的姓名和手机号都可以由管理员在此功能里看到。管理员可以对菜品的信息进行管理、审核。本功能可以实现菜品的定时更新和审核管理。本功能包括查询餐桌,也可以发布新的餐桌信息。管理员可以查询已预定的餐桌,并进行审核。管理员可以管理公告和系统的轮播图,可以安排活动。管理员可以对个人的资料进行修改和管理,管理员还可以在本功能里修改密码。管理员可以查询用户的订单,并完成菜品的安排。 当用户登录进系统后可以修改自己的资料,可以使自己信息的保持正确性。还可以修改密码。用户可以浏览所有的菜品,可以查看详细的菜品内容,也可以进行菜品的点餐。在本功能里用户可以进行点餐。用户可以浏览没有预定出去的餐桌,选择合适的餐桌可以进行预定。用户可以管理购物车里的菜品。用户可以管理自己的订单,在订单管理界面里也可以进行查询操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值