您的位置:首页 >如何在Ubuntu上监控Node.js日志异常
发布于2026-06-16 阅读(0)
扫一扫,手机访问
说到在Ubuntu上监控Node.js日志异常,其实核心思路很清晰:把日志收集、实时监控、告警机制和可视化分析这几个环节串起来,就能搭出一套完整的异常发现体系。下面一步步拆解给大家看。

一切的前提是先让应用能输出日志,最好是结构化的那种,这样后续解析过滤都会方便很多。社区里最常用的日志库就是Winston,用法也很直接:
const winston = require('winston');
const logger = winston.createLogger({
level: 'error', // 只记录error及以上级别,减少噪音
format: winston.format.json(), // 结构化,方便工具处理
transports: [
new winston.transports.File({ filename: 'logs/error.log', level: 'error' }),
new winston.transports.File({ filename: 'logs/combined.log' })
]
});
try {
// 业务代码
} catch (error) {
logger.error(`Application Error: ${error.message}`, { stack: error.stack });
}
几个关键点值得留意:把日志级别设在error,能有效过滤掉大量无关信息;用JSON格式输出,是为了后续能被ELK、Prometheus这类工具轻松处理;另外,将error日志单独存一份,排查问题时能省去不少翻来翻去的功夫。
应用意外崩溃是日志异常的常见来源。进程管理器不光能自动重启,还能统一收集日志,PM2就是Node.js生态中非常顺手的选择:
# 全局安装
npm install pm2 -g
# 启动应用
pm2 start app.js --name "my-node-app"
# 实时查看日志
pm2 logs my-node-app
# 设置日志轮替
pm2 install pm2-logrotate
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 7
用PM2的好处很明显:应用挂了自动拉起,集群模式下所有实例的日志汇总在一起,还能通过pm2 monit看到CPU和内存的实时状态。对于单机部署来说,这已经够用了。
很多时候不需要搞太复杂,Ubuntu自带的命令行工具就能快速定位问题:
# 实时跟踪error.log
tail -f /path/to/your/app/logs/error.log
# 多关键词过滤
tail -f /path/to/your/app/logs/combined.log | grep -iE 'error|exception'
# PM2自带查看
pm2 logs my-node-app --lines 100
pm2 logs my-node-app | grep error
几个小技巧:tail -f配合管道过滤,可以秒级捕捉到异常信息;用grep -iE同时匹配多个关键词,覆盖面更广;PM2直接输出日志,省去手动找文件的麻烦。
生产环境里实例一多,逐个服务器看日志就不现实了。这时候ELK Stack就是经典方案。以Winston配合Elasticsearch为例:
先安装Elasticsearch、Logstash、Kibana,Ubuntu下apt搞定。
配置Logstash解析Node.js日志,logstash.conf大致如下:
input {
file {
path => "/path/to/your/app/logs/error.log"
start_position => "beginning"
sincedb_path => "/dev/null"
}
}
filter {
json { source => "message" }
}
output {
elasticsearch { hosts => ["localhost:9200"] }
stdout { codec => rubydebug }
}
http://localhost:5601),创建索引模式就能搜索和可视化error日志了。集中化的核心价值在于:所有节点的日志汇聚一处,支持全文搜索和聚合分析,还能对接告警工具。一旦发现某类错误频发,可以第一时间定位根因。
监控的最终目的是在异常发生时第一时间收到通知。几种主流的做法:
PM2 Plus付费版本提供邮件或Slack告警,适合不想自己折腾的场景。
Prometheus+Grafana是不错的组合——在Node.js中集成prom-client暴露错误计数指标:
const client = require('prom-client');
const errorCounter = new client.Counter({
name: 'nodejs_error_total',
help: 'Total number of Node.js errors',
labelNames: ['type']
});
try {
// 业务代码
} catch (error) {
errorCounter.inc({ type: 'database' });
logger.error(error.message);
}
# prometheus.yml
scrape_configs:
- job_name: 'nodejs'
static_configs:
- targets: ['localhost:9090']
nodejs_error_total > 10就触发邮件通知。第三方工具如Uptime Kuma、Easy-Monitor也值得关注,它们支持多协议监控和自定义告警,对于不想自己搭整套方案的情况很实用。
把上面几个环节串起来,Ubuntu上Node.js日志异常的监控就能做到三位一体:及时发现、快速定位、自动响应。简单来说,日志是整个可观测性体系的基石,值得花时间打好底子。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8