• 浅析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

     

  • 相关阅读:
    将CMD内的显示内容输出到txt文件
    上传项目到Github
    利用百度地图API,在浏览器中找到自己的位置
    操作系统相关知识
    字符串的全排列
    二维数组做函数参数、指向指针的指针做函数参数
    strstr函数与strcmp函数
    华为机试题——数组排序,且奇数存在奇数位置,偶数存在偶数位置
    单链表的建立,插入,显示,查找删除以及反转
    《深入了解 Linq to SQL》之对象的标识 —— 麦叔叔呕心呖血之作
  • 原文地址:https://www.cnblogs.com/goloving/p/15214104.html
Copyright © 2020-2023  润新知