首页主机资讯Ubuntu JS日志中如何监控系统资源

Ubuntu JS日志中如何监控系统资源

时间2025-11-21 00:22:04发布访客分类主机资讯浏览561
导读:Ubuntu 下用 JS 日志监控系统资源的实用方案 一 总体思路 在 Node.js 应用中内嵌对系统资源的定时采集(如 CPU 负载、内存使用率、系统运行时间、CPU 核心数),以结构化日志输出到文件或控制台,便于检索与聚合。 使用...

Ubuntu 下用 JS 日志监控系统资源的实用方案

一 总体思路

  • 在 Node.js 应用中内嵌对系统资源的定时采集(如 CPU 负载、内存使用率、系统运行时间、CPU 核心数),以结构化日志输出到文件或控制台,便于检索与聚合。
  • 使用 PM2systemd 托管进程,统一收集应用日志,并通过 journalctl 实时查看或按时间筛选。
  • 将日志集中到 ELK/Graylog 或可视化到 Prometheus + Grafana,按时间戳与 PID/实例ID 关联应用日志与系统指标,设置阈值告警,实现可观测性闭环。

二 在 Node.js 中记录系统指标

  • 使用 os 模块采集关键指标(示例为每 5 秒输出一次),并采用 JSON 结构化日志便于后续检索与聚合:
// monitor.js
const os = require('os');

const {
 createLogger, format, transports }
     = require('winston');


const logger = createLogger({

  level: 'info',
  format: format.combine(format.timestamp(), format.json()),
  transports: [
    new transports.File({
 filename: 'metrics.log', level: 'info' }
),
    new transports.Console()
  ]
}
    );


function getSystemStats() {
    
  const totalMem = os.totalmem();
    
  const freeMem = os.freemem();
    
  const usedMem = totalMem - freeMem;
    
  const cpus = os.cpus();
    
  const loadAvg = os.loadavg();
 // 1/5/15 分钟负载
  return {

    timestamp: new Date().toISOString(),
    platform: os.platform(),
    arch: os.arch(),
    cpu: {

      model: cpus[0].model,
      cores: cpus.length,
      loadAverage: loadAvg[0] // 1 分钟负载
    }
,
    memory: {

      total: (totalMem / 1024 / 1024 / 1024).toFixed(2) + ' GB',
      used: (usedMem / 1024 / 1024 / 1024).toFixed(2) + ' GB',
      free: (freeMem / 1024 / 1024 / 1024).toFixed(2) + ' GB',
      usagePercent: ((usedMem / totalMem) * 100).toFixed(2) + '%'
    }
,
    uptime: (os.uptime() / 3600).toFixed(2) + ' hours'
  }
    ;

}
    

// 定时记录
setInterval(() =>
 {
    
  logger.info('system_metrics', getSystemStats());

}
    , 5000);
    
  • 若需对外暴露健康/指标端点,可新增 /status 返回同样的结构化数据,便于 Prometheus 抓取或外部探活。

三 与系统日志和应用日志联动

  • 使用 PM2 托管并统一日志:
    • 启动:pm2 start app.js --name “my-app”
    • 实时查看:pm2 logs my-app
    • 资源监控:pm2 monit
  • 使用 systemd 托管并输出到 journal:
    • 查看服务日志:journalctl -u your-service-name -f
  • 将应用日志与系统日志通过统一时间戳、PID/实例ID、服务名等字段关联,便于跨来源排查与统计。

四 集中化监控与告警

  • 日志集中与检索:将 Node.js 的结构化日志(含系统指标)发送到 ELK Stack(Elasticsearch, Logstash, Kibana)Graylog,使用 Kibana/Graylog 仪表盘做可视化与查询。
  • 指标可视化与告警:将采集到的指标推送到 Prometheus(或直接以 /metrics 暴露),在 Grafana 构建面板并设置阈值告警(如内存使用率 > 80%、1 分钟负载持续高于 CPU 核心数)。
  • 生产级 APM:接入 New Relic / Datadog 获取调用链、错误追踪与更细粒度的性能洞察。

五 快速排查命令清单

  • 实时资源:top/htop(CPU/内存/进程)、vmstat 1(虚拟内存与 CPU)、iostat -x 1(磁盘 I/O)、free -h(内存)、df -h(磁盘空间)
  • 日志追踪:tail -f metrics.log;pm2 logs my-app;journalctl -u your-service-name -f
  • 关联分析:按时间戳对齐应用日志与系统指标,定位高负载/内存飙升的根因。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Ubuntu JS日志中如何监控系统资源
本文地址: https://pptw.com/jishu/752641.html
如何通过Ubuntu JS日志优化代码 Ubuntu JS日志中缺失数据怎么处理

游客 回复需填写必要信息