浅析pm2日志管理、pm2如何自定义log日志文件位置、如何使用pm2-logrotate进行日志分割

一、pm2 自定义 log 日志文件位置

  直接引用 PM2 官网描述:https://pm2.keymetrics.io/docs/usage/log-management/

1、CLI

  示例:pm2 start echo.js --merge-logs --log-date-format="YYYY-MM-DD HH:mm Z"

  When running pm2 start app.js [OPTIONS] you can pass any of this options to the CLI:

-l --log [path]              specify filepath to output both out and error logs - 指定文件路径以输出输出日志和错误日志
-o --output <path>           specify out log file - 指定输出日志文件
-e --error <path>            specify error log file - 指定错误日志文件
--time                       prefix logs with standard formated timestamp - 带有标准格式化时间戳的前缀日志
--log-date-format <format>   prefix logs with custom formated timestamp - 带有自定义格式时间戳的前缀日志
--merge-logs                 when running mutiple process with same app name, do not split file by id
- 使用相同的应用程序名称运行多个进程时,不要按id拆分文件

2、JSON way

{
  "script"          : "echo.js",
  "error_file"      : "err.log",
  "out_file"        : "out.log",
  "merge_logs"      : true,
  "log_date_format" : "YYYY-MM-DD HH:mm Z"
}

3、合并输出和错误日志

  要将所有日志合并到同一个文件中,请为错误文件、输出文件或使用其他日志文件设置相同的值。例如,这会将out和err分开,但会添加一个组合文件:

{
  "log_file": "combined.outerr.log",
  "out_file": "out.log",
  "err_file": "err.log"
}

  或者,如果您希望在没有任何其他文件的情况下将out和err合并,只需使用相同的日志文件:

{
  "out_file": "combined.log",
  "err_file": "combined.log"
}

  请注意,相关日志路径通常会写入PM2_主页(~/.PM2/logs)。

二、日志管理

  pm2的日志模块默认是每一个服务进程都分配两个默认的日志文件:(1)普通日志;(2)错误日志。

  这两个日志文件存放于 /root/.pm2/logs 中,如果 pm2 管理 5 个服务,那么该文件夹下总共有10个日志文件,并且随着时间不断增加,很容易就会产生很多个上 g 的日志文件,导致了服务器的磁盘空间不足的问题

1、解决方法:

(1)合并日志: 将所有服务的日志合并到一个日志文件中

(2)循环回滚保存 : 可以选择1小时保存一份版本并且压缩,合并日志清空,重新记录

(3)利用错误收集系统,保证服务的错误正常收集

2、如何做呢

(1)在pm2的配置文件中加入以下配置项

output: '/root/.pm2/logs/out.log',
error: '/root/.pm2/logs/error.log',
merge_logs: true

(2)安装pm2-logrotate

pm2 install pm2-logrotate@2.2.0

(3)配置循环回滚策略

┬ ┬ ┬ ┬ ┬ ┬
│ │ │ │ │ |
│ │ │ │ │ └ day of week (0 - 7) (0 or 7 is Sun)
│ │ │ │ └───── month (1 - 12)
│ │ │ └────────── day of month (1 - 31)
│ │ └─────────────── hour (0 - 23)
│ └──────────────────── minute (0 - 59)
└───────────────────────── second (0 - 59, OPTIONAL)
pm2 set pm2-logrotate:rotateInterval '* * */1 * *'     //每小时备份
pm2 set pm2-logrotate:compress true    //压缩
pm2 set pm2-logrotate:retain 3  //备份最多3份,也就是备份最近3小时的日志

三、pm2-logrotate 介绍

  pm2 本身是可以输出日志文件的,默认的文件路径:

error log path    │ /home/username/.pm2/logs/app-error-0.log
out log path      │ /home/username/.pm2/logs/app-out-0.log

  但是 pm2 的日志文件不能自动分割,这会导致一个文件不断变大,不但影响性能,查看这些日志也会带来麻烦。所以需要pm2-logrotate来实现自动分割日志。

1、pm2-logrotate:https://www.npmjs.com/package/pm2-logrotate

2、安装pm2-logrotate:pm2 install pm2-logrotate,注意是用pm2命令,不是npm命令

  安装完成后就可以通过pm2 list命令查看模块列表了

3、pm2-logrotate 具体配置说明:

  • max_size (默认10M): 当一个文件的大小超过这个值时,它将会对其进行分割。你可以在最后指定单位:10G, 10M, 10K
  • retain(默认为30个文件日志):保留日志文件数量
  • compress(默认false):是否启用压缩处理所有的旋转日志
  • dateFormat(默认格式YYYY-MM-DD_HH-mm-ss):日志文件名称格式
  • rotateModule(默认true):像其他应用程序一样旋转pm2模块的日志
  • workerInterval(默认30秒):检查日志大小的时间间隔
  • rotateInterval(默认每天午夜0 0 * * *):定时执行旋转
  • TZ(默认系统时间):偏移保存日志文件的标准tz数据库时区

  最后千万不要忘了重启服务:pm2 restart [id/name]

4、可以尝试使用 pm2 set pm2-logrotate:max_size 1K (1KB)设置日志文件最大为1KB,

  代码中console.log的内容会输出到 /home/username/.pm2/logs/app-out-0.log, 大小达到 1KB 就会自动生成  app-out-0__2018-01-25_16-58-16.log 这种格式的日志文件。

  在/home/username/.pm2/logs/(默认路径,可以配置)路径下还有

  • app-error-0.log
  • pm2-logrotate-out-1.log
  • pm2-logrotate-error-1.log 几个文件

  app-out-0.log 文件记录的就是console.log输出,app-error-0.log 记录的是错误输出,pm2-logrotate-out-1.log pm2-logrotate-error-1.log 分别记录的是分割的日志文件,是这样的内容:

"/home/username/.pm2/pm2__2018-01-25_16-57-16.log" has been created
"/home/username/.pm2/logs/app-out-0__2018-01-25_16-58-16.log" has been created
"/home/username/.pm2/logs/app-out-0__2018-01-25_16-58-46.log" has been created

 

posted @ 2021-09-01 13:27  古兰精  阅读(12687)  评论(0编辑  收藏  举报