通过Ubuntu监控Node.js应用日志的方法
PM2是Node.js常用的进程管理工具,内置日志管理功能,适合生产环境使用。
npm install pm2 -g
~/.pm2/logs/)。pm2 start app.js --name "my-node-app" --log /var/log/my-node-app.log
pm2 logs命令实时查看所有应用的日志,或指定应用名称查看单个应用日志(如pm2 logs my-node-app)。pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 7
Ubuntu自带的命令行工具可快速查看和过滤日志,适合简单场景。
tail -f命令实时显示日志文件的新增内容(如tail -f /var/log/my-node-app.log)。grep命令过滤特定日志(如错误日志),提升排查效率。tail -f /var/log/my-node-app.log | grep 'error'
less命令结合tail -f,支持翻页查看(如tail -f /var/log/my-node-app.log | less)。watch命令每隔1秒刷新日志文件(如watch -n 1 tail -f /var/log/my-node-app.log)。Logrotate是Ubuntu系统自带的日志管理工具,可自动切割、压缩和删除旧日志,防止磁盘空间耗尽。
sudo apt-get install logrotate
/etc/logrotate.d/目录下创建应用专属配置文件(如my-node-app)。sudo nano /etc/logrotate.d/my-node-app
/var/log/my-node-app.log {
daily
missingok
rotate 7
compress
notifempty
create 640 root adm
}
sudo logrotate -f /etc/logrotate.d/my-node-app
Winston和Bunyan是Node.js专业的日志库,支持结构化日志(如JSON格式),便于后续分析和集成。
const winston = require('winston');
const logger = winston.createLogger({
level: 'info',
format: winston.format.json(),
transports: [
new winston.transports.Console(),
new winston.transports.File({ filename: 'logs/error.log', level: 'error' }),
new winston.transports.File({ filename: 'logs/combined.log' })
]
});
logger.info('Application started on port 3000');
const bunyan = require('bunyan');
const logger = bunyan.createLogger({
name: 'my-node-app',
streams: [
{ level: 'info', stream: process.stdout },
{ level: 'error', path: 'logs/app-error.log' }
]
});
logger.info('User logged in', { userId: 123 });
ELK(Elasticsearch+Logstash+Kibana)是强大的集中式日志管理方案,适合大规模应用。
sudo apt-get update
sudo apt-get install elasticsearch logstash kibana
/etc/logstash/conf.d/nodejs.conf),设置文件输入、过滤(可选)和Elasticsearch输出。input {
file {
path => "/var/log/my-node-app.log"
start_position => "beginning"
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "nodejs-logs-%{+YYYY.MM.dd}"
}
}
/etc/kibana/kibana.yml中的elasticsearch.hosts),通过浏览器访问http://<server-ip>:5601,创建索引模式并可视化日志。若不想自建日志系统,可选择第三方服务(如Loggly、Datadog、Papertrail),提供日志收集、搜索、报警等功能,简化运维流程。
winston-loggly-bulk将日志发送到Loggly,配置报警规则。