Linux 自带的日志轮询功能
很多时候,系统上的程序在运行的过程中会往某个本地文件写日志,久而久之这个文件会变得非常巨大,很难查看不说,而且占据了大量的磁盘空间。
通常来说,我们会以时间为单位来对日志进行划分,比如每天的日志都放在不同的文件中,然后时间比较久的日志(比如 3 个月以前的日志)我们会选择自动丢弃从而保证磁盘空间不被浪费。这些操作你可以自己写程序来实现,当然了,为了避免重复造轮子,你也可以下载第三方的应用程序来帮助你完成。但大部分的 Linux 系统下其实已经为你准备了这样的功能,你只需添加配置文件即可。
以 Ubuntu 的系统为例,系统下的日志轮询文件是 /etc/logrotate.conf
。但除非你需要对一些默认参数进行修改,通常来说不需要理会这个文件,你需要做的只是把你自己的配置文件放在 /etc/logrotate.d
目录下,/etc/logrotate.conf
会自动读入 /etc/logrotate.d
下的所有文件。
我以自己的配置文件为例来具体展示如何写一个日志轮询的配置文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 配置文件路径:/etc/logrotate.d/pm2-customized
# 需要进行轮询操作的文件
/root/.pm2/logs/appTcp-out.log
/root/.pm2/logs/out-http.log
/root/.pm2/logs/appTcp-error.log
/root/.pm2/logs/error-http.log
{
rotate 12 # 只保留最近的 12 个文件
weekly # 预设每周对上面列的 4 个文件分别进行轮询
copy # 拷贝一份原文件作为保留文件,而非对其做重命名或替换操作
dateext # 以日期作为保留文件名的结尾
compress # 对原文件进行压缩后再作为保留文件保存
notifempty # 如果原文件是空的,则不进行轮询
sharedscripts # 定义脚本
postrotate # 在轮询操作结束后执行脚本
/usr/bin/pm2 flush # 具体脚本命令
endscript # 结束脚本
}
这里有几点需要注意的:
- 文件名一定要写绝对路径
- 最好是对文件进行压缩存储,这样更节省空间,你可以通过
zcat
来直接查看压缩文件中的内容 /usr/bin/pm2 flush
是pm2
命令,和这里的轮询无关,它会清空原文件中的的所有内容
经过一段时间,部分日志就变成下面这样子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
...
-rw-r--r-- 1 root root 102K Aug 28 06:53 appTcp-out.log
-rw-r--r-- 1 root root 919K Jun 11 06:25 appTcp-out.log-20230611.gz
-rw-r--r-- 1 root root 2.4M Jun 19 06:25 appTcp-out.log-20230619.gz
-rw-r--r-- 1 root root 1.9M Jun 25 06:24 appTcp-out.log-20230625.gz
-rw-r--r-- 1 root root 2.5M Jul 3 06:24 appTcp-out.log-20230703.gz
-rw-r--r-- 1 root root 2.0M Jul 9 06:25 appTcp-out.log-20230709.gz
-rw-r--r-- 1 root root 2.6M Jul 17 06:25 appTcp-out.log-20230717.gz
-rw-r--r-- 1 root root 1.9M Jul 23 06:24 appTcp-out.log-20230723.gz
-rw-r--r-- 1 root root 2.6M Jul 31 06:24 appTcp-out.log-20230731.gz
-rw-r--r-- 1 root root 2.0M Aug 6 06:24 appTcp-out.log-20230806.gz
-rw-r--r-- 1 root root 2.8M Aug 14 06:25 appTcp-out.log-20230814.gz
-rw-r--r-- 1 root root 2.1M Aug 20 06:25 appTcp-out.log-20230820.gz
-rw-r--r-- 1 root root 2.8M Aug 28 06:24 appTcp-out.log-20230828.gz
...
之前的话,日志都被写到 appTcp-out.log
文件,这个文件几个月就会到达几个 GB 的大小,但在使用了轮询之后,你可以看到总共的容量无非几十 MB,而且过期的日志会被自动丢弃,无需手动维护。
Linux 下的轮询功能非常强大,具体的参数你可以通过 man lograte
查看,或是在 网页页面 上查看
This post is licensed under CC BY 4.0 by the author.