控制pm2的日志文件大小

下班前发现线上服务器的 100G 磁盘只有 10% 空闲空间了,检查了一下是 pm2 的日志文件(在 ~/.pm2/logs 目录下)占用的。

参考帖子 Limit logs size? · Issue #535 · Unitech/pm2 安装 pm2-logrotate pm2 install pm2-logrotate

安装完成后,观察到正在按时间切分成多个日志文件,但空闲空间在迅速减少,眼看就要低于 5% 了,要是磁盘满了会影响关键的 redis 数据库,

立即手工将日志文件全部删除,但是磁盘空闲空间在继续减少,明白是 pm2 或者 pm2-logrotate 打开了日志文件导致空间无法释放,

立即执行 pm2 kill , 等 crontab 将服务重新拉起,一分钟后确认危机解决。好在这台服务器上的 node.js 服务都不是很关键,

没有造成太大影响,圣诞节快乐:)

今天(2016-02-16)运维人员发现pm2的日志快占满磁盘

pm2-logrotate (当前版本为1.3.1) 默认情况下,并未限制日志文件数,旧的日志文件未自动删除释放空间,需要设置 retain 配置项:

pm2 set pm2-logrotate:retain 100

这样最多会保留 100 个日志文件。

max_size 配置项默认是 10MB,并不意味着切割出来的日志文件大小一定就是 10MB,而是检查时发现日志文件大小达到 max_size,则触发日志切割。

interval 和 interval_unit 配置项指定了按时间维度进行日志切割。

切割是指将日志文件内容移到名称为 <project name>-out__YYYY-MM-DD-HH-mm.log 的日志文件中,所以日志文件大小往往是超过 max_size 的。

由于默认配置 interval 为 1, interval_unit 为 DD,所以每天至少会切割一次日志,每分钟当发现日志大小超过 10MB,也会触发一次日志切割。

pm2-logrotate 现阶段小问题还是比较多的(详见项目的 issues ),如:

更好的方式可能是使用操作系统的 logrotate 服务。