Debian环境下Node.js日志监控方法
导读:Debian环境下Node.js日志监控方法 一 快速实时监控 使用命令行工具直接跟踪日志文件或系统日志,适合临时排查与日常巡检。 常用命令与场景如下: 工具 作用 典型命令 tail -f 实时跟踪单个或多个日志文件 t...
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 服务日志。以上命令可直接用于这些路径与来源。
二 应用内结构化日志与动态级别
- 使用结构化日志库(如 Winston、Pino)输出 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-syslog、pino-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),与日志体系互补。
- rsyslog/Fluentd/Logstash/Filebeat:从文件或 stdout/stderr 采集,支持解析与转发。
- 采集建议:生产环境优先将日志输出到 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。”
- name: nodejs_logs
rules:
- 建议同时监控错误日志关键字(如 “error”、“Exception”)的增长趋势与频率,及时触发通知。
- 结合 Prometheus 对日志文件大小或关键错误进行规则告警(示例):
groups:
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Debian环境下Node.js日志监控方法
本文地址: https://pptw.com/jishu/781692.html
