温馨提示×

如何利用JS日志监控Debian

小樊
50
2025-10-24 19:49:50
栏目: 编程语言

1. 安装Node.js环境
在Debian系统上,首先需要安装Node.js作为JavaScript运行时环境,用于编写和运行监控脚本。通过以下命令完成安装:

sudo apt update && sudo apt install nodejs npm -y

2. 使用Node.js原生模块读取/监控系统日志
借助Node.js的fs(文件系统)和child_process模块,可直接读取Debian系统日志文件(如/var/log/syslog)或实时跟踪其变化。

  • 读取日志文件内容:通过fs.readFile同步读取日志文件,适用于一次性查看日志内容。示例代码:
    const fs = require('fs');
    const logFile = '/var/log/syslog';
    fs.readFile(logFile, 'utf8', (err, data) => {
      if (err) throw err;
      console.log('Log Content:', data);
    });
    
  • 实时监控日志变化:使用child_process.spawn执行tail -f命令,实时输出日志文件的新增内容。示例代码:
    const { spawn } = require('child_process');
    const logFile = '/var/log/syslog';
    const tail = spawn('tail', ['-f', logFile]);
    tail.stdout.on('data', (data) => console.log(`New Log: ${data}`));
    tail.stderr.on('data', (data) => console.error(`Error: ${data}`));
    

3. 利用第三方日志库增强监控能力
为提升日志管理的灵活性(如日志分级、格式化、输出到文件),可使用winstonbunyan等第三方日志库。

  • 使用Winston记录日志:配置Winston将日志输出到控制台和文件,并设置日志级别(如infoerror)。示例代码:
    const winston = require('winston');
    const logger = winston.createLogger({
      level: 'info',
      format: winston.format.combine(winston.format.timestamp(), winston.format.json()),
      transports: [
        new winston.transports.Console(),
        new winston.transports.File({ filename: 'system.log' })
      ]
    });
    logger.info('System started');
    logger.error('Error occurred');
    
  • 使用Bunyan记录结构化日志:Bunyan生成的JSON格式日志便于后续分析,支持多输出流(如控制台、错误文件)。示例代码:
    const bunyan = require('bunyan');
    const logger = bunyan.createLogger({
      name: 'myApp',
      streams: [
        { level: 'info', stream: process.stdout },
        { level: 'error', path: 'error.log' }
      ]
    });
    logger.info('Application running');
    logger.error('Something went wrong');
    

4. 结合系统服务与日志重定向
将JavaScript应用作为系统服务运行(通过systemd),并将其标准输出/错误重定向到syslog,便于统一管理日志。

  • 创建systemd服务文件:在/etc/systemd/system/下创建服务文件(如my-js-app.service),内容如下:
    [Unit]
    Description=My JavaScript Application
    After=network.target
    
    [Service]
    ExecStart=/usr/bin/node /path/to/your/app.js
    Restart=always
    User=www-data
    Environment=NODE_ENV=production
    StandardOutput=syslog
    StandardError=syslog
    SyslogIdentifier=my-js-app
    
    [Install]
    WantedBy=multi-user.target
    
  • 启动服务并查看日志
    sudo systemctl daemon-reload
    sudo systemctl start my-js-app
    sudo journalctl -u my-js-app -f  # 实时查看服务日志
    

5. 配置日志轮转避免文件过大
使用logrotate工具自动轮转日志文件(如按天分割、压缩旧日志),防止日志文件占用过多磁盘空间。

  • 创建logrotate配置文件:在/etc/logrotate.d/下创建配置文件(如my-js-app),内容如下:
    /path/to/your/nodejs/logs/*.log {
      daily
      missingok
      rotate 7
      compress
      notifempty
      create 0640 www-data adm
    }
    
  • 测试配置:手动运行logrotate验证配置是否生效:
    sudo logrotate -f /etc/logrotate.d/my-js-app
    

6. 实时监控与告警设置
通过pm2进程管理器或monit工具,实时监控JavaScript应用的日志输出,并在检测到错误时触发告警。

  • 使用PM2监控日志:PM2提供日志实时查看、自动重启等功能。安装并使用PM2:
    sudo npm install pm2 -g
    pm2 start app.js --name my-app
    pm2 logs my-app --lines 0  # 实时查看所有日志
    pm2 logs my-app --lines 100 --error  # 仅查看错误日志
    
  • 使用Monit设置告警:Monit可监控日志文件中的关键字(如ERROR),并在匹配时发送邮件或Slack通知。安装Monit后,配置/etc/monit/conf.d/my-js-app.conf
    check file my-js-app-log with path /var/log/my-js-app.log
      if match "ERROR" then alert admin@example.com
    
    启动Monit服务:
    sudo systemctl start monit
    

7. 高级分析:集成ELK或Prometheus
对于大规模日志管理,可将JavaScript日志发送到ELK(Elasticsearch+Logstash+Kibana)或Prometheus+Grafana平台,实现可视化分析与告警。

  • ELK Stack配置:通过Logstash收集Node.js日志(输出到文件或stdout),存储到Elasticsearch,使用Kibana创建仪表盘展示日志趋势。
  • Prometheus+Grafana配置:使用prom-client库在Node.js应用中暴露指标(如请求次数、错误率),Prometheus抓取指标并通过Grafana创建监控面板,设置阈值告警。

0