插件窝 干货文章 如何用JS监控Linux日志

如何用JS监控Linux日志

日志 const JavaScript 监控 764    来源:    2025-05-07

使用JavaScript监控Linux日志的方法

要在JavaScript中监控Linux日志,有几种可行的方法,以下是几种常见方案:

1. 使用Node.js实时监控日志文件

const fs = require('fs');
const tail = require('tail').Tail;

// 指定要监控的日志文件路径
const logFile = '/var/log/syslog'; // 或其他日志文件如/var/log/auth.log

// 使用tail库实时监控文件
const logTail = new tail(logFile);

logTail.on("line", function(data) {
  console.log("新日志:", data);
  // 这里可以添加你的处理逻辑,如发送到Web界面等
});

logTail.on("error", function(error) {
  console.error('监控出错:', error);
});

2. 通过SSH连接获取日志(适合远程监控)

const { NodeSSH } = require('node-ssh');

const ssh = new NodeSSH();

ssh.connect({
  host: 'your-linux-server',
  username: 'your-username',
  privateKey: '/path/to/private/key'
}).then(() => {
  // 执行tail命令实时获取日志
  ssh.execCommand('tail -f /var/log/syslog', {
    onStdout: (chunk) => {
      console.log('新日志:', chunk.toString('utf8'));
    },
    onStderr: (chunk) => {
      console.error('错误:', chunk.toString('utf8'));
    }
  });
});

3. 创建REST API接口获取日志

在Linux服务器上创建简单的Node.js服务:

const express = require('express');
const fs = require('fs');
const app = express();
const port = 3000;

app.get('/logs', (req, res) => {
  // 读取日志文件内容
  fs.readFile('/var/log/syslog', 'utf8', (err, data) => {
    if (err) {
      return res.status(500).send('无法读取日志文件');
    }
    res.send(data);
  });
});

app.listen(port, () => {
  console.log(`日志服务运行在 http://localhost:${port}`);
});

然后在客户端JavaScript中调用:

// 定期获取日志
setInterval(() => {
  fetch('http://your-server:3000/logs')
    .then(response => response.text())
    .then(logs => {
      console.log('最新日志:', logs);
    });
}, 5000); // 每5秒获取一次

4. 使用WebSocket实时推送日志

服务器端:

const express = require('express');
const WebSocket = require('ws');
const { exec } = require('child_process');

const app = express();
const wss = new WebSocket.Server({ port: 8080 });

wss.on('connection', (ws) => {
  // 启动tail命令监控日志
  const tailProcess = exec('tail -f /var/log/syslog');

  tailProcess.stdout.on('data', (data) => {
    ws.send(data.toString());
  });

  ws.on('close', () => {
    tailProcess.kill();
  });
});

app.listen(3000);

客户端:

const ws = new WebSocket('ws://your-server:8080');

ws.onmessage = (event) => {
  console.log('收到新日志:', event.data);
};

注意事项

  1. 权限问题:确保运行JavaScript代码的用户有权限读取日志文件
  2. 安全性:不要在生产环境中使用root权限运行这些脚本
  3. 日志轮转:Linux日志会轮转(rotate),需要考虑如何处理这种情况
  4. 性能影响:持续监控日志可能对系统性能有影响,特别是高流量的日志文件
  5. 错误处理:添加适当的错误处理机制

以上方法可以根据你的具体需求进行调整和组合使用。