淺析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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM