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. 利用第三方日志库增强监控能力
为提升日志管理的灵活性(如日志分级、格式化、输出到文件),可使用winston或bunyan等第三方日志库。
info、error)。示例代码: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');
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,便于统一管理日志。
/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工具自动轮转日志文件(如按天分割、压缩旧日志),防止日志文件占用过多磁盘空间。
/etc/logrotate.d/下创建配置文件(如my-js-app),内容如下:/path/to/your/nodejs/logs/*.log {
daily
missingok
rotate 7
compress
notifempty
create 0640 www-data adm
}
sudo logrotate -f /etc/logrotate.d/my-js-app
6. 实时监控与告警设置
通过pm2进程管理器或monit工具,实时监控JavaScript应用的日志输出,并在检测到错误时触发告警。
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 # 仅查看错误日志
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平台,实现可视化分析与告警。
prom-client库在Node.js应用中暴露指标(如请求次数、错误率),Prometheus抓取指标并通过Grafana创建监控面板,设置阈值告警。