温馨提示×

Node.js日志Ubuntu系统如何监控

小樊
52
2025-09-22 13:56:51
栏目: 编程语言

1. 使用系统原生命令实时查看日志
Ubuntu系统自带的基础命令可快速监控Node.js日志文件(如app.log)的实时更新:

  • tail -f:实时显示日志文件末尾新增内容,是最常用的实时查看工具。例如tail -f /var/log/nodejs/app.log,按Ctrl+C退出。
  • less + 跟踪:用less app.log打开日志文件,输入Shift+F进入跟踪模式,实时查看新增内容;按Ctrl+C退出跟踪,q退出less。
  • grep过滤:结合grep筛选特定关键词(如错误信息),例如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收集和解析日志(需配置Node.js应用发送日志到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-clientnpm 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作为数据源,在Grafana中创建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查看实时日志流。

0