用shell脚本巧解日志文件塞满磁盘导致系统挂起的困惑

2023-11-12 01:30

本文主要是介绍用shell脚本巧解日志文件塞满磁盘导致系统挂起的困惑,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

作者:田逸(formyz)

出事了,十万火急

一帮可爱的程序员,写的程序没有规划,程序、代码与日志一锅粥,而且都在某云的系统盘,不光生成的文件多,而且不做处理。有一天,来了个十万火急的求救,告知弹性伸缩功能被触发,自动增加云主机到设定的最高值,但系统仍然不能访问,需要我马上解决。登上任意云主机系统,查进程、查负载、再查磁盘使用率,我的天,系统只有一个分区,大小为40G,使用率接近100%。没有空闲空间,系统往/var/log及/tmp里无法写入数据,导致服务不响应,负载均衡监控发现云主机整体异常,认为是容量不够,就自动扩容,但扩容出来的云主机,其磁盘空间也一样是塞满了的,所以….

 

故障排查及临时措施

因为磁盘塞满了,虽然登录进去了系统,但很多操作不能进行,最后在/tmp目录下删掉一些下文件,稍微给系统腾出了一些空间,才有幸把与业务相关的服务停止,用df配合du看看是什么文件占据了这么多的空间。

 

好家伙,居然有单个日志文件超过20G的,虽然日志文件多且大,据猜测,这些程序员可能压根都没有去看这些日志,也不知道产生日志有什么意义(不看不处理等于零)。不管三七二十一,先干掉几个大的文件,让服务恢复。

终极办法

给日志分配单独的磁盘空间,并按约定的统一格式命名日志,每天夜里,做一次日志切割。具体做法是复制前一天的日志到另外一个位置,接着清空原来的日志;在归档日志目录,保留最近15天来的所有日志。

有人问,直接清空服务,会丢失少部分日志记录,为啥不停服务,等日志归档完再重启?这个是因为需要重启的服务太多,数十个,可能存在自动启动不了的风险,并且丢失少许日志是他们可以接受的。

需求明确以后,撰写了一个Shell脚本,内容如下:

[root@s176 logs]# more /usr/bin/logs_arch.sh

#!/bin/bashsource /etc/profilecd /logslist_src_logs=`ls -f  | grep log$`for i in  $list_src_logsdo#echo $icp  $i arch_logs/$i.`date +%Y-%m-%d`echo ""> $isleep 1doneif [[ $(ls -A arch_logs) ]]thenfind arch_logs/*  -mtime 15 -deleteelseecho "dir is empty"fiexit 0

先手动执行此脚本,验证其正确性及有效性,确保可以到达目的以后,再将其加入到crontab计划任务中。

第二天,查验计划任务完成情况,经多次验证,最终达到系统盘及归档盘不被塞满的目标。

这篇关于用shell脚本巧解日志文件塞满磁盘导致系统挂起的困惑的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/394170

相关文章

通过Python脚本批量复制并规范命名视频文件

《通过Python脚本批量复制并规范命名视频文件》本文介绍了如何通过Python脚本批量复制并规范命名视频文件,实现自动补齐数字编号、保留原始文件、智能识别有效文件等功能,听过代码示例介绍的非常详细,... 目录一、问题场景:杂乱的视频文件名二、完整解决方案三、关键技术解析1. 智能路径处理2. 精准文件名

web网络安全之跨站脚本攻击(XSS)详解

《web网络安全之跨站脚本攻击(XSS)详解》:本文主要介绍web网络安全之跨站脚本攻击(XSS)的相关资料,跨站脚本攻击XSS是一种常见的Web安全漏洞,攻击者通过注入恶意脚本诱使用户执行,可能... 目录前言XSS 的类型1. 存储型 XSS(Stored XSS)示例:危害:2. 反射型 XSS(Re

grom设置全局日志实现执行并打印sql语句

《grom设置全局日志实现执行并打印sql语句》本文主要介绍了grom设置全局日志实现执行并打印sql语句,包括设置日志级别、实现自定义Logger接口以及如何使用GORM的默认logger,通过这些... 目录gorm中的自定义日志gorm中日志的其他操作日志级别Debug自定义 Loggergorm中的

SpringBoot项目注入 traceId 追踪整个请求的日志链路(过程详解)

《SpringBoot项目注入traceId追踪整个请求的日志链路(过程详解)》本文介绍了如何在单体SpringBoot项目中通过手动实现过滤器或拦截器来注入traceId,以追踪整个请求的日志链... SpringBoot项目注入 traceId 来追踪整个请求的日志链路,有了 traceId, 我们在排

Python3脚本实现Excel与TXT的智能转换

《Python3脚本实现Excel与TXT的智能转换》在数据处理的日常工作中,我们经常需要将Excel中的结构化数据转换为其他格式,本文将使用Python3实现Excel与TXT的智能转换,需要的可以... 目录场景应用:为什么需要这种转换技术解析:代码实现详解核心代码展示改进点说明实战演练:从Excel到

Python脚本实现图片文件批量命名

《Python脚本实现图片文件批量命名》这篇文章主要为大家详细介绍了一个用python第三方库pillow写的批量处理图片命名的脚本,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录前言源码批量处理图片尺寸脚本源码GUI界面源码打包成.exe可执行文件前言本文介绍一个用python第三方库pi

shell脚本自动删除30天以前的文件(最新推荐)

《shell脚本自动删除30天以前的文件(最新推荐)》该文章介绍了如何使用Shell脚本自动删除指定目录下30天以前的文件,并通过crontab设置定时任务,此外,还提供了如何使用Shell脚本删除E... 目录shell脚本自动删除30天以前的文件linux按照日期定时删除elasticsearch索引s

Spring Boot整合log4j2日志配置的详细教程

《SpringBoot整合log4j2日志配置的详细教程》:本文主要介绍SpringBoot项目中整合Log4j2日志框架的步骤和配置,包括常用日志框架的比较、配置参数介绍、Log4j2配置详解... 目录前言一、常用日志框架二、配置参数介绍1. 日志级别2. 输出形式3. 日志格式3.1 PatternL

10个Python自动化办公的脚本分享

《10个Python自动化办公的脚本分享》在日常办公中,我们常常会被繁琐、重复的任务占据大量时间,本文为大家分享了10个实用的Python自动化办公案例及源码,希望对大家有所帮助... 目录1. 批量处理 Excel 文件2. 自动发送邮件3. 批量重命名文件4. 数据清洗5. 生成 PPT6. 自动化测试

使用Java实现一个解析CURL脚本小工具

《使用Java实现一个解析CURL脚本小工具》文章介绍了如何使用Java实现一个解析CURL脚本的工具,该工具可以将CURL脚本中的Header解析为KVMap结构,获取URL路径、请求类型,解析UR... 目录使用示例实现原理具体实现CurlParserUtilCurlEntityICurlHandler