node 使用 pm2 日志管理及使用 pm2-logrotate 进行日志分割

news2024/10/7 13:17:25

目录

1. 需求背景 

2. 什么是 pm2-logrotate ?

3. 查看 pm2 自带的日志管理

4. 安装 pm2-logrotate

5. 查看配置指令 

6. pm2-logrotate 具体配置说明

7. 如何设置这些值? 

8. 停止 pm2-logrotate 服务

9. 补充:pm2 常用命令


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 为 0 ,执行 pm2 stop 0 即可停止服务:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/101844.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java学习笔记 --- MySQL-函数

一、合计/统计函数 count Count返回行的总数 SELECT COUNT(*) 列名 FROM table_name WHERE where_definition # 演示 mysql 的统计函数的使用 -- 统计一个班级共有多少学生&#xff1f; SELECT COUNT(*) FROM student -- 统计数学成绩大于90的学生有多少个 SELECT COUNT(*) FR…

Linux——vim的使用

实验5 vim的使用 一、两种模式&#xff1a; 命令行模式和编辑模式&#xff08;前者还有底行模式&#xff0c;命令行模式输入&#xff1a;就是底行模式&#xff09; 切换方法&#xff1a;进入vim后默认在命令模式&#xff0c;可以通过输入a后者i进入编辑模式&#xff0c;或者…

