Ubuntu JS日志中如何监控系统资源
导读:Ubuntu 下用 JS 日志监控系统资源的实用方案 一 总体思路 在 Node.js 应用中内嵌对系统资源的定时采集(如 CPU 负载、内存使用率、系统运行时间、CPU 核心数),以结构化日志输出到文件或控制台,便于检索与聚合。 使用...
Ubuntu 下用 JS 日志监控系统资源的实用方案
一 总体思路
- 在 Node.js 应用中内嵌对系统资源的定时采集(如 CPU 负载、内存使用率、系统运行时间、CPU 核心数),以结构化日志输出到文件或控制台,便于检索与聚合。
- 使用 PM2 或 systemd 托管进程,统一收集应用日志,并通过 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
