目录
1. 需求背景
pm2 日志文件默认存放位置在(Linux: /root/.pm2/logs)(Windows:C:\Users\Administrator\.pm2\logs) 中,它默认有两个文件文件,一个错误记录 xxx-errot.log,一个正常记录 xxx-out.log;随着时间的拉长,文件会慢慢变大,不方便阅读也不方便部分删除。
此时可以使用 pm2-logrotate 对 pm2 日志进行优化处理,解决 pm2 日志体积过大的问题,进行日志文件的分割。
2. 什么是 pm2-logrotate ?
pm2-logrotate 是一个 pm2 的插件,可以对 pm2 日志进行管理,所以它的运行需要依靠 pm2。
3. 查看 pm2 自带的日志管理
首先我们看看 pm2 的自带日志管理功能,pm2 的日志模块默认是每一个服务进程都分配两个默认的日志文件,这两个日志文件存放于 /root/.pm2/logs 中。
启动项目后,可以通过命令 pm2 logs id/name 查看指定服务进程的 log 路径,此时屏幕上会同时输出 error log 和实时 log, 同时会打印出日志文件的路径, 如下:
C:\Users\Administrator>pm2 logs 0
[TAILING] Tailing last 15 lines for [0] process (change the value with --lines option)
D:\xxx\xxx\logs\00.services .err.log last 15 lines:
······
D:\xxx\xxx\logs\00.services .out.log last 15 lines:
······
但是 pm2 自带的日志功能是不支持自动分割的,这就会导致随之时间的推移,我们的日志文件会越来越大,不但会影响性能,在后期排查问题的时候也会很麻烦,这时我们就可以使用 pm2-logrotate 插件来解决上面的问题。
4. 安装 pm2-logrotate
注:该命令是 pm2 install
不是 npm install
pm2 install pm2-logrotate
安装完成后就可以通过 pm2 list/ls 命令查看模块列表了:
5. 查看配置指令
通过 pm2 conf pm2-logratate 可以查看详细的配置:
C:\Users\Administrator>pm2 conf pm2-logratate
Module: pm2-logrotate
$ pm2 set pm2-logrotate:max_size 10M
$ pm2 set pm2-logrotate:retain 30
$ pm2 set pm2-logrotate:compress false
$ pm2 set pm2-logrotate:dateFormat YYYY-MM-DD_HH-mm-ss
$ pm2 set pm2-logrotate:workerInterval 30
$ pm2 set pm2-logrotate:rotateInterval 0 0 * * *
$ pm2 set pm2-logrotate:rotateModule true
Module: module-db-v2
$ pm2 set module-db-v2:pm2-logrotate [object Object]
6. pm2-logrotate 具体配置说明
- max_size:(默认值 10M)每个文件最大的存储值,当一个文件的大小超过这个值时,它将会对其进行分割。你可以在最后面指定单位:10G、10M、10K。
- retain:(默认值 30)保留的日志文件个数,比如设置为 30,那么在日志文件数达到 30 个后就会将最早的日志文件删除。
- compress:(默认值 false)是否启用 gzip 压缩处理日志文件。
- dateFormat:(默认格式 YYYY-MM-DD_HH-mm-ss)日志文件名的日期格式。如设置的日志文件名为 out.log,就会自动分割生成 out-YYYY-MM-DD_HH-mm-ss.log 的日志文件。
- workerInterval:(默认 30秒)检查日志大小的时间间隔,最小值为 1。
- rotateInterval:(默认值 0 0 * * *)设置时间定时强制分割日志文件,默认值是 0 0 * * *,意思是每天晚上 0 点分割日志文件。(类似于 Linux 中的 cron 定时任务)
- rotateModule: (默认值 true)是否把 pm2 本身的日志文件也进行分割。
7. 如何设置这些值?
设置的话就是重写了配置项。
#1. 比如设置每个文件的最大存储为 1KB
pm2 set pm2-logrotate:max_size 1K
#2. 比如设置保留文件个数为 10 个
pm2 set pm2-logrotate:retain 10
#3. 如果有设置分割时间的话,使用英文双引号
pm2 set pm2-logrotate:rotateInterval "30 * * * * *"
当日志文件大小达到 1KB 就会自动分割,格式如:服务名-out__2022-12-19_14-41-42.log 的文件:
8. 停止 pm2-logrotate 服务
以前旧版本的 pm2-logrotate 想要停止,就只能卸载服务,现在新版本的可以使用 pm2 stop 进程 id
。使用 pm2 list
查看到 pm2-logrotate 进程 id 为 2 ,执行 pm2 stop 2
即可停止服务:
9. 补充:pm2 常用命令
-
pm2 start <script_file|config_file>[options]:启动指定应用,如 pm2 start index.js –name httpServer;
-
pm2 stop <name> [options]:停止指定应用,如 pm2 stop httpServer;
- pm2 list:把所有 pm2 启动实例列举出来,注意:pm2 stop 某个项目后,该项目还会存在pm2 list 的列表里面,只是状态是 stop,要想去掉该项目,用 pm2 delete;
-
pm2 restart <name> [options]:重启指定应用,如 pm2 restart httpServer;
-
pm2 reload <name>:重载项目。如果项目没有启动就执行 start;如果项目正在运行中就执行relaod,可以做到 0 秒宕机来加载新代码,生产环境多用 reload 来完成代码更新。
-
pm2 show <name> [options]:显示指定应用详情,如 pm2 show httpServer;
-
pm2 delete <appName> [options]:删除指定应用,如 pm2 delete httpServer,如果修改应用配置行为,最好先删除应用后,重新启动方才生效,如修改脚本入口文件;
-
pm2 kill:杀掉 pm2 管理的所有进程;
-
pm2 logs <name>:查看指定应用的日志,同时有标准输出和标准错误,pm2 logs httpServer –lines 5 查看最后 5 行日志;
-
pm2 monit:监控各个应用进程 cpu 和 memory 使用情况;
-
pm2 update:保存进程列表,退出旧的 PM2 并恢复所有进程,即可以实现 restart 重启进程服务功能或者更新内存中的 PM2 进程(即更新 pm2,更新PM2非常快(少于几秒)并且无缝。);
-
pm2 save:保存当前应用列表,相当于获取当前运行的 Node 应用程序的快照.;
-
pm2 resurrect:重新加载保存的应用列表,相当于恢复快照;
- pm2 startup:产生 init 脚本,保持进程活着。即可以设置为开机自启(先 pm2 save 保存当前进程状态,再 pm2 startup 生成开机自启动的命令)。
reload 与 restart 区别:
- restart 是杀死并重新启动进程。
reload 与 restart
相反,reload
实现 0 秒的停机重新加载。
也就说,使用 reload,pm2 会
逐个重新启动所有进程,始终保持至少一个进程运行。如果 reload 重新加载系统没有成功地重新加载应用程序,则超时将回退到经典的重新启动即 restart。
提示:除了指定 name 之外, 还可以使用 all: 全部程序,id: 该程序的 id
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/74541.html