在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上的性能和健康狀況,確保應用的穩定性和可靠性。