首页 > 系统相关 >Linux日志管理经验总结(crontab+logrotate)

Linux日志管理经验总结(crontab+logrotate)

时间:2023-09-04 10:34:26浏览次数:36  
标签:文件 清理 crontab logrotate 应用服务 Linux 组件 日志

Linux系统-部署-运维系列导航

 

日志管理目标

日志的管理,一般包括两大部分
  1. 日志内容,合理的日志内容(日志锚点,内容格式,等)可以为应用服务的执行记录、问题排查提供最有力的帮助
  2. 日志存档规则,包括日志分割方式(按日期、按文件大小,等),日志存档数量,如只保存最近一个月,等
对于自行开发的应用服务,日志的管理可以由开发人员通过日志组件定制化,如logback,log4j等,但对于安装部署的第三方组件如MySQL、nginx、redis等,以及开发引用的第三方组件如nacos,sentinel等,除非组件开放了丰富的日志配置参数,否则将无法按照开发人员的要求管理日志文件。  

特殊日志场景

一些特殊应用服务或组件,如果没有进行特定的配置操作,默认情况下将使日志文件不受控制,为后期清理造成麻烦,常见的有
  • nohup方式启动应用服务,如果未配置日志重定向,或者重定向到了单文件,则系统将日志持续输出在nohup.out文件或重定向的单文件
  • mysql数据库支持配置日志文件路径,但无法自动清理日志内容
  • nginx支持配置日志内容模板以及日志文件路径(默认access.log、error.log),但无法自动清理日志内容
以上类似情况下,日志将始终在单文件中持续输出,过了一定时间后,日志文件将占用无限大的磁盘存储,对整个系统造成运行故障。  

特殊工具 - 定时清理

可以使用Linux自带定时工具 crontab + 清理日志脚本的方式,实现定时清理,示例如下
crontab -e
# 定时清理日志,保留最近7天
1 0 * * * find /logs.dir/ -mtime +7 | xargs rm -rf
特别关注 Linux系统下,有些应用服务组件如nginx与MySQL,运行过程中,对日志存储文件将使用文件句柄跟踪,如此会有以下问题:
  1. 将日志文件重命名,同时新建一个同名的文件,组件依然会向原来的文件中输出日志
  2. 将日志文件删除(rm -f),也需要同时将应用服务组件进程重启才行,否则删除的文件也会由于被占用而无法释放磁盘资源
  3. 删除但被占用的文件将无法通过 ls -l 命令查看,也无法通过 du -sh 命令统计磁盘占用,但 df -h 命令会显示真实磁盘占用,只能通过 lsof 命令,查看打开的文件描述符,对运维造成很大麻烦
针对这种情况
  1. 如果只是单次清理文件,可以使用清空文件的方式,如 echo > log.log,或其他清空的方式,但切记不能直接 rm -f 删除
  2. 如果已经执行 rm -f 删除,则可以使用 lsof | grep -i deleted 命令查看被删除但无法回收的文件,然后将相应的进程重启即可回收
  3. 如果要保留日志内容,又要控制存储容量,则需要使用logrotate的 拷贝+清空 方式,即只是将日志文件内容拷贝一份存档,然后清空当前日志文件(而非删除)

 

特殊工具 - logrotate

对于不方便进行自定义日志管理的应用服务组件,可以自定义脚本维护,可以自行开发应用软件维护,但强联推荐使用Linux系统集成的日志管理工具logrotate,该工具由Linux系统crontab定时调度,支持为相关日志文件(或其他文件)自定义存储规则,但日志内容只能按照应用服务组件的实现输出。   logrotate提供的功能参数很多,比较常用的如下
  • 日志分割周期
  • 日志文件扩展名
  • 日志文件分割方式,包括新建+删除,拷贝+清空,等,适用不同应用服务场景
  • 日志内容压缩
  • 日志文件存档数量
  logrotate具体适用教程,网上教程很多,挑选整理如下

 

附录:logrotate简易配置

MySQL
/data/mysql/log/mysqld.log
{
    daily
    dateext
    dateyesterday
    copytruncate
    notifempty
    missingok
    olddir backup
    rotate 60
        compress
}

nginx
/usr/local/nginx/logs/access.log
/usr/local/nginx/logs/error.log
{
    daily
    dateext
    dateyesterday
    copytruncate
    notifempty
    missingok
    olddir backup
    rotate 30
        compress
}
 

附录:关于常用组件运行时日志管理

  1. nginx不支持自动清理,默认单文件持续写入,且不会自动滚动
  2. mysql不支持自动清理,默认单文件持续写入,且不会自动滚动
  3. zookeeper默认支持自动清理(限制文件大小和个数),log4j配置文件维护
  4. redis不支持自动清理,只记录少量核心日志,单文件持续写入,但默认只记录少量核心日志,可以不处理
  5. kafka的数据记录日志(topic、offset等),支持自动清理,配置文件维护
  6. kafka操作日志,默认在安装目录logs目录,支持自动滚动,但不会自动清理,log4j配置文件维护
 

标签:文件,清理,crontab,logrotate,应用服务,Linux,组件,日志
From: https://www.cnblogs.com/xiaoyaozhe/p/17671275.html

相关文章

  • Linux开机启动方案
    Linux系统-部署-运维系列导航一.系统服务如果组件已经安装为系统服务,默认服务文件为xxx.service,存储在/usr/lib/systemd/system可以使用以下2种方式设置开机启动systemctl方式systemctlenable/disablexxx指令设置/取消开机启动--查看是否开机启动[root@localhosts......
  • Linux系统screen命令的用法
    1、https://www.cnblogs.com/watson04/p/16950232.html多窗口screen,像许多的窗口管理器一样,能支持多窗口。这个功能在处理多个任务且同时没有打开新的会话时很有用。作为一个系统管理员,我常常要同时开四五个SSH会话。在每个shell下,我可能要处理两三个任务。不使用screen的话,......
  • Tenable Nessus 10.6.0 (Unix, Linux, Windows) - #1 漏洞评估解决方案
    TenableNessus10.6.0(Unix,Linux,Windows)-#1漏洞评估解决方案发布Nessus试用版自动化安装程序,支持macOSVentura、RHEL9和Ubuntu22.04请访问原文链接:https://sysin.org/blog/nessus-10/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgNessus漏洞评......
  • Linux基本命令(2)
    ls-列出当前目录下的文件和文件夹示例:ls-l显示详细的文件列表注释:ls命令用于列出当前目录下的文件和文件夹。使用-l选项可以显示更详细的信息。cd-切换目录示例:cd/path/to/directory切换到指定路径的目录注释:cd命令用于切换当前工作目录到指定的路径。pwd-显示当......
  • 轻松浏览Linux文件系统:ls命令的实用指南
    当谈到Linux命令行操作时,ls是一个非常基础但又非常重要的命令。它用于列出文件和目录,帮助您浏览和了解当前工作目录的内容。在这篇博客文章中,我们将介绍ls命令的基本用法和一些常见的使用示例。什么是ls命令?ls是"list"的缩写,是Linux和Unix操作系统中的一个命令行工具,用于列出文件和......
  • QQ for Linux 正式发布 3.2.0
    QQforLinux正式发布3.2.0来源:OSCHINA编辑: 局2023-09-0215:57:28 8Linux版QQ正式发布了3.2.0。QQLinux版3.2.0(2023.09.01)1、新增夜间模式并支持跟随系统,享受更沉浸的聊天体验;2、新增QQ截图能力,快捷方便,提升办公效率;3、新增群应用功能,图片......
  • linux查看平均cpu占用率
    如果想要获取平均占用率,可以在top命令后添加"-d"参数,指定刷新时间间隔(单位为秒),例如top-d1这样会每隔1秒更新一次CPU的占用率信息。请注意,top命令会实时显示系统状态,您可以按下键盘上的"q"来退出top命令。......
  • Linux的常用命令
    Linux常用命令名称作用和用法说明ls查看目录与文件#显示当前目录下所有文件的详尽信息:ls-lamkdir创建目录#在当前目录下创建test目录:mkdirtest#在/opt/test目录下创建目录img,若无test目录,先创建test目录:mkdir-p/opt/test/imgcat查看文件内容#查看desc.txt的内容:catdesc......
  • linux IP地址原理,分类,子网划分,VLAN,TRUNK详解
    鱼弦:全栈领域创作新星创作者、51CTO(Top红人+专家博主)、github开源爱好者(go-zero源码二次开发、游戏后端架构https://github.com/Peakchen) LinuxIP地址原理和分类在计算机网络中,IP地址是用于唯一标识网络中的主机的一组数字,它由32位二进制数表示,通常采用点分十进制表示法。IP......
  • linux常用命令
    1、基本命令   ipaddr:查看ip   pwd:查看当前所在目录   shutdown-hnow:立即关机   reboot:重启   pingip或域名:查看网络是否ok   ctrl+c:强制结束占用窗口命令   top:查看内存情况   kill-9pid:强制杀死指定进程  ......