首页 > 系统相关 >nginx日志切割

nginx日志切割

时间:2023-06-13 10:22:39浏览次数:44  
标签:rw 切割 -- nginx May 日志 root log

日志切割(shell脚本)

nginx日志默认是不切割的,网站运行久了自然生成大量日志,导致单文件的处理,太麻烦,因此工作里一般定期切割,一般按天切割。

-rw-r--r-- 1 root root 2.1G May  8 13:57 front_access.log

 

先纯手动的去切割日志,备份日志

1. 给nginx进程发送信号,让nginx重新生成一个新日志文件,这就是一个日志切割根本



/var/log/nginx/access.log.bak   # 1.备份原本日志文件

nginx  reload  reopen信号
# 配置文件中定义的日志文件名,是这个
2. /var/log/nginx/access.log      # 重新生成新日志文件,让新日志往这里去写



# 手动切割,修改日志
#1.准备好旧的日志文件,测试写入大量的日志记录,先用第一种办法,for循环
[root@web-8 ~]#for num in {1..10000};do curl 10.0.0.8 ; done


#2.使用支持多进程,并发写入的工具,如ab命令  apache提供的性能压测命令,给网站发送支持并发的大量的http请求。
[root@web-8 ~]#yum install httpd-tools -y

# 发送10000个http请求,且招来100个人同时发请求
ab -c 100 -n 10000  http://10.0.0.8/


# 3.当前日志数量
[root@web-8 /var/log/nginx]#cat all-server-accesss.log |wc -l
20000








# 3.让你有一个已经记录了大量日志的文件,得进行日志切割了

切割思路就是,1.先重命名,等于备份()  2. 重新记录nginx日志 (/var/log/nginx/access.log) 按天记录日志 (每天夜里的 整点分进行日志备份,日志)
按天,生成一个新的日志文件

# 备份旧日志(模拟是前一天的旧日志)

cd /var/log/nginx && mv all-server-accesss.log all-server-accesss.log.$(date '+%F')

# 还得生成新日志,得继续记录
给nginx进程发送reopen信号,重新生成新日志
# 用这种方式,可以最精确的提取进程id号。

kill -USR1 $(ps -ef|grep nginx |grep master | awk '{print $2}')

此时会生成新的日志
[root@web-8 /var/log/nginx]#ll
total 6084
-rw-r--r-- 1 www  root       0 May 23 10:10 all-server-accesss.log
-rw-r--r-- 1 root root 4160000 May 23 10:08 all-server-accesss.log.2022-05-23---10:04:17
-rw-r--r-- 1 www  root     700 May 23 10:10 error.log

此时新日志,就会记录到这个新的日志文件中了
==> all-server-accesss.log <==
/index.html  10.0.0.8 - - [23/May/2022:10:10:56 +0800] "GET / HTTP/1.1" 200 6 "-" "curl/7.29.0" "-"
/index.html  10.0.0.8 - - [23/May/2022:10:10:57 +0800] "GET / HTTP/1.1" 200 6 "-" "curl/7.29.0" "-"
/index.html  10.0.0.8 - - [23/May/2022:10:10:58 +0800] "GET / HTTP/1.1" 200 6 "-" "curl/7.29.0" "-"
/index.html  10.0.0.8 - - [23/May/2022:10:10:58 +0800] "GET / HTTP/1.1" 200 6 "-" "curl/7.29.0" "-"



对于旧的日志 你最好 创建文件夹去分类管理他们

 

 

1.shell脚本切割

1.查看当前的日志
[root@web-9 /var/log/nginx]#ls
access.log  error.log  error.movie.yuchaoit.log  error.www.yuchaoit.log  movie.yuchaoit.log  www.yuchaoit.log

2.备份当前日志文件,请用rename改名即可
[root@web-9 /var/log/nginx]#ll
total 0
-rw-r--r-- 1 root root 0 May  8 14:31 error.log
-rw-r--r-- 1 root root 0 May  8 14:31 error.movie.yuchaoit.log
-rw-r--r-- 1 root root 0 May  8 14:31 error.www.yuchaoit.log
-rw-r--r-- 1 root root 0 May  8 14:31 movie.yuchaoit.log
-rw-r--r-- 1 root root 0 May  8 14:31 www.yuchaoit.log
[root@web-9 /var/log/nginx]#
[root@web-9 /var/log/nginx]#
[root@web-9 /var/log/nginx]#rename log  log.$(date +%F) *.log
[root@web-9 /var/log/nginx]#ll
total 0
-rw-r--r-- 1 root root 0 May  8 14:31 error.log.2022-05-08
-rw-r--r-- 1 root root 0 May  8 14:31 error.movie.yuchaoit.log.2022-05-08
-rw-r--r-- 1 root root 0 May  8 14:31 error.www.yuchaoit.log.2022-05-08
-rw-r--r-- 1 root root 0 May  8 14:31 movie.yuchaoit.log.2022-05-08
-rw-r--r-- 1 root root 0 May  8 14:31 www.yuchaoit.log.2022-05-08


3.给nginx master进程发送USR1信号,等于重新打开日志记录
nginx -s reopen或者 kill -USR1 $(cat /var/run/nginx.pid)


4.试试重新生成日志
[root@web-9 /var/log/nginx]#
[root@web-9 /var/log/nginx]#kill -USR1 $(cat /var/run/nginx.pid)
[root@web-9 /var/log/nginx]#ll
total 0
-rw-r--r-- 1 www  root 0 May  8 14:36 error.log
-rw-r--r-- 1 root root 0 May  8 14:31 error.log.2022-05-08
-rw-r--r-- 1 www  root 0 May  8 14:36 error.movie.yuchaoit.log
-rw-r--r-- 1 root root 0 May  8 14:31 error.movie.yuchaoit.log.2022-05-08
-rw-r--r-- 1 www  root 0 May  8 14:36 error.www.yuchaoit.log
-rw-r--r-- 1 root root 0 May  8 14:31 error.www.yuchaoit.log.2022-05-08
-rw-r--r-- 1 www  root 0 May  8 14:36 movie.yuchaoit.log
-rw-r--r-- 1 root root 0 May  8 14:31 movie.yuchaoit.log.2022-05-08
-rw-r--r-- 1 www  root 0 May  8 14:36 www.yuchaoit.log
-rw-r--r-- 1 root root 0 May  8 14:31 www.yuchaoit.log.2022-05-08

2.完整的脚本

[root@web-9 /etc/nginx]#cat cut_log.sh 
#!/bin/bash

# 源日志目录
logs_path="/var/log/nginx"

# 备份日志目录
back_logs_path="${logs_path}/$(date -d 'yesterday' +'%F')"


# 创建备份目录,以日期命名,注意,每天零点整切割,开始记录新的一天的日志,备份目录应该是昨天
mkdir -p ${back_logs_path}


# 重命名旧日志名,注意日期
cd ${logs_path} && find . -type f |xargs -i mv {} {}.$(date -d 'yesterday'  +'%F') 


# 移动旧日志文件到该目录下
cd ${logs_path} && find . -type f  |xargs -i mv {}   ${back_logs_path}

# 重新生成新日志
kill -USR1 `cat /var/run/nginx.pid`

 

3.实践过程

1.你可以准备如下测试数据
[root@web-9 /var/log/nginx]#systemctl restart nginx
[root@web-9 /var/log/nginx]#ll
total 0
-rw-r--r-- 1 root root 0 May  8 15:17 error.log
-rw-r--r-- 1 root root 0 May  8 15:17 error.movie.yuchaoit.log
-rw-r--r-- 1 root root 0 May  8 15:17 error.www.yuchaoit.log
-rw-r--r-- 1 root root 0 May  8 15:17 movie.yuchaoit.log
-rw-r--r-- 1 root root 0 May  8 15:17 www.yuchaoit.log


2.修改日期到第二天0点
[root@web-9 /var/log/nginx]#date -s '2022-5-9 00:00'
Mon May  9 00:00:00 CST 2022
[root@web-9 /var/log/nginx]#date
Mon May  9 00:00:01 CST 2022


3.执行脚本
[root@web-9 /etc/nginx]#bash cut_log.sh 

4.查看备份的日志

 

 

4.写入定时任务

[root@web-9 /etc/nginx]#crontab -l
* * * * * /usr/sbin/ntpdate time1.aliyun.com > /dev/null 2>&1
0 0  * * * /bin/bash /etc/nginx/cut_log.sh

 

二、日志切割(logrotate工具)

清理上一次实验的环境。

shell脚本切割比较简单方便、nginx其实提供了更好用的工具
logrotate是一款自动切割日志的工具

1.检查logrotate

# rpm -qa 检查nginx的配置文件列表

