在 Debian 上搭建 JS 日志监控的可落地方案
一、方案总览与适用场景
- 面向 Node.js 应用:使用 PM2 管理进程与日志,配合 Winston/Bunyan 输出结构化日志;集中到 ELK(Elasticsearch + Logstash + Kibana) 或 Graylog 做检索、可视化与告警。
- 面向 前端/浏览器 JS:通过 Winston/Bunyan 输出到 HTTP/文件,由 Logstash/Filebeat 采集到 ELK/Graylog 统一分析。
- 面向 系统日志:用 Node.js 脚本读取 /var/log/syslog 或调用 journalctl 做实时采集与处理,再送入集中式平台。
- 面向 系统指标:用 Node.js 执行系统命令采集 CPU/内存/磁盘,结合日志平台做可视化与阈值告警。
二、快速落地步骤 Node.js 应用集中监控
- 安装运行时与进程管理
- 安装 Node.js 与 PM2:
- curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -
- sudo apt-get install -y nodejs
- sudo npm install -g pm2
- 启动应用并设为开机自启:
- pm2 start app.js --name my-app
- pm2 startup && pm2 save
- 结构化日志输出(示例 Winston)
- 安装:npm install winston
- 配置:
- const winston = require(‘winston’);
- const logger = winston.createLogger({
level: ‘info’,
format: winston.format.json(),
transports: [
new winston.transports.File({ filename: ‘logs/app.log’ }),
new winston.transports.Console()
]
});
- logger.info(‘app started’, { env: process.env.NODE_ENV });
- 集中采集与可视化(ELK)
- 安装 Elasticsearch/Logstash/Kibana(示例为 7.x 仓库源,生产请选择与你环境匹配的版本):
- wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
- echo “deb https://artifacts.elastic.co/packages/7.x/apt stable main” | sudo tee /etc/apt/sources.list.d/elastic-7.x.list
- sudo apt update && sudo apt install elasticsearch logstash kibana
- sudo systemctl enable --now elasticsearch logstash kibana
- 配置 Logstash(/etc/logstash/conf.d/nodejs.conf):
- input { file { path => “/path/to/your/nodejs/logs/*.log”; start_position => “beginning” } }
- filter { } # 可添加 grok/json 解析
- output { elasticsearch { hosts => [“localhost:9200”]; index => “nodejs-logs-%{+YYYY.MM.dd}” } }
- sudo systemctl restart logstash
- 在 Kibana 创建索引模式:Management → Stack Management → Index Patterns → 创建 nodejs-logs-* → 选择时间字段。
三、实时查看与安全加固
- 实时查看
- 系统日志:journalctl -f(实时滚动)、journalctl -u 服务名(按服务)、journalctl --since “1 hour ago”(按时间)
- 文件日志:tail -f /var/log/syslog
- 安全加固要点
- 最小权限运行:Node/PM2 以 非 root 运行;日志目录仅对必要用户可读写(如 /var/log/myapp/,权限 0750/0640)。
- 传输与存储:内网部署 ELK/Graylog 并使用 TLS;Elasticsearch 开启 安全认证 与 访问控制。
- 审计与留痕:开启 journald 持久化(编辑 /etc/systemd/journald.conf:Storage=persistent),定期归档与清理旧日志。
四、扩展方案与选型建议
- 轻量集中式:用 Filebeat 采集 Node/前端日志,直送 Elasticsearch,Kibana 可视化;部署与资源开销更低。
- 企业级平台:用 Graylog 统一采集、处理与告警,适合多源异构日志与合规审计场景。
- 监控与日志一体化:部署 Prometheus + Grafana 采集指标,日志走 ELK/Graylog;在 Grafana 统一看板与告警。