1. 使用基礎命令行工具實時監控
Ubuntu系統自帶的基礎命令行工具可快速查看Node.js日志,適合簡單監控場景:
tail -f /var/log/nodejs/app.log
(需替換為實際日志路徑)。tail -f /var/log/nodejs/app.log | grep 'error'
。watch -n 2 tail -f /var/log/nodejs/app.log
。2. 通過PM2進程管理器監控
PM2是Node.js生產環境常用進程管理工具,內置日志管理與監控功能:
pm2 start app.js --name my-app --log /var/log/nodejs/my-app.log
。pm2 logs
命令實時查看所有應用的日志;pm2 logs my-app
查看特定應用的日志;pm2 logs --json
以JSON格式輸出日志(便于后續解析)。pm2 set pm2-logrotate:max_size 10M
(單文件最大10MB)、pm2 set pm2-logrotate:retain 7
(保留最近7天日志)。3. 利用Node.js日志庫實現結構化記錄
通過Winston、Bunyan等日志庫,可實現結構化日志(如JSON格式)、多傳輸目的地(文件、控制臺、數據庫),提升日志可分析性:
npm install winston
后,配置如下:const winston = require('winston');
const logger = winston.createLogger({
level: 'info',
format: winston.format.json(), // 結構化輸出
transports: [
new winston.transports.Console(), // 輸出到控制臺
new winston.transports.File({ filename: 'error.log', level: 'error' }), // 錯誤日志單獨文件
new winston.transports.File({ filename: 'combined.log' }) // 所有日志合并文件
]
});
logger.info('Server started on port 3000');
logger.error('Database connection failed');
npm install bunyan
后,配置如下:const bunyan = require('bunyan');
const logger = bunyan.createLogger({
name: 'myapp',
streams: [
{ level: 'info', stream: process.stdout }, // 輸出到控制臺
{ level: 'error', path: 'app-error.log' } // 錯誤日志寫入文件
]
});
logger.info('This is an info log.');
logger.error('This is an error log.');
4. 借助系統日志工具journalctl
若Node.js應用以systemd服務運行(如通過systemctl start my-node-app
啟動),可使用journalctl
查看系統級日志:
journalctl
(實時滾動顯示)。journalctl -u my-node-app.service
(替換為實際服務名)。journalctl -u my-node-app.service | grep 'warning'
(過濾“warning”關鍵詞)。5. 部署第三方集中式日志管理工具
對于生產環境,推薦使用ELK Stack(Elasticsearch+Logstash+Kibana)或Graylog實現日志集中化、可視化與高級分析:
sudo apt install elasticsearch
)、Logstash(sudo apt install logstash
)、Kibana(sudo apt install kibana
)。/etc/logstash/conf.d/nodejs.conf
,內容如下:input {
file {
path => "/var/log/nodejs/*.log" # 日志文件路徑
start_position => "beginning"
sincedb_path => "/dev/null" # 測試時使用(避免記錄讀取位置)
}
}
output {
elasticsearch {
hosts => ["localhost:9200"] # Elasticsearch地址
index => "nodejs-logs-%{+YYYY.MM.dd}" # 按日期分索引
}
stdout { codec => rubydebug } # 控制臺輸出(測試用)
}
sudo systemctl start elasticsearch logstash kibana
。http://服務器IP:5601
),配置索引模式(如nodejs-logs-*
),即可通過可視化界面搜索、分析日志。6. 日志監控最佳實踐
debug
(詳細信息),生產環境用info
(常規運行信息)、warn
(警告)、error
(錯誤),避免無關日志占用空間。timestamp
、level
、message
、requestId
等字段),便于后續通過工具過濾、聚合分析。