温馨提示×

如何使用Linux日志进行JS监控

小樊
33
2026-01-01 21:57:16
栏目: 编程语言

Linux日志下的JS监控实操指南

一 场景与总体思路

  • 前端或 Node.js 应用将日志写入文件或标准输出,Linux 端用命令行工具实时查看与过滤,或用 Node.js 脚本做增量读取与自定义处理,再结合 Logstash/Fluentd/Graylog/ELK 做集中化与可视化。
  • 典型链路:应用日志 → 本地文件或 stdout → 命令行实时 tail/grep →(可选)Node.js 增量处理 →(可选)集中化平台告警与看板。

二 命令行快速监控

  • 实时跟踪日志尾部:tail -f /path/to/app.log
  • 关键字高亮与过滤:tail -f /path/to/app.log | grep --color=auto ERROR
  • 多关键字匹配:tail -f /path/to/app.log | grep -E ‘ERROR|WARN’
  • 定时统计新增关键字:watch -n 1 “grep -c ‘ERROR’ /path/to/app.log
  • 分页查看并跟随:tail -f /path/to/app.log | less
  • 说明:将 ERROR/WARN/Exception 等替换为你的业务关键字;Node.js 应用可用 console.error/console.log 输出到文件或 stdout 再由上述命令监控。

三 用 Node.js 监听日志文件

  • 方案A 基于 fs.watchFile 的增量读取(简单直观)
// logMonitor.js
const fs = require('fs');
const path = require('path');

// 注意:生产环境请处理文件轮转(如 logrotate),本例为简化演示
const logPath = '/var/log/myapp/app.log';
let lastSize = 0;

fs.watchFile(logPath, { interval: 500 }, (curr, prev) => {
  if (curr.size > lastSize) {
    const stream = fs.createReadStream(logPath, {
      start: lastSize,
      encoding: 'utf8'
    });
    stream.on('data', chunk => process.stdout.write(chunk));
    stream.on('end', () => { lastSize = curr.size; });
  }
});

运行:node logMonitor.js(需对日志文件有读取权限;仅适用于本地日志)。

  • 方案B 基于 readline 的按行处理(更稳健,便于解析)
// lineReader.js
const fs = require('fs');
const readline = require('readline');

const logPath = '/var/log/myapp/app.log';
const rl = readline.createInterface({
  input: fs.createReadStream(logPath, { encoding: 'utf8' }),
  crlfDelay: Infinity
});

rl.on('line', line => {
  if (/ERROR|WARN|Exception/i.test(line)) {
    // 可接入告警:sendAlert(line)
    console.log('[ALERT]', new Date().toISOString(), line);
  }
});

运行:node lineReader.js(同样需读取权限;可按需扩展正则与上报逻辑)。

四 集中化监控与告警

  • 日志收集与处理:使用 Logstash/Fluentd/Graylog 统一采集、解析与转发日志,便于多实例与多环境聚合。
  • 存储与可视化:将处理后的日志送入 Elasticsearch,用 Kibana 建立索引模式、仪表板与告警规则,实现错误趋势、Top 报错、响应时延等关键指标的可视化与阈值告警。

五 排错与运维要点

  • 权限与路径:确保运行监控的用户对日志文件具备读取权限;容器或 systemd 场景注意日志实际路径与挂载。
  • 文件轮转:日志切割后需处理 inode/句柄变化,避免漏读或重复读;生产可结合 logrotate 并在脚本中处理轮转事件。
  • 远程场景:跨机日志建议用 SSH 隧道 + tail -f 或在目标机部署采集代理(如 Filebeat/Logstash/Fluent Bit)再集中到平台。
  • Node.js 应用侧:使用结构化日志(如 Winston/Bunyan/Morgan),统一时间格式与字段(level、msg、trace_id),便于检索与聚合。

0