在Ubuntu上监控Node.js应用可以通过多种工具和方法实现,以下是一些常用的监控解决方案:
PM2是一个流行的Node.js进程管理器,它不仅可以管理你的应用,还可以提供监控和自动重启功能。
安装PM2:
sudo npm install pm2 -g
启动应用并监控:
pm2 start app.js --name my-app
pm2 monitor
使用 pm2 monitor
命令可以查看应用的实时状态、CPU和内存使用情况。
Uptime Kuma是一个轻量级的自托管监控工具,支持多种监控类型,并通过Telegram、Discord、Slack等通知服务发送警报。
安装Uptime Kuma:
docker run -d --restart=always -p 3001:3001 -v uptime-kuma:/app/data --name uptime-kuma louislam/uptime-kuma
访问监控界面:
打开浏览器,访问 http://localhost:3001
查看监控面板。
Node.js提供了一些内置的性能监控工具,如 v8-profiler
和 heapdump
,可以帮助你收集关于内存泄漏和性能问题的信息。
使用heapdump:
const heapdump = require('heapdump');
heapdump.writeSnapshot('/path/to/snapshot.heapsnapshot');
然后可以使用Chrome DevTools的Memory面板来分析生成的堆快照。
外部监控服务如Datadog、New Relic和Prometheus等提供了更全面的监控功能,包括性能监控、错误跟踪和日志分析。
集成Prometheus:
使用 prom-client
库来暴露监控指标,并通过Prometheus服务器抓取这些指标。
const promClient = require('prom-client');
const httpRequestDurationMicroseconds = new promClient.Histogram({
name: 'http_request_duration_ms',
help: 'Duration of HTTP requests in ms',
labelNames: ['method', 'route', 'code'],
buckets: [0.10, 5, 15, 50, 100, 200, 300, 400, 500]
});
app.use((req, res, next) => {
const start = Date.now();
res.on('finish', () => {
const duration = Date.now() - start;
httpRequestDurationMicroseconds
.labels(req.method, req.route, res.statusCode)
.observe(duration);
});
next();
});
然后在Prometheus服务器上配置抓取目标。
日志记录对于监控和故障排除至关重要。可以使用 winston
或 bunyan
等日志库来记录应用的运行日志。
使用Winston:
const winston = require('winston');
const logger = winston.createLogger({
level: 'info',
format: winston.format.json(),
transports: [
new winston.transports.File({ filename: 'combined.log' }),
new winston.transports.Console()
]
});
通过记录日志,可以追踪应用的运行状态和错误信息。
通过上述方法,你可以有效地监控Node.js应用在Ubuntu上的性能和健康状况,确保应用的稳定性和可靠性。