温馨提示×

如何通过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(开发/中小规模)。

四 安全事件检测与告警

  • 在日志中检索高风险关键词:errorfailedunauthorizedattack 等,快速定位异常行为。
  • 使用 logwatch 生成日报/周报并配合 cron 定时发送,形成持续化安全审计。
  • 将关键日志接入 ELK 或集中式系统,配置告警规则(如短时间内大量 5xx、登录失败激增)。

五 快速落地清单

  • 规范日志:在 Node.js 中使用 Winston/Pino 输出结构化 JSON,区分 info/warn/error
  • 稳定运行:用 PM2systemd 托管进程,开启日志轮换与自动重启。
  • 实时观测:tail -fjournalctl -u <svc> -f 做第一时间排查。
  • 集中管理:上线 ELKPrometheus + Grafana,分别解决日志检索与指标可视化。
  • 安全基线:定期 grep 高危词、启用 logwatch 报告与集中告警。

0