位置:首页 > JavaScript > Ubuntu系统如何监控Node.js日志与运行状态

Ubuntu系统如何监控Node.js日志与运行状态

时间:2026-08-21  |  作者:深海捕梦者  |  阅读:0

在Ubuntu系统上监控Node.js应用日志,方法其实不少。从最基础的原生命令,到生产级的进程管理工具,再到集中式日志分析平台,各有各的适用场景。

今天就一口气捋清楚,帮你找到最适合自己项目的那一套。

1. 使用系统原生命令实时查看日志

Ubuntu自带的几个命令,就能快速盯住日志文件的实时更新。

Node.js日志Ubuntu系统如何监控
  • tail -f:这是最常用的实时查看工具,直接显示日志文件末尾新增的内容。比如 tail -f /var/log/nodejs/app.log,按 Ctrl+C 退出即可。
  • less + 跟踪模式:用 less app.log 打开日志文件,然后输入 Shift+F 进入跟踪模式,就能实时看到新增内容;退出跟踪按 Ctrl+C,再按 q 退出 less。
  • grep 过滤:如果想只看特定关键词(比如错误信息),可以把 tailgrep 组合起来:tail -f app.log | grep "ERROR",这样屏幕上只会显示包含“ERROR”的行。

2. 利用PM2进程管理器监控

PM2是Node.js应用的生产级进程管理工具,日志管理功能也是一把好手。

  • 安装与启动:全局安装PM2后,启动应用时可以指定日志文件路径:

npm install pm2 -g
pm2 start app.js --name "my-node-app" --log /var/log/nodejs/app.log

  • 查看实时日志:直接用 pm2 logs 查看所有应用的实时日志;想看特定应用就用 pm2 logs my-node-app。加上 --lines 100 可以显示最近100行日志。
  • 日志轮换:日志文件会越积越大,用 pm2 install pm2-logrotate 安装日志轮换插件,自动切割并压缩旧日志,省心不少。

3. 采用Winston/Bunyan等日志库增强记录

Winston和Bunyan是Node.js生态中最流行的日志库,支持灵活的日志级别、多传输方式和结构化日志输出。

Winston配置示例

安装 winstonwinston-daily-rotate-file 后,可以配置文件输出、控制台输出和错误日志分离:

const winston = require('winston');
const { DailyRotateFile } = require('winston-daily-rotate-file');
const logger = winston.createLogger({
level: 'info',
format: winston.format.json(),
transports: [
new winston.transports.Console({ format: winston.format.simple() }),
new DailyRotateFile({
filename: '/var/log/nodejs/app-%DATE%.log',
datePattern: 'YYYY-MM-DD',
maxSize: '20m',
maxFiles: '14d'
}),
new DailyRotateFile({
filename: '/var/log/nodejs/error-%DATE%.log',
datePattern: 'YYYY-MM-DD',
level: 'error',
maxSize: '20m',
maxFiles: '30d'
})
]
});
logger.info('Application started on port 3000');
logger.error('Database connection failed');

Bunyan特点

日志输出为JSON格式,便于后续解析和集成ELK等工具,特别适合大型应用。

4. 部署ELK Stack集中式日志管理

如果应用规模较大,需要集中管理所有节点的日志,ELK(Elasticsearch + Logstash + Kibana)是经典的开源方案。

组件作用

  • Elasticsearch负责存储和索引日志
  • Logstash负责收集和解析日志
  • Kibana负责可视化展示

集成步骤

  • 1. 安装Elasticsearch和Kibana:sudo apt install elasticsearch kibana,启动服务并配置访问权限。
  • 2. 配置Winston发送日志到Logstash:使用 winston-logstash 库,示例代码:

const winston = require('winston');
const LogstashTransport = require('winston-logstash').Logstash;
const logger = winston.createLogger({
transports: [
new LogstashTransport({
host: 'localhost',
port: 5044,
node_name: 'nodejs-app'
})
]
});

  • 3. 在Kibana中创建索引模式(如 logstash-*),通过Dashboard可视化日志指标(如请求次数、错误率)。

5. 结合Prometheus+Grafana监控指标

如果不仅要看日志,还要监控应用性能指标(如请求延迟、内存使用),Prometheus配合Grafana是绝配。

安装prom-client

npm install prom-client,在Node.js应用中定义指标,比如HTTP请求计数和延迟直方图:

const promClient = require('prom-client');
const httpRequestDuration = new promClient.Histogram({
name: 'http_request_duration_seconds',
help: 'Duration of HTTP requests in seconds',
labelNames: ['method', 'route'],
buckets: [0.1, 0.5, 1, 2, 5]
});
app.use((req, res, next) => {
const start = Date.now();
res.on('finish', () => {
httpRequestDuration.observe(
{ method: req.method, route: req.route req.route.path : req.path },
(Date.now() - start) / 1000
);
});
next();
});
// 暴露 /metrics 端点,供Prometheus抓取
app.get('/metrics', async (req, res) => {
res.set('Content-Type', promClient.register.contentType);
res.end(await promClient.register.metrics());
});

部署Prometheus与Grafana

  • 1. 安装Prometheus,在 prometheus.yml 中添加Node.js应用的 /metrics 端点作为抓取目标。
  • 2. 安装Grafana,添加Prometheus作为数据源,然后创建Dashboard。可以导入现成的Node.js监控模板(如ID: 1860),直接可视化请求率、延迟分布、内存使用等指标。

6. 使用Log.io实时日志流

Log.io是一款基于Web的实时日志监控工具,支持多服务器日志集中查看,轻量又直观。

安装与配置

  • 1. 安装Log.io服务器和文件输入模块:npm install -g log.io-server log.io-file-input
  • 2. 配置 log.io-server/config.js,添加Node.js日志文件路径(如 /var/log/nodejs/app.log)。
  • 3. 启动服务:logio-server(服务器),logio-file-input(文件监控),然后通过浏览器访问 http://server-ip:6688 即可查看实时日志流。

总结

以上几套方案,从简单到复杂,从单机到集群,覆盖了Node.js日志监控的常见需求。

实际项目中可以根据团队规模、运维能力和预算灵活选择,也可以组合使用。

  • 开发阶段可用 tail -f 配合 grep
  • 线上环境可用PM2加Winston
  • 规模大了再上ELK或Prometheus

关键是要让日志真正“活”起来,而不是躺在磁盘里睡大觉。

免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。

相关文章

更多

精选合集

更多

大家都在玩

热门话题

大家都在看

更多