温馨提示×

Debian环境下Node.js日志监控方法

小樊
39
2025-12-26 04:41:47
栏目: 编程语言

Debian环境下Node.js日志监控方法

一 快速实时监控

  • 使用命令行工具直接跟踪日志文件或系统日志,适合临时排查与日常巡检。
  • 常用命令与场景如下:
工具 作用 典型命令
tail -f 实时跟踪单个或多个日志文件 tail -f /var/log/nodejs/*.log
less +F 分页查看并实时跟踪 less +F /var/log/nodejs/app.log
multitail 同时监控多文件、支持过滤与高亮 multitail /var/log/nodejs/*.log
journalctl 查看 systemd 服务日志 journalctl -u nodejs-app.service -f
  • 提示:Node.js 日志常见路径包括应用自定义目录(如 /var/log/nodejs/)、系统日志 /var/log/syslog/var/log/messages,以及 systemd 服务日志。以上命令可直接用于这些路径与来源。

二 应用内结构化日志与动态级别

  • 使用结构化日志库(如 WinstonPino)输出 JSON 日志,便于检索、分析与集中化收集;通过环境变量动态设置日志级别,便于在不同环境快速调整。
  • 示例(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() }));
}
logger.info('Hello World');
  • 运行时调整级别:LOG_LEVEL=debug node app.js。也可将日志发送到系统日志(如 winston-syslogpino-syslog)以便与 rsyslog/journald 统一采集。

三 集中化收集与可视化

  • 将日志统一采集、处理并可视化,适合多实例与多服务环境。
  • 常见方案与要点:
    • rsyslog/Fluentd/Logstash/Filebeat:从文件或 stdout/stderr 采集,支持解析与转发。
      • rsyslog 示例(/etc/rsyslog.d/50-nodejs.conf): if $programname == ‘nodejs-app’ then /var/log/nodejs/app.log & stop
    • Filebeat → Elasticsearch → Kibana(ELK):Filebeat 采集日志,Logstash 解析,ES 存储,Kibana 检索与可视化(Kibana 默认端口 5601)。
    • Fluentd 配置示例(/etc/fluent/fluent.conf): @type tail path /var/log/nodejs/*.log pos_file /var/log/fluentd-nodejs.log.pos tag nodejs.* @type json @type stdout
    • Prometheus + Grafana:用于指标监控与可视化(如请求时延、错误率、内存/CPU),与日志体系互补。
  • 采集建议:生产环境优先将日志输出到 stdout/stderr,由采集器统一处理,减少文件权限与轮转带来的复杂度。

四 日志轮转与保留策略

  • 使用 logrotate 自动轮转与压缩日志,避免磁盘被占满。
  • 示例(/etc/logrotate.d/nodejs):
/path/to/your/nodejs/*.log {
  daily
  rotate 7
  compress
  delaycompress
  missingok
  notifempty
  create 0640 root adm
}
  • 说明:可按需调整周期(如 daily/weekly)、保留份数(rotate)、压缩与权限等参数。

五 备份恢复与告警实践

  • 备份与恢复
    • 使用 rsync 定期同步日志目录,并通过 crontab 定时执行;必要时可回滚到历史日志。
    • 示例脚本与定时任务:
      • /usr/local/bin/backup_nodejs_logs.sh #!/bin/bash rsync -av --delete /var/log/nodejs /backup/logs/ date >> /backup/logs/backup.log
      • crontab -e:0 2 * * * /usr/local/bin/backup_nodejs_logs.sh
      • 恢复:rsync -av /backup/logs/nodejs /var/log/nodejs
  • 告警与容量监控
    • 结合 Prometheus 对日志文件大小或关键错误进行规则告警(示例): groups:
      • name: nodejs_logs rules:
        • alert: LargeLogFileSize expr: size(nodejs_log_file) > 100MB for: 1h labels: severity: warning annotations: summary: “日志文件过大” description: “日志文件 {{ $labels.instance }} 大小超过 100MB。”
    • 建议同时监控错误日志关键字(如 “error”、“Exception”)的增长趋势与频率,及时触发通知。

0