nginx日志切割
nginx的日志分为访问日志(access.log)和错误日志(error.log),日志过大时会将服务器的空间占满,这样就会影响这个系统的正常运行,nginx日志过大也不利于日志的分析,所以需要按照一段时间将日志分割处理。
使用nginx配置文件进行日志分隔【重要程度:★★★✰✰】
使用该配置时需要nginx具有创建文件的权限,一般使用user root;
1.使用if语句进行判断
日志分隔在server区块、location区块配置,在http区块是不支持if语句的。但只能重新命名名字,不能创建文件夹。
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"'; # 日志输出信息设置
if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})") {
set $year $1;
set $month $2;
set $day $3;
}
access_log logs/access-$year-$month-$day.log main; # 定义本虚拟主机的访问日志
2.使用map语句进行判断
日志分隔在http区块进行配置,server区块、location区块是不支持map语句的。但只能重新命名名字,不能创建文件夹。
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"'; # 日志输出信息设置
map $time_iso8601 $logdate {
default 'date-not-found';
'~^(?<ymd>\d{4}-\d{2}-\d{2})' $ymd;
}
access_log logs/access-$logdate.log main; # 定义本虚拟主机的访问日志
map命令官方解析为:http://nginx.org/en/docs/http/ngx_http_map_module.html
nginx手动日志切割【重要程度:★★★★✰】
日志常见的配置参数:
$remote_addr | 客户端的ip地址(代理服务器,显示代理服务ip) |
---|---|
$remote_user | 用于记录远程客户端的用户名称(一般为“-”) |
$time_local | 用于记录访问时间和时区 |
$request | 用于记录请求的url以及请求方法 |
$status | 响应状态码,例如:200成功、404页面找不到等。 |
$body_bytes_sent | 给客户端发送的文件主体内容字节数 |
$http_user_agent | 用户所使用的代理(一般为浏览器) |
$http_x_forwarded_for | 可以记录客户端IP,通过代理服务器来记录客户端的ip地址 |
$http_referer | 可以记录用户是从哪个链接访问过来的 |
1.进入/usr/local/nginx/sbin目录下,并创建shell文件
cd /usr/local/nginx/sbin
touch cut_nginx_log.sh
chmod +x cut_nginx_log.sh
2.编辑shell文件,编写日志切割命令
#!/bin/bash
# This script run at 00:00
# The Nginx logs path
logs_path="/usr/local/nginx/logs/historyLog"
logPath="/usr/local/nginx/logs/"
record_time=$(date -d "yesterday" +"%Y-%m-%d")
#创建备份目录
mkdir -p ${logs_path}/
#将日志移动到上面的目录中
mv ${logPath}/access.log ${logs_path}/access、access.${record_time}.log
mv ${logPath}/error.log ${logs_path}/error、error.${record_time}.log
#nginx重读配置文件
kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid)
3.执行cut_nginx_log.sh脚本
nginx自动日志切割【重要程度:★★★★✰】
-
安装定时任务
yum install crontabs
-
添加到crontab定时任务中
crontab -e #将于每天凌晨0点0分将nginx日志重命名为昨天的日期格式,并重新生成今天的新日志 0 0 * * * bash /usr/local/nginx/sbin/cut_nginx_log.sh
-
重启crontab服务
/sbin/service crond restart //重启服务 /sbin/service crond reload //重新载入配置
-
常用定时任务命令
CentOS6上的cron命令:
service crond start // 启动服务 service crond stop // 关闭服务 service crond restart // 重启服务 service crond reload // 重新载入配置 service crond status // 查看状态 crontab -e // 编辑任务 crontab -l // 查看任务列表
CentOS7上的cron命令:
systemctl start crond.service/crond start // 启动服务 systemctl stop crond.service/crond stop // 关闭服务 systemctl restart crond.service/crond restart // 重启服务 systemctl reload crond.service/crond reload // 重新载入配置 systemctl status crond.service/crond status // 查看状态
-
crontab命令介绍
分 时 日 月 星期几 年(可选) 取值范围 0-59 0-23 1-31 1-12 1-7 2021/2022/… 常用表达式示例:
*/1 * * * * // 每分钟执行 59 23 * * * // 每日凌晨(每天晚上23:59)执行 0 1 * * * // 每天1点执行 0 0 * * 1 // 每周一执行
如果感觉这篇文章对您有帮助,可以给博主点赞、评论、收藏,这样是对博主最大的鼓励,谢谢。