温馨提示×

Debian中Node.js日志的监控方法

小樊
46
2025-12-28 03:22:54
栏目: 编程语言

Debian 上 Node.js 日志监控实操指南

一 日志采集与输出

  • 应用内结构化日志:使用成熟的日志库输出 JSON,便于检索与聚合。示例(Winston):
    • 安装:npm install winston
    • 配置:
      • const winston = require(‘winston’);
      • const logger = winston.createLogger({
        • level: process.env.LOG_LEVEL || ‘info’,
        • format: winston.format.json(),
        • transports: [
          • new winston.transports.File({ filename: ‘error.log’, level: ‘error’ }),
          • new winston.transports.File({ filename: ‘combined.log’ })
        • ]
      • });
      • if (process.env.NODE_ENV !== ‘production’) logger.add(new winston.transports.Console({ format: winston.format.simple() }));
    • 高性能替代:Pino(npm i pino;开发环境可用 pino-pretty 输出到控制台)。
  • 输出到系统日志:便于统一采集与审计。示例(Winston + syslog):
    • 安装:npm install winston winston-syslog
    • 使用:在 transports 中加入 new winston.transports.Syslog({ host: ‘127.0.0.1’, port: 514, protocol: ‘udp’ });或用 pino-syslog。
  • 进程管理:使用 PM2 内置日志聚合与查看:pm2 start app.js --name my-app;pm2 logs my-app;pm2 monit。

二 systemd 与日志轮转

  • 使用 systemd 管理并接入日志:
    • 创建服务文件:/etc/systemd/system/myapp.service
      • [Service]
        • ExecStart=/usr/bin/node /path/to/app.js
        • WorkingDirectory=/path/to/app
        • User=youruser
        • Group=yourgroup
        • StandardOutput=journal
        • StandardError=journal
        • SyslogIdentifier=myapp
    • 生效与查看:sudo systemctl daemon-reload;sudo systemctl start myapp;sudo journalctl -u myapp -f
    • 说明:写入 journald 时,由 journald 负责日志轮转与持久化,无需额外 logrotate 配置。
  • 文件日志的轮转与保留(适用于写入文件的场景):
    • 新建配置:/etc/logrotate.d/nodejs
      • /path/to/your/nodejs/app/*.log {
        • daily
        • missingok
        • rotate 7
        • compress
        • notifempty
        • create 0640 root adm
      • }
    • 测试:sudo logrotate -f /etc/logrotate.d/nodejs。

三 实时监控与快速筛选

  • 实时查看服务日志:sudo journalctl -u your-nodejs-app.service -f
  • 按时间筛选:sudo journalctl -u your-nodejs-app.service --since “2025-11-01” --until “2025-11-20
  • 文件日志关键字检索:grep -i “error” /var/log/nodejs/*.log
  • 查看系统日志:/var/log/syslog、/var/log/messages
  • PM2 实时查看:pm2 logs my-app(支持按应用名过滤与多实例合并)。

四 集中化监控与告警

  • 集中式日志平台:
    • ELK Stack(Elasticsearch + Logstash + Kibana):收集、解析、存储与可视化日志,适合复杂查询与可视化分析。
    • Graylog:集中日志管理、强大检索与告警能力。
    • Fluentd:统一日志采集与转发,可对接 ESLoki 等后端。
  • 指标与可视化(与日志互补):
    • Prometheus + Grafana:暴露 Node.js 指标(如 HTTP 延迟、错误率、内存/CPU),在 Grafana 构建仪表盘并设置告警规则。
  • 第三方 APM(如 New Relic、Datadog、AppDynamics):深入性能监控与分布式追踪,可与日志联动定位问题。

五 异常监控与告警落地

  • 应用内规范:统一使用日志级别(error/warn/info/debug),对异常与关键路径打点;将 error 单独写入 error.log 便于快速定位。
  • 平台侧告警:
    • ELK/Graylog/Fluentd 配置关键字告警(如 “error”、“Exception”、“timeout”、“5xx”)与速率告警(如 5xx/分钟 突增)。
    • 结合 Prometheus 对错误率、P95/P99 延迟、进程重启次数等指标设置阈值告警,形成“日志 + 指标”的闭环。
  • 轻量方案(无需大规模平台):
    • 使用 Monit 对日志文件变化与阈值进行监控并告警(如文件大小超过阈值触发邮件)。示例要点:
      • check file nodeapp with path /var/log/nodeapp.log
      • if size > 100KB then alert
      • 邮件通知:set mailserver smtp.example.com port 587;set alert your-email@example.com

0