首页 > 系统相关 >linux服务器,nginx日志切割保存

linux服务器,nginx日志切割保存

时间:2023-05-26 12:11:29浏览次数:43  
标签:log -- xxx access nginx linux 日志 com

我们都知道,默认情况下,nginx的项目log是一直被累计写入的,随着时间越久,那么这个文件就会越大,这个时候如果我们要去做一些查找和排查就会比较困难,因为日志文件太大,操作起来比较费劲。

因此我们为了规避这个问题,提出日志切割的方案。

那日志切割的原理是怎么样的,我们来分析一下,我们先统计下连续10天的日志文件情况

-rw-r--r-- 1 nginx root   60M May 1 10:28 xxx.com.access.log
-rw-r--r-- 1 nginx root   100M May 2 10:28 xxx.com.access.log
-rw-r--r-- 1 nginx root   200M May 3 10:28 xxx.com.access.log
-rw-r--r-- 1 nginx root   500M May 4 10:28 xxx.com.access.log
-rw-r--r-- 1 nginx root   800M May 5 10:28 xxx.com.access.log
-rw-r--r-- 1 nginx root   1G May 6 10:28 xxx.com.access.log
-rw-r--r-- 1 nginx root   1.5G May 7 10:28 xxx.com.access.log
-rw-r--r-- 1 nginx root   2G May 8 10:28 xxx.com.access.log
-rw-r--r-- 1 nginx root   2.5G May 9 10:28 xxx.com.access.log
-rw-r--r-- 1 nginx root   2.9G May 10 10:28 xxx.com.access.log

我们可以发现,日志每天都在变大,时间越久,就越大,那么我们切割,应该按照什么规则来切割呢?

一般情况下,我们都是按日期来切割,例如:

xxx.com.access.log20230501的日志保存为一个文件,表示5-1的日志,

xxx.com.access.log20230502的日志保存为一个文件,表示5-2的日志,

xxx.com.access.log20230503的日志保存为一个文件,表示5-3的日志,

。。。。。。

也就是每天的日志保存一个文件,至于保存多久,根据实际情况而定,3天,10天,30天,60天,更久都可以,只是保留的天数越多,文件个数就越多而已

理解了这个思路,那么我们接下来要做的事情就是从xxx.com.access.log里面把指定日期的日志提取出来并单独保存为一个文件,我们使用脚本来实现:

#!/bin/bash
# Nginx日志切割

# 在/data/log/nginx目录下生成类似xxx.log20230526格式的日志,并保留前30天数据
# 创建计划任务,每天0点0分执行:0 0 * * * /data/script/nginx_log_rotation.sh

#你的日志所在目录 LOG_PATH=/data/logs/nginx

#你的nginx服务运行的pid文件 PID=/usr/local/nginx/logs/nginx.pid

#昨天的日期 YESTERDAY=`date -d "yesterday" +%Y-%m-%d`
#因为日志目录里面可能有多个项目,这里我们使用循环读取的方式 for i in `find ${LOG_PATH} -maxdepth 1 -type f|grep -v '[0-9]$'`; do mv $i $i${YESTERDAY} done
#重新生成一个新的日志文件,用来保存新的数据 kill -USR1 `cat ${PID}`
#删除创建时间在30天以前的日志文件 find ${LOG_PATH} -mtime +30 -name "*[0-9][0-9]" | xargs rm -f exit 0

通过试验,我发现上面标红那句话说的不是很准确,因此来纠正一下

05-20项目上线,不管是什么时间点,早上,上午,下午,还是晚上都一样,xxx.com.access.log持续写入日志,那么这些日志的日期肯定都是05-20

然后05-21 00:00:00的时候执行一次脚本,通过mv命令把xxx.com.access.log日志(日期全是05-20)重命名为xxx.com.access.log20230520,并重新生成了一个空的xxx.com.access.log文件,用于继续写入日志,此时再写入的日志的日期已经是05-21了

然后05-22 00:00:00的时候执行一次脚本,通过mv命令把xxx.com.access.log日志(日期全是05-21)重命名为xxx.com.access.log20230521,并重新生成了一个空的xxx.com.access.log文件,用于继续写入日志,此时再写入的日志的日期已经是05-22了

然后05-23 00:00:00的时候执行一次脚本,通过mv命令把xxx.com.access.log日志(日期全是05-22)重命名为xxx.com.access.log20230522,并重新生成了一个空的xxx.com.access.log文件,用于继续写入日志,此时再写入的日志的日期已经是05-23了

。。。。。。