SQL学习day3

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 高级过滤Q1、检索供应商名称Q2、检索并列出已订购产品的清单(稍难&#xff09;Q3、返回所有价格在 3美元到 6美元之间的产品的名称和价格总结Q1、检索供应商名称 编写 SQL 语…

2022全年度吸尘器十大热门品牌销量榜单

近年来&#xff0c;随着社会经济的发展及人们生活水平的提升&#xff0c;吸尘器的市场需求得到不断地释放&#xff0c;行业规模也在不断扩大。但由于起步较晚&#xff0c;居民的消费能力尚未得到完全释放&#xff0c;目前我国吸尘器市场的渗透率还较低。 根据鲸参谋平台的数据统…

初识Go语言

Go是一种静态强类型、编译型、并发型语言。 一、Go语言的设计思维 尽可能少的方式去处理事情&#xff0c;减少选择的烦恼。 go的特点&#xff1a; 仅有25个关键字&#xff0c;简洁的语法内置垃圾回收器&#xff0c;大大降低程序员管理内存的负担去除隐式类型转换、去除指针…

UNIAPP实战项目笔记56 注册时验证手机号是否存在

UNIAPP实战项目笔记56 注册时验证手机号是否存在 注册时候需要拦截并验证登录 通过验证的直接跳转,未通过验证的提示手机号已存在 实际案例图片 后端接口文件 index.js var express require(express); var router express.Router(); var connection require(../db/sql.js);…

成端/接续功能使用说明

在nVisual系统中&#xff0c;接续/成端功能可以高效、准确、清晰的查看熔纤盒内的光纤连接情况。今天小编来给大家介绍一下成端和接续功能的使用。 一、成端 1. 功能入口 成端功能的入口有两种方式&#xff0c;第一个是鼠标右击选中线缆&#xff0c;出现连线右键菜单&#xf…

互联网新热——元宇宙带来了全新数字应用模式,推动数字经济的发展

大家平时电视上看到的在元宇宙中逛街、购物、社交&#xff0c;娱乐、看直播和表演……这些高度沉浸式地互动体验&#xff0c;都可以在“大唐灵境”实现了&#xff01; 近日&#xff0c;太一集团与大唐不夜城联手打造的中国首个文旅电商元宇宙“大唐灵境”将正式开放“东市”商…

阿里云轻量级服务器部署了项目外网无法访问

阿里云轻量级服务器部署了项目外网无法访问1、问题描述2、配置安全组权限2.1、阿里云控制台权限配置&#xff08;热加载&#xff0c;不用重启&#xff09;2.2、在服务器中查看防火墙中有哪些端口被开放&#xff08;非热加载&#xff0c;最后一定要手动重新加载&#xff09;3、如…

MAC Python 虚拟环境配置方法parcharm

MAC Python 虚拟环境配置方法&parcharm一、安装环境包1.找个风水宝地2.安装virtualenv包二、创建虚拟环境1.对比记录2.创建虚拟环境启动虚拟环境1.启动命令2.环境对比三、退出虚拟环境四、pycharm使用虚拟环境1.打开parcharm&#xff0c;新建一个项目&#xff0c;起个名字。…

excel账龄计算:两个经典公式快速制作账龄统计表

财务工作者对于账龄统计表都不陌生&#xff0c;我们之前也分享过很多关于账龄统计表的操作技巧和公式解析&#xff0c;但是今天遇到的这种账龄统计表&#xff0c;还是让财务小姐姐犯了难&#xff0c;到底是个怎样的账龄统计表呢&#xff0c;一起来看看吧&#xff1a; 如图所示&…

【工厂方法模式-3】工厂方法模式的代码实现及使用场景

在前面我们学习了简单工厂模式&#xff0c;简单工厂模式适用于产品对象比较固定的使用场景。简单工厂模式工厂模式存在两个比较大的问题&#xff0c;一个是新产品的加入必须修改工厂类&#xff0c;违反了开闭原则&#xff1b;另一个是所有产品对象都与工厂类耦合&#xff0c;无…

校友录网站

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a;网站前台&#xff1a; 关于我们、联系我们、资讯信息、用户信息、用户动态、动态评论 管理员功能&#xff1a; 1、管理关…

基于vmdk文件创建虚拟机

基于vmdk文件创建虚拟机 1、准备vmdk文件 下载地址如下: 链接:https://pan.baidu.com/s/1coQuZw8cgg5oU5bSegsS7Q?pwd=5mv0 提取码:5mv0 账号/密码:root/sinzuo 2、创建虚拟机 选择自定义的方式创建虚拟机 硬件兼容性选择17,尽可能的向下兼容。 选择稍后安装操作系…

使用 IQR、Z-score、LOF 和 DBSCAN 进行异常值检测

你在处理异常值吗&#xff1f;哪种方法更适合检测偏斜或正态分布数据的异常值&#xff1f; 无论你是在执行 EDA 之前进行数据清理过程&#xff0c;将数据传递给机器学习模型&#xff0c;还是执行任何统计测试&#xff0c;本文都将帮助你获得许多此类问题的答案以及实际应用。 …

Static、#define、const、mutable、typedef

Static、#define、const、mutable、typedef 代码存储区域&#xff1a;常量区、代码区、静态区&#xff08;全局区&#xff09;、堆区、栈区 栈区向下增长&#xff0c;堆区向上增长。栈由系统管理&#xff0c;没有内存碎片&#xff0c;每个元素之间都是连续的&#xff0c;大小…

MAXENT模型的生物多样性生境模拟与保护优先区甄选、自然保护区布局优化评估及论文写作技巧

【查看原文】基于MAXENT模型的生物多样性生境模拟与保护优先区甄选、自然保护区布局优化评估及论文写作技巧 随着生物多样性全球大会的举办&#xff0c;不论是管理机构及科研单位、高校都在积极准备&#xff0c;根据国家林草局最新工作指示&#xff0c;我国将积极整合、优化自…

【Django项目开发】功能菜单模型类设计、视图类设计要点(一)

一、抽象模型类设计 1、抽象模型类设计的作用&#xff1a; 1、定义所有模型类的公共属性&#xff0c;当其他的模型类继承该抽象模型类时&#xff0c;就具备了模型类中的属性了&#xff1b;在项目开发中&#xff0c;减少代码的编写 2、抽象模型类中经常定义的字段包括&#xff…

HFSS使用经验二

目录 一、绘制空气盒 二、Driven Solution Setup 的设置 ​三、如何添加圆场放大图 四、仿真之前的Validate 五、开始仿真 六、仿真过程Solution Data的查看 一、绘制空气盒 选择Padding type为Absolute Offset 设定Boundary为Radiation辐射边界 空气盒比较大&#xff…

数据校验-springboot

前置知识 先了解一下JSR、Hibernate Validator、Spring Validation&#xff1a; JSR&#xff08;Java Specification Request&#xff09;规范是Java EE 6中的一项子规范&#xff0c;也叫作Bean Validation。它指定了一整套基于bean的验证API&#xff0c;通过标注给对象属性添…