[root@web-9 /etc/nginx]#rpm -qc nginx
/etc/logrotate.d/nginx
/etc/nginx/conf.d/default.conf
/etc/nginx/fastcgi_params
/etc/nginx/mime.types
/etc/nginx/nginx.conf
/etc/nginx/scgi_params
/etc/nginx/uwsgi_params

 

2.配置解释

[root@web-9 /etc/nginx]#cat /etc/logrotate.d/nginx 
/var/log/nginx/*.log {
        daily                            # 每天切割
        missingok                    # 忽略错误
        rotate 52                    # 最多保留多少个存档    
        compress                    # 切割后且压缩
        delaycompress            # 延迟压缩动作在下一次切割
        notifempty                # 日志为空就不切割
        create 640 nginx adm        # 切割的文件权限
        sharedscripts                # 共享脚本,结果为空
        postrotate                    # 收尾动作,重新生成nginx日志
                if [ -f /var/run/nginx.pid ]; then
                        kill -USR1 `cat /var/run/nginx.pid`
                fi
        endscript                        # 结束动作
}

 

3.测试切割

1.创建压测工具,生成大量日志
yum install httpd-tools -y

2.可以先清空默认日志


3.模拟100个并发用户,共计发出10000个请求
ab -c 100 -n 10000 http://10.0.0.9/

4.检查日志记录
[root@web-9 /var/log/nginx]#ll
total 960
-rw-r--r-- 1 root root      0 May  8 15:41 error.log
-rw-r--r-- 1 root root      0 May  8 15:41 error.movie.yuchaoit.log
-rw-r--r-- 1 root root      0 May  8 15:41 error.www.yuchaoit.log
-rw-r--r-- 1 root root 900000 May  8 15:41 movie.yuchaoit.log
-rw-r--r-- 1 root root      0 May  8 15:41 www.yuchaoit.log


[root@web-9 /var/log/nginx]#cat movie.yuchaoit.log |wc -l
10000

5.主动切割日志
[root@web-9 /var/log/nginx]#logrotate -f /etc/logrotate.d/nginx 
[root@web-9 /var/log/nginx]#ll
total 880
-rw-r--r-- 1 www  root      0 May  8 15:41 error.log
-rw-r--r-- 1 www  root      0 May  8 15:41 error.movie.yuchaoit.log
-rw-r--r-- 1 www  root      0 May  8 15:41 error.www.yuchaoit.log
-rw-r----- 1 www  adm       0 May  8 15:41 movie.yuchaoit.log
-rw-r--r-- 1 root root 900000 May  8 15:41 movie.yuchaoit.log.1
-rw-r--r-- 1 www  root      0 May  8 15:41 www.yuchaoit.log






6.会发现当前并没有压缩,只有下一次切割才会压缩




7.修改系统时间,模拟到了第二天
[root@web-9 /var/log/nginx]#date -s '20220509'
Mon May  9 00:00:00 CST 2022
[root@web-9 /var/log/nginx]#date +%F
2022-05-09


8.再次创建大量日志(否则空日志不会切割)
[root@master-61 ~]#ab -c 100 -n 10000 http://10.0.0.9/

9.再次查看日志
[root@web-9 /var/log/nginx]#ll
total 1840
-rw-r--r-- 1 www  root      0 May  8 15:45 error.log
-rw-r--r-- 1 www  root      0 May  8 15:45 error.movie.yuchaoit.log
-rw-r--r-- 1 www  root      0 May  8 15:45 error.www.yuchaoit.log
-rw-r----- 1 www  adm  900000 May  9 00:00 movie.yuchaoit.log
-rw-r--r-- 1 root root 900000 May  8 15:45 movie.yuchaoit.log.1
-rw-r--r-- 1 www  root      0 May  8 15:45 www.yuchaoit.log


10.开始切割,查看日志压缩情况
[root@web-9 /var/log/nginx]#logrotate -f /etc/logrotate.d/nginx
[root@web-9 /var/log/nginx]#ll
total 884
-rw-r--r-- 1 www  root      0 May  8 15:45 error.log
-rw-r--r-- 1 www  root      0 May  8 15:45 error.movie.yuchaoit.log
-rw-r--r-- 1 www  root      0 May  8 15:45 error.www.yuchaoit.log
-rw-r----- 1 www  adm       0 May  9 00:00 movie.yuchaoit.log
-rw-r----- 1 www  adm  900000 May  9 00:00 movie.yuchaoit.log.1
-rw-r--r-- 1 root root   3179 May  8 15:45 movie.yuchaoit.log.2.gz
-rw-r--r-- 1 www  root      0 May  8 15:45 www.yuchaoit.log


11.写入定时任务,即可按天切割且压缩nginx日志了
[root@web-9 /var/log/nginx]#crontab -l
01 00 * * * /usr/sbin/logrotate -f /etc/logrotate.d/nginx >> /var/log/nginx/logrotate_nginx.log 2>&1

 

 

 

标签:rw,切割,--,nginx,May,日志,root,log
From: https://www.cnblogs.com/sxy-blog/p/17463216.html

相关文章

  • 脚本日志记录
    functionlog(){echo>&2-e"[$(date+"%Y-%m-%d%H:%M:%S")]${1-}"}functiondie(){localmsg=$1localcode=${2-1}#Bashparameterexpansion-defaultexitstatus1.Seehttps://wiki.bash-hackers.org......
  • ELK分析Nginx日志和可视化展示
    ELK分析Nginx日志和可视化展示JAVA编程Linux学习 2023-06-0508:35 发表于山东收录于合集#nginx5个#nginx日志可视化1个#nginx日志1个一、概述使用ELK收集nginxaccess日志,利用Grafana做出一套可视化图表 二、环境准备环境说明操作系统:centos7.6docker......
  • Linux日志切割神器logrotate原理介绍和配置详解
    1、原理介绍create这也就是默认的方案,可以通过create命令配置文件的权限和属组设置;这个方案的思路是重命名原日志文件,创建新的日志文件。详细步骤如下:重命名正在输出日志文件,因为重命名只修改目录以及文件的名称,而进程操作文件使用的是inode,所以并不影响原程序继续输出日志......
  • 【Nginx学习笔记】-初识Nginx
    目录Nginx特点Nginx基本功能Nginx使用场景Nginx安装/卸载Docker方式运行Ubuntu上安装卸载NginxNginx命令Nginx目录结构Nginx热部署Nginx运行原理Master-Worker模式Nginx如何做到高并发下的高效处理?Nginx高可用Nginx中文文档-https://www.nginx.cn/doc/Nginx("enginex"......
  • 【Nginx学习笔记】-初识Nginx
    [TOC]Nginx中文文档-www.nginx.cn/doc/Nginx("enginex")是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。Nginx是由IgorSysoev为俄罗斯访问量第二的Rambler.ru站点开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证......
  • 【更新日志 v3.5.1】WRITE-BUG数字空间
    保存草稿功能失效文件贴标签功能失效⚙功能优化圈子排序优化✅v3.4.1        更新日志        2023年4月11日......
  • 开源日志平台GrayLog5.1.2一键安装脚本
    开源日志平台GrayLog5.1.2一键安装脚本原创 yuanfan2012 WalkingCloud 2023-06-1100:35 发表于浙江收录于合集#Linux学习笔记323个#CentOS7141个#Graylog40个#运维安全38个#开源64个GrayLog5.1.2一键安装脚本在原文章的基础下制作了此一键安装脚本CentO......
  • ELK分析Nginx日志和可视化展示
    ELK分析Nginx日志和可视化展示JAVA编程Linux学习 2023-06-0508:35 发表于山东收录于合集#nginx5个#nginx日志可视化1个#nginx日志1个一、概述使用ELK收集nginxaccess日志,利用Grafana做出一套可视化图表 二、环境准备环境说明操作系统:centos7.6docker......
  • Nginx可视化平台,图形化设置NGINX的配置参数
    超强大的Nginx可视化管理平台Nginx-Proxy-Manager中文入门指南Docker中文社区 2023-05-1908:00 发表于陕西今天给大家介绍一款Nginx可视化管理界面,非常好用,小白也能立马上手。nginx-proxy-manager是一个反向代理管理系统,它基于NGINX,具有漂亮干净的WebUI。......
  • Windows服务器IIS日志存放位置 及 查看方法
    用户每打开一次网页,iis都会记录用户IP、访问的网页地址、访问时间、访问状态等信息,这些信息保存在iis日志文件里,方便网站管理员掌握网页被访问情况和iis服务器运行情况。如果网页被恶意访问(如注入数据库),日志中会有相应的记录,并且能看到注入者用什么代码注入,便于分析网站漏洞。i......