监控 JavaScript 日志在 Linux 环境中是一个常见的需求,特别是在 Node.js 应用或前端应用部署场景中。以下是几种有效的监控方案:
# 运行 Node.js 应用并将日志输出到文件
node app.js > app.log 2>&1 &
# 实时查看日志
tail -f app.log
# 使用 logrotate 管理日志文件
sudo nano /etc/logrotate.d/node-app
# 添加以下内容
/path/to/app.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 644 root root
postrotate
kill -USR1 `cat /var/run/your-app.pid 2>/dev/null` 2>/dev/null || true
endscript
}
# 安装 PM2
npm install pm2 -g
# 启动应用并记录日志
pm2 start app.js --log /var/log/node-app.log
# 查看实时日志
pm2 logs
# 设置日志轮转
pm2 install pm2-logrotate
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 30
# 使用 docker-compose 部署 Loki
version: "3"
services:
loki:
image: grafana/loki:latest
ports:
- "3100:3100"
command: -config.file=/etc/loki/local-config.yaml
promtail:
image: grafana/promtail:latest
volumes:
- /var/log:/var/log
command: -config.file=/etc/promtail/config.yml
# 安装 Filebeat
sudo apt-get install filebeat
# 配置 Filebeat (/etc/filebeat/filebeat.yml)
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/node-app.log
output.elasticsearch:
hosts: ["localhost:9200"]
// 在 Node.js 应用中
const Sentry = require('@sentry/node');
Sentry.init({ dsn: 'YOUR_DSN' });
// 安装 New Relic
require('newrelic');
#!/bin/bash
# 监控错误日志并发送警报
LOG_FILE="/var/log/node-app.log"
ERROR_PATTERNS=("Error" "Exception" "Unhandled")
tail -Fn0 $LOG_FILE | while read line ; do
for pattern in "${ERROR_PATTERNS[@]}"; do
if echo "$line" | grep -q "$pattern"; then
# 发送警报 (邮件、Slack等)
echo "$(date) - Error detected: $line" | mail -s "App Error Alert" admin@example.com
break
fi
done
done
选择哪种方案取决于你的具体需求、应用规模和团队资源。对于小型应用,PM2 或基础日志方案可能足够;对于大型分布式系统,ELK 或 Loki+Grafana 可能更合适。