以此内推,结论是:每日凌晨0点把前一天的日志文件按日期重命名,并生成一个新的日志文件,用来写入当天的日志,而不是刚开始理解的按日期去xxx.com.access.log里面提取指定日期的日志了。

当然了,在重命名文件的时候,同步写入数据日期可能是第二天的数据(也就是xxx.com.access.log20230520文件里面最后一条数据是05-21的),或者数据丢失的情况,我们可以忽略不计哈。

 

标签:log,--,xxx,access,nginx,linux,日志,com
From: https://www.cnblogs.com/firstlady/p/17434396.html

相关文章

  • Linux服务器安装Kokkos-core 和 Kokkos-kernel
    说明由于实验室项目原因,需要跑一个Gmres算法,之前弄过kokkos,就想在kokkos-kernels里跑现有的GMRES算法库在此记录自己的安装的过程,以及自己踩过的一些坑。1.准备工作从Kokkos官网下载Kokkos以及Kokkos-kernels:https://github.com/kokkos/kokkos.git--Kokkos-corehttps:......
  • Linux下如何获取程序的进程号?
    读取端口号对应的进程号:PORT=10086netstat-tnlp|grep$PORT|grep-vgrep|grep-vkill|awk'{print$7}'|cut-d/-f1在启动脚本中写入进程号到文件tpid:echo$!>tpid读取文件中的进程号:pid=$(cattpid)......
  • 5分钟搞定Linux安装Mysql5.7(简单快捷,建议收藏)
    本文记录下我近期在Linux环境下安装Mysql5.7的实践经历。服务器版本Mysql版本Centos7.65.7.321.下载Mysql下载地址:https://downloads.mysql.com/archives/community/进入页面后选择你需要的版本进行下载,这里提供了2种格式:tar.gz和tar。如果下载不方便,可以直接从我的网盘里面下......
  • Linux 常用命令大全【yyds干货盘点3】
    1.RPM包-(Fedora,Redhat及类似系统)rpm-ivhpackage.rpm安装一个rpm包rpm-ivh--nodeepspackage.rpm安装一个rpm包而忽略依赖关系警告rpm-Upackage.rpm更新一个rpm包但不改变其配置文件rpm-Fpackage.rpm更新一个确定已经安装的rpm包rpm-epackage_name.rpm......
  • 使用linux安装kafka
    以下是在Linux上安装Kafka的详细步骤:下载Kafka二进制文件在Kafka的官方网站(http://kafka.apache.org/downloads)上下载最新版本的Kafka二进制文件。解压缩下载的文件在终端中进入下载目录,使用以下命令解压缩下载的文件:tar-xzfkafka_<version>.tgz其中,<version>应替换为下载的Kaf......
  • 2023.5.26 Linux系统基础命令
    系统⽬录结构⽂件路径定位⽬录管理命令⽂件管理命令⽂件查看命令⽂件下载命令命令查找命令字符处理命令练习如下命令系统⽬录结构⼏乎所有的计算机操作系统都是⽤⽬录结构组织⽂件。具体来说就是在⼀个⽬录中存放⼦⽬录和⽂件,⽽在⼦⽬录中⼜会进⼀步存放⼦⽬录和⽂件,以此类推形......
  • 2023.5.25 Linux系统Bash初识
    1.Linux系统终端概述2.Linux系统Bash管理2.1.Bash特性:命令补全2.2.Bash特性:命令快捷键2.3.Bash特性:命令别名2.4.Bash特性:命令流程2.5.Bash特性:路径展开2.6.Bash特性:转义字符2.7.Bash特性:获取帮助1.Linux系统终端概述服务器终端切换:Ctrl+Alt+F1…F6虚拟机终端切换:......
  • Linux上nacos启动成功,但网页无法加载
    Linux上nacos启动成功,但网页无法加载1、docker查询dockerps2、查询firewall防火墙是否打开8848端口firewall-cmd--query-port=8848/tcp若是返回yes则是打开,若是返回FirewallDisnotrunning则先打开防火墙。systemctlstartfirewalld.service3、打开8848端口f......
  • linux基础
    1、Linux用户类型      超级管理员root——所有权限      普通用户——权限有限2、shell    Shell是Linux系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。shell也被称为LINUX的命令解释器(comm......
  • RHEL8使用iSCSI部署网络存储-Linux就这么学17
        本章首先介绍计算机硬件存储设备的不同接口的优缺点,并由此切入iSCSI技术主题的讲解。iSCSI技术实现了物理硬盘设备与TCP/IP网络协议的相互结合,使得用户能够通过互联网方便地访问远程机房提供的共享存储资源。我们将学习在Linux系统上部署iSCSI服务端程序,并分别......