PM2是常用进程管理工具,帮助开发者实现应用守护、负载均衡及运行状态监控。在应用实例增多,PM2在Debian系统下产生的日志文件也会逐渐膨胀,包括应用输出日志、错误日志及PM2本身管理日志。如果没有使用有效采集和管理手段,容易导致存储压力和拍错效率降低。Debian系统中,高效采集和管理PM2日志需要结合PM2自身功能与外部日志采集工具,通过统一规范、集中存储和实时分析来实现。
PM2在运行时会自动生成两个日志文件,分别是标准输出日志和错误日志,默认存放路径为 ~/.pm2/logs/。应用启动后可以使用以下命令查看日志:
pm2 logs
若要指定日志文件路径,可以在启动应用时加入参数:
pm2 start app.js --log /var/log/pm2/app-combined.log --merge-logs
这样标准输出与错误输出会合并写入指定文件。为了便于长期管理,建议在生产环境中将日志路径统一设置到 /var/log/pm2/ 目录下,并通过配置文件 ecosystem.config.js 固定日志路径:
module.exports = {
apps : [{
name: "myapp",
script: "./app.js",
out_file: "/var/log/pm2/myapp-out.log",
error_file: "/var/log/pm2/myapp-error.log",
log_date_format: "YYYY-MM-DD HH:mm:ss"
}]
}
PM2自带的日志轮转模块 pm2-logrotate 可以防止日志文件无限增长。安装方法如下:
pm2 install pm2-logrotate
安装后可以通过命令修改配置:
pm2 set pm2-logrotate:max_size 100M
pm2 set pm2-logrotate:retain 10
pm2 set pm2-logrotate:compress true
pm2 set pm2-logrotate:dateFormat YYYY-MM-DD_HH-mm-ss
这些设置能够控制单个日志文件的最大大小、保留的轮转文件数量、是否压缩以及命名格式,从而避免日志文件占满磁盘空间。
在日志采集环节,为了实现集中化管理,可以通过rsyslog、Filebeat或Fluentd等工具将PM2日志实时收集到远程日志服务器。在Debian系统中,Filebeat是一种高效且常用的方式。安装Filebeat后编辑配置文件 /etc/filebeat/filebeat.yml:
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/pm2/*.log
fields:
app: nodejs
source: pm2
output.logstash:
hosts: ["127.0.0.1:5044"]
此配置会实时监控PM2日志目录并将日志发送到Logstash。随后在Logstash配置中对日志进行解析:
filter {
if [source] == "pm2" {
grok {
match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:level} %{GREEDYDATA:msg}" }
}
date {
match => ["timestamp", "ISO8601"]
}
}
}
这样PM2日志会被结构化存储在Elasticsearch中,最终通过Kibana进行可视化分析。对于只需要轻量采集的场景,可以直接使用rsyslog。在Debian上编辑 /etc/rsyslog.conf,配置PM2日志目录作为输入源,并转发至远程服务器:
input(type="imfile" File="/var/log/pm2/*.log" Tag="pm2" Severity="info" Facility="local7")
*.* @@logserver.example.com:514
保存后重启rsyslog服务即可:
sudo systemctl restart rsyslog
为了增强日志的可用性,可以在Node.js应用中统一日志格式,例如采用JSON结构化日志记录:
const logger = console;
logger.log(JSON.stringify({
timestamp: new Date().toISOString(),
level: "info",
message: "Application started",
pid: process.pid
}));
这种方式能够让采集工具更容易解析日志,并支持更精细的搜索和聚合。
在集中管理日志时,需要特别注意日志安全与隐私保护。Debian系统中建议将PM2日志目录的权限限制为运维用户组可读写:
chown -R root:adm /var/log/pm2
chmod -R 750 /var/log/pm2
同时,在日志采集传输过程中,建议启用TLS加密。例如在Filebeat和Logstash之间配置SSL证书:
output.logstash:
hosts: ["logserver.example.com:5044"]
ssl.certificate_authorities: ["/etc/pki/tls/certs/ca.crt"]
ssl.certificate: "/etc/pki/tls/certs/client.crt"
ssl.key: "/etc/pki/tls/private/client.key"
这样日志在传输过程中不会被中途窃听或篡改。
为了长期提升日志的分析价值,可以在集中化平台中建立索引管理策略。例如在Elasticsearch中为PM2日志定义基于日期的索引模板:
PUT _template/pm2_template
{
"index_patterns": ["pm2-*"],
"settings": {
"number_of_shards": 3,
"number_of_replicas": 1
},
"mappings": {
"properties": {
"timestamp": { "type": "date" },
"level": { "type": "keyword" },
"message": { "type": "text" }
}
}
}
并启用索引生命周期管理策略,自动清理过期日志,降低存储成本。
在运维层面,可以通过Kibana定义告警规则,对PM2日志中的异常情况进行实时监控。例如检测应用错误日志是否在短时间内激增,或者监控应用启动失败次数是否超标。一旦触发条件满足,系统会通过邮件或Webhook通知运维人员,从而提高故障处理的及时性。
Debian系统中高效采集和管理PM2日志要结合PM2自带的日志输出和轮转功能、Debian日志采集工具以及集中化日志分析平台。通过合理的路径规划、自动化轮转、集中式采集、安全加密传输和结构化分析,可以构建一套完善的日志管理体系。能有效解决日志膨胀和难以查询的问题,还可以在应用存在异常时快速定位和分析问题,为Node.js应用的稳定运行提供坚实保障。