一日一技:使用 Linux 自带的 logrotate 管理你的所有日志

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
日志服务 SLS,月写入数据量 50GB 1个月
简介: 一日一技:使用 Linux 自带的 logrotate 管理你的所有日志

摄影:产品经理吃饭:kingname & 产品经理

我们在开发的过程中,会创建非常多的日志,对日志进行 rotate 是一个基本要求。

所谓的rotate,可以理解为对日志按照一定的规则进行切分。例如,每天晚上0点生成一个新的日志文件,并把老的文件归档。又或者每个日志文件超过多少 MB 以后就自动切分,并把老的内容单独存档或者压缩。存档以后的日志文件保存多少个。超过数量以后先删除老日志再删除新日志。

如果我们使用的是 Python,那么我们可以使用自带的logging模块或者第三方的logoru来写日志。但如果我们使用像是 MongoDB这种第三方的软件,那么要对日志进行 rotate 就非常麻烦了。如果不加以管理,MongoDB 的日志很容易就达到几十GB。

还有其他软件,他们的日志散落在系统的各个位置,我们应该如何替他们 rotate 呢?

如果你的系统是 Linux,那么主流发行版一般都会自带一个软件,叫做logrotate,通过简单的配置,就能让它帮你管理系统中各个地方的日志。

我们以 MongoDB 为例来进行说明。

MongoDB 的日志默认放在/var/log/mongodb文件夹中,如下图所示:

如果不干涉,那么所有的日志内容会无限制追加到这一个mongod.log文件中。并且,如果你的 MongoDB 正在运行,即使你使用rm命令删除了这个文件,它占用的空间也不会释放。

但使用logrotate来管理这个文件以后,它能通过truncate操作清空这个文件,从而实现释放空间的目的。

logrotate的配置文件地址有两个,第一个主配置文件地址为/etc/logrotate.conf,其内容如下:

另一个专门用于存放配置文件的地址为/etc/logrotate.d/,它里面的每一个文件都是一个配置文件,如下图所示:

我们要使用logrotate来管理 MongoDB,所以就在/etc/logrotate.d/文件夹中创建一个mongodb文件(文件名可以任意取),内容如下:

/var/log/mongodb/*.log {
    rotate 5
    copytruncate
    missingok
    compress
    maxsize 200M
    daily
}

如下图所示:

这个配置文件的意义如下:

*第一行用于指定 MongoDB 日志文件的地址为/var/log/mongodb/文件夹下面所有以.log结尾的文件。

  • rotate 5表示保留5份日志文件
  • copytruncate 表示,日志满足要求以后,先复制一份,然后把原来的日志文件清空
  • missingok 表示如果这个文件夹下面为空,也没关系,自动忽略
  • compress 表示要把日志进行压缩
  • maxsize 200M 表示每个日志最多200MB,达到200MB 以后,就进行 rotate。
  • daily 表示每天检查一次

保存这个文件,logrotate将会每天自动检查 MongoDB 的日志文件,如果发现它大小达到了200MB,那么首先会把这个日志复制出来一份(此时将会占用400MB 空间),然后把原来的日志文件内容清空(此时恢复200MB 空间占用)。被复制出来的日志文件会被压缩,并存放在当前文件夹中。当日志数量达到5个的时候,第六个日志文件生成,最开始压缩的那个文件被删除。从而保证 MongoDB 的日志及其备份总共占用空间不超过1GB。

logrotate非常强大,还有非常多的配置参数用于实现各种日志管理的操作,大家可以执行命令man logrotate查看它的帮助文档。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
27天前
|
存储 运维 监控
Linux--深入理与解linux文件系统与日志文件分析
深入理解 Linux 文件系统和日志文件分析,对于系统管理员和运维工程师来说至关重要。文件系统管理涉及到文件的组织、存储和检索,而日志文件则记录了系统和应用的运行状态,是排查故障和维护系统的重要依据。通过掌握文件系统和日志文件的管理和分析技能,可以有效提升系统的稳定性和安全性。
47 7
|
30天前
|
监控 安全 Linux
启用Linux防火墙日志记录和分析功能
为iptables启用日志记录对于监控进出流量至关重要
|
2月前
|
监控 Linux 开发者
如何在 Linux 中优雅的使用 head 命令,用来看日志简直溜的不行
`head` 命令是 Linux 系统中一个非常实用的工具,用于快速查看文件的开头部分内容。本文介绍了 `head` 命令的基本用法、高级用法、实际应用案例及注意事项,帮助用户高效处理文件和日志,提升工作效率。
45 7
|
3月前
|
监控 网络协议 安全
Linux系统日志管理
Linux系统日志管理
78 3
|
3月前
|
监控 Linux 测试技术
Linux系统命令与网络,磁盘和日志监控总结
Linux系统命令与网络,磁盘和日志监控总结
87 0
|
3月前
|
监控 Linux 测试技术
Linux系统命令与网络,磁盘和日志监控三
Linux系统命令与网络,磁盘和日志监控三
63 0
|
5月前
|
Java Linux C++
【Azure 应用服务】App Service For Linux 部署Java Spring Boot应用后,查看日志文件时的疑惑
【Azure 应用服务】App Service For Linux 部署Java Spring Boot应用后,查看日志文件时的疑惑
|
5月前
|
存储 Linux 网络安全
【Azure 应用服务】App Service For Linux 如何在 Web 应用实例上住抓取网络日志
【Azure 应用服务】App Service For Linux 如何在 Web 应用实例上住抓取网络日志
|
Shell Linux
12.13 Linux工作管理
工作管理指的是在单个登录终端(也就是登录的 Shell 界面)同时管理多个工作的行为。也就是说,我们登陆了一个终端,已经在执行一个操作,那么是否可以在不关闭当前操作的情况下执行其他操作呢?
146 0
12.13 Linux工作管理