注册、埋点、暴露
在默认注册表注册计数器与直方图,对请求路径埋点,以文本格式暴露 /metrics。Prometheus 按其间隔抓取该端点。
const requests = new Counter({ name: 'http_requests_total', help: 'Total requests', labelNames: ['method', 'route'] });
const latency = new Histogram({ name: 'http_request_duration_seconds', help: 'Latency', labelNames: ['method', 'route'], buckets: [0.01, 0.1, 1] });
标签保持低基数
用模板路由如 /users/:id 作标签,而非原始路径。每请求唯一标签会使序列数爆炸并耗尽 Prometheus 内存。
app.get('/metrics', async (req, res) => res.set('Content-Type', register.contentType).end(await register.metrics()));
预期结果
GET /metrics 返回含计数器与直方图序列的文本格式,仪表盘显示请求速率与延迟分位,标签基数有界。按固定间隔抓取并据速率与分位告警。默认注册表为进程全局,长跑进程累积的序列需重启重置;直方图桶在注册时固定,更改需重新部署。