如何在Ubuntu上监控Node.js日志异常
导读:如何在Ubuntu上监控Node.js日志异常 在Ubuntu系统上监控Node.js日志异常,需通过日志收集配置、实时监控工具、告警机制和可视化分析组合实现,以下是具体步骤: 1. 配置Node.js应用日志记录 首先确保应用能输出结构化...
如何在Ubuntu上监控Node.js日志异常
在Ubuntu系统上监控Node.js日志异常,需通过日志收集配置、实时监控工具、告警机制和可视化分析组合实现,以下是具体步骤:
1. 配置Node.js应用日志记录
首先确保应用能输出结构化日志(便于后续过滤和分析),推荐使用Winston(最流行的Node.js日志库):
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' }
), // 单独存储error日志
new winston.transports.File({
filename: 'logs/combined.log' }
) // 所有日志汇总
]
}
);
// 示例:捕获异常并记录
try {
// 业务代码(如数据库查询、API调用)
}
catch (error) {
logger.error(`Application Error: ${
error.message}
`, {
stack: error.stack }
);
// 记录错误信息和堆栈
}
关键点:
- 设置
level: 'error'聚焦异常日志,避免无关信息干扰; - 使用
json()格式让日志更易被ELK、Prometheus等工具处理; - 将error日志单独存储(如
error.log),便于快速定位问题。
2. 使用进程管理器监控应用状态
进程管理器可自动重启崩溃的应用,并提供日志聚合功能,推荐PM2(Node.js专用):
# 全局安装PM2
npm install pm2 -g
# 启动应用并命名(方便管理)
pm2 start app.js --name "my-node-app"
# 查看实时日志(包含error日志)
pm2 logs my-node-app
# 设置日志轮替(避免日志文件过大)
pm2 install pm2-logrotate
pm2 set pm2-logrotate:max_size 10M # 单个日志文件最大10MB
pm2 set pm2-logrotate:retain 7 # 保留最近7天日志
优势:
- 自动重启崩溃的应用(
--watch模式可监控文件变化并重启); - 聚合所有实例的日志(适合集群部署);
- 提供
pm2 monit命令实时监控CPU、内存等指标。
3. 实时查看与过滤异常日志
通过Ubuntu命令行工具快速定位error日志:
# 实时查看error.log文件的新增内容
tail -f /path/to/your/app/logs/error.log
# 实时过滤包含"error"或"exception"的日志行(不区分大小写)
tail -f /path/to/your/app/logs/combined.log | grep -iE 'error|exception'
# 结合pm2查看特定应用的error日志
pm2 logs my-node-app --lines 100 # 查看最近100行日志
pm2 logs my-node-app | grep error # 过滤error日志
技巧:
- 使用
tail -f实时跟踪日志变化; - 用
grep -iE过滤多个关键词(如error、exception、fail); - 通过
pm2 logs直接查看PM2管理的应用日志,无需手动找文件。
4. 集中化日志管理与分析
对于生产环境,建议使用ELK Stack(Elasticsearch+Logstash+Kibana)或Graylog实现日志集中化:
-
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" } # 解析Winston的JSON格式日志 } output { elasticsearch { hosts => ["localhost:9200"] } # 发送到Elasticsearch stdout { codec => rubydebug } # 控制台输出(调试用) } - 启动Logstash并访问Kibana(
http://localhost:5601),创建索引模式后即可搜索、可视化error日志。
- 安装Elasticsearch、Logstash、Kibana(Ubuntu下通过
-
优势:
- 集中存储所有节点的日志(适合分布式系统);
- 支持全文搜索、聚合分析(如统计某类错误的出现频率);
- 可对接告警工具(如Elasticsearch的Watcher、Kibana的Alerting)。
5. 设置日志告警机制
当出现严重异常(如5xx错误、数据库连接失败)时,及时通知运维人员,推荐以下方式:
-
PM2内置告警:通过
pm2 plus(付费)或pm2-webshell设置邮件、Slack通知; -
Prometheus+Grafana:
- 安装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'] // 如'5xx'、'database' } ); // 示例:记录错误时增加计数 try { // 业务代码 } catch (error) { errorCounter.inc({ type: 'database' } ); // 标记错误类型 logger.error(error.message); } - 配置Prometheus抓取Node.js应用的指标(
prometheus.yml):scrape_configs: - job_name: 'nodejs' static_configs: - targets: ['localhost:9090'] # Node.js应用的metrics端口 - 在Grafana中创建仪表盘,设置告警规则(如
nodejs_error_total > 10时触发邮件通知)。
-
第三方工具:如Uptime Kuma(开源)、Easy-Monitor(私有化部署),支持多协议监控(HTTP、TCP)和自定义告警。
通过以上步骤,可实现Ubuntu上Node.js日志异常的全面监控、快速定位和及时响应,保障应用稳定性。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何在Ubuntu上监控Node.js日志异常
本文地址: https://pptw.com/jishu/734853.html
