pm2的APP日志管理插件:pm2-logrotate

背景

最近我所在项目的进程管理工具从supervisor切换到pm2了,原因之一是因为长期二者兼容导致维护成本过大。后来经过和研发同学沟通,最终选择统一成pm2,因为pm2在windows下也可以对进程进行管理,方便他们在windows本地开发环境起服务调试。

supervisor的进程配置文件中自带了日志切分策略;而pm2本身是没有日志管理功能的。如果某服务的运行时间过长,日志会不断堆积,最终会造成机器的磁盘空间耗尽。

我调研了一下pm2的日志管理,发现有个pm2-logrotate的插件,专门对pm2的app日志进行管理。

安装

1.安装插件pm2-logrotate

执行:pm2 install pm2-logrotate

2.验证是否安装成功,执行:pm2 list

看到如图的pm2-logrotate进程则表明安装成功

配置日志清理策略

1) 查看pm2-logrotate默认配置

pm2 conf pm2-logrotate

如图,我们看到了pm2-logrotate已经默认了相关配置的值

2)pm2-logrotate配置项含义

配置项

简介

备注

compress

是否通过gzip压缩日志,默认false

这里如果要收集服务的日志,不建议设置压缩,压缩后为tar.gz格式,无法被telegraf等日志收集组件识别

max_size

单个日志文件的大小,默认1k

一般设置成100M,原因是在通过日志查问题的时候,100MB的日志里面一般包含了足够多的上下文,设置的太小的话,需要跨日志查问题;设置的过大,打开文件会比较慢,而且程序打印日志的性能也会差一些。

retain

保留的日志文件个数,默认为5

retain*max_size标示了一个pm2管理的进程的日志总大小,可以根据这个推算下机器需要多大的磁盘空间,建议设置为10,也就是每个服务最多留1G总大小的日志文件。

dateFormat

日志文件名后缀追加的日期格式,默认是YYYY-MM-DD_HH-mm-ss,如果服务为XXX,则日志为XXX_YYYY-MM-DD_HH-mm-ss.log这样

默认就好

rotateModule

把pm2本身的日志也进行分割

默认就好

workerInterval

日志监控程序的进程数,默认为1

默认就好,影响日志大小的切分精度,没必要设置过大

rotateInterval

设置强制分割,默认值是0 0 * * *

即默认凌晨会进行一次日志分隔

3)修改pm2-logrotate配置

1
2
pm2 set pm2-logrotate:max_size 100M
pm2 set pm2-logrotate:retain 10

如图,我们看到已经设置成功。

设置pm2开机自启动

1
2
3
4
#配置pm2服务开机启动。
pm2 startup
#保存当前pm2 list中各应用服务状态
pm2 save

博主:测试生财

座右铭:专注测试与自动化,致力提高研发效能;通过测试精进完成原始积累,通过读书理财奔向财务自由。

csdn:https://blog.csdn.net/ccgshigao

博客园:https://www.cnblogs.com/qa-freeroad/

51cto:https://blog.51cto.com/14900374