3天精通nginx第一天-日志切割

在这里插入图片描述

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自动日志切割【重要程度:★★★★✰】
  1. 安装定时任务

    yum install crontabs
    
  2. 添加到crontab定时任务中

    crontab -e
    #将于每天凌晨0点0分将nginx日志重命名为昨天的日期格式,并重新生成今天的新日志
    0 0 * * * bash /usr/local/nginx/sbin/cut_nginx_log.sh 
    
  3. 重启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-590-231-311-121-72021/2022/…

    常用表达式示例:

    */1 * * * *		// 每分钟执行
    59 23 * * *     // 每日凌晨(每天晚上23:59)执行
    0 1 * * *       // 每天1点执行
    0 0 * * 1       // 每周一执行
    

如果感觉这篇文章对您有帮助,可以给博主点赞、评论、收藏,这样是对博主最大的鼓励,谢谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孑疋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值