背景
最近我所在项目的进程管理工具从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配置
pm2 set pm2-logrotate:max_size 100M
pm2 set pm2-logrotate:retain 10
如图,我们看到已经设置成功。
设置pm2开机自启动
#配置pm2服务开机启动。
pm2 startup
#保存当前pm2 list中各应用服务状态
pm2 save
博主:测试生财(一个不为996而996的测开码农)
座右铭:专注测试开发与自动化运维,努力读书思考写作,为内卷的人生奠定财务自由。
内容范畴:技术提升,职场杂谈,事业发展,阅读写作,投资理财,健康人生。
csdn:https://blog.csdn.net/ccgshigao
博客园:https://www.cnblogs.com/qa-freeroad/
51cto:https://blog.51cto.com/14900374
微信公众号:测试生财(定期分享独家内容和资源)