如何通过Ubuntu JS日志监控应用
小樊
36
2025-12-21 20:21:02
Ubuntu 上监控 JS 应用日志的实用方案
一 基础准备与日志采集
- 使用 Node.js 日志库规范输出:优先采用结构化日志(如 JSON),并按级别输出到控制台与文件,便于检索与聚合。示例(Winston):
- 安装:
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(‘服务启动’, { port: 3000 });
- logger.error(‘数据库连接失败’, { err: err.message });
- 使用 PM2 运行与聚合日志(适合生产):
- 安装:
npm install -g pm2
- 启动:
pm2 start app.js --name myapi
- 实时查看:
pm2 logs myapi
- 启用日志轮换:
pm2 set pm2-logrotate:max_size 10M && pm2 set pm2-logrotate:retain 7
- 使用 systemd 托管并输出到 journald(便于系统级检索与转发):
- 示例服务单元 /etc/systemd/system/myapi.service:
- [Unit]
Description=My Node.js API
After=network.target
- [Service]
Type=simple
User=www-data
WorkingDirectory=/opt/myapi
ExecStart=/usr/bin/node /opt/myapi/app.js
StandardOutput=journal
StandardError=journal
Restart=on-failure
- [Install]
WantedBy=multi-user.target
- 重载与启动:
sudo systemctl daemon-reload && sudo systemctl enable --now myapi
- 实时查看:
sudo journalctl -u myapi -f。
二 实时查看与本地分析
- 实时跟踪日志文件:
tail -f /path/to/app.log;按 Ctrl+C 退出。
- 定期查看变化:
watch -n 5 cat /path/to/app.log(每 5 秒刷新一次)。
- 关键词检索与排查:
- 系统日志:
grep -i "error" /var/log/syslog
- 应用日志:
grep -i "failed\|unauthorized" /var/log/myapp/*.log
- 日志轮转与归档:使用 logrotate 自动压缩与清理旧日志,避免磁盘占满。
三 集中化与可视化监控
- ELK Stack(Elasticsearch + Logstash + Kibana):集中采集、解析与检索结构化日志,适合复杂查询与审计。
- Prometheus + Grafana:采集应用指标(如请求耗时、错误率、内存),在 Grafana 构建可视化看板;Node.js 侧可用 prom-client 暴露指标端点。
- 典型组合建议:
- 日志检索与告警:ELK
- 指标与可视化:Prometheus + Grafana
- 进程与日志聚合:PM2(开发/中小规模)。
四 安全事件检测与告警
- 在日志中检索高风险关键词:
error、failed、unauthorized、attack 等,快速定位异常行为。
- 使用 logwatch 生成日报/周报并配合 cron 定时发送,形成持续化安全审计。
- 将关键日志接入 ELK 或集中式系统,配置告警规则(如短时间内大量 5xx、登录失败激增)。
五 快速落地清单
- 规范日志:在 Node.js 中使用 Winston/Pino 输出结构化 JSON,区分 info/warn/error。
- 稳定运行:用 PM2 或 systemd 托管进程,开启日志轮换与自动重启。
- 实时观测:
tail -f、journalctl -u <svc> -f 做第一时间排查。
- 集中管理:上线 ELK 或 Prometheus + Grafana,分别解决日志检索与指标可视化。
- 安全基线:定期
grep 高危词、启用 logwatch 报告与集中告警。