在 Debian 環境中,通過日志監控掌握 Node.js 應用的運行狀態(如錯誤發生、請求響應、資源使用),需結合日志收集、實時查看、分析與告警等環節。以下是具體方法:
要讓日志可監控,需先確保應用將日志輸出到標準輸出(stdout)/標準錯誤(stderr)或文件(便于后續工具捕獲)。
winston
或 morgan
等庫實現結構化日志記錄(如 JSON 格式),支持日志分級(info/warn/error)、文件輪轉等功能。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('Server started on port 3000'); // 記錄正常日志
logger.error('Database connection failed'); // 記錄錯誤日志
console.log()
或 console.error()
輸出,systemd 會自動捕獲這些日志。將 Node.js 應用配置為 systemd 服務,可實現后臺運行、自動重啟及日志集中管理(通過 journalctl
命令查看)。
/etc/systemd/system/
下創建文件(如 my-nodejs-app.service
),內容如下:[Unit]
Description=My Node.js Application
After=network.target
[Service]
User=your-debian-user # 替換為實際用戶(避免使用 root)
WorkingDirectory=/path/to/your/app # 應用代碼目錄
ExecStart=/usr/bin/node /path/to/your/app/app.js # 啟動命令
Restart=always # 崩潰后自動重啟
Environment=NODE_ENV=production # 生產環境
StandardOutput=syslog # 標準輸出重定向到 syslog
StandardError=syslog # 標準錯誤重定向到 syslog
SyslogIdentifier=my-nodejs-app # 日志標識(用于 journalctl 篩選)
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload # 重新加載 systemd 配置
sudo systemctl start my-nodejs-app # 啟動服務
sudo systemctl enable my-nodejs-app # 開機自啟
sudo journalctl -u my-nodejs-app -f # 實時查看該服務的日志(-f 表示 follow)
sudo journalctl -u my-nodejs-app --since "2025-10-01" --until "2025-10-07" # 查看指定時間段的日志
日志會包含應用輸出的 console.log
/console.error
內容,以及 systemd 的服務狀態信息(如啟動/停止時間)。PM2 是 Node.js 生態中常用的進程管理工具,內置日志管理功能,適合生產環境使用。
sudo npm install pm2 -g # 全局安裝 PM2
pm2 start app.js --name "my-app" # 啟動應用并命名(便于管理)
pm2 list # 列出所有 PM2 管理的應用(顯示狀態、CPU/內存使用率)
pm2 logs my-app # 查看指定應用的日志(合并 stdout/stderr)
pm2 logs my-app --lines 100 # 查看最近 100 行日志
pm2 monit # 實時監控應用狀態(包括日志流、CPU/內存使用率)
pm2 install pm2-logrotate # 安裝日志輪轉插件
pm2 set pm2-logrotate:max_size 10M # 單個日志文件最大 10MB
pm2 set pm2-logrotate:retain 7 # 保留最近 7 天日志
為了從日志中提取有價值信息(如錯誤頻率、請求延遲),需借助日志分析工具,并在檢測到異常時觸發告警。
winston-elasticsearch
或 logstash
將 Node.js 日志發送到 Elasticsearch,再用 Kibana 可視化分析(如錯誤日志趨勢、請求響應時間分布)。grep
過濾錯誤日志,并用 mail
命令發送告警:# 監控 error.log 文件,發現新錯誤時發送郵件
tail -f /path/to/your/logs/error.log | grep --line-buffered "ERROR" | while read line; do
echo "$line" | mail -s "Node.js Error Alert" your-email@example.com
done
tail -f /path/to/app.log
)。watch -n 2 tail -f /path/to/app.log
,每 2 秒刷新一次日志)。tail -f
實現實時查看(如 tail -f /path/to/app.log | less
)。通過以上方法,可在 Debian 系統中實現對 Node.js 應用狀態的日志監控,覆蓋從日志收集到分析告警的全流程。根據應用規模(如小型應用用 PM2+journalctl,大型應用用 ELK),選擇合適的工具組合即可。