TypeScript 中的 Prometheus 指标:client.js 完整指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

TypeScript 中的 Prometheus 指标:实践指南



Prometheus 是一个强大的开源监控和告警系统。要与 TypeScript 应用程序集成,需要使用 prom-client(Prometheus Client)库。它允许以 Prometheus 服务器可理解的格式收集、聚合和导出指标。在本文中,我们将详细介绍如何在 TypeScript 中使用 Prometheus 指标,包括指标类型、代码示例和最佳实践。



安装与配置



首先,通过 npm 安装包:

npm install prom-client


对于 TypeScript,还需要安装类型定义:

npm install @types/prom-client --save-dev


安装完成后,创建一个 metrics.ts 文件来初始化客户端:



import client from 'prom-client';

// 启用默认指标收集(GC、内存、CPU)const collectDefaultMetrics = client.collectDefaultMetrics;collectDefaultMetrics({ timeout: 5000 });

// 创建用于存储指标的注册表const register = client.register;

export { client, register };


Prometheus 主要指标类型



Prometheus 支持四种主要指标类型。下面我们结合 TypeScript 示例逐一介绍。



1. Counter(计数器)

用于统计只会增加的事件(请求数、错误数)。



import { Counter } from 'prom-client';

const httpRequestsTotal = new Counter({ name: 'http_requests_total', help: 'HTTP 请求总数', labelNames: ['method', 'path', 'status_code'],});

// 在请求时增加计数器httpRequestsTotal.inc({ method: 'GET', path: '/api', status_code: 200 });httpRequestsTotal.inc({ method: 'POST', path: '/users', status_code: 201 }, 2); // +2


2. Gauge(仪表盘)

可以增加和减少。用于表示当前值(内存、队列长度)。



import { Gauge } from 'prom-client';

const memoryUsageGauge = new Gauge({ name: 'memory_usage_bytes', help: '当前内存使用量(字节)',});

// 设置值memoryUsageGauge.set(process.memoryUsage().heapUsed);

// 按增量修改memoryUsageGauge.inc(1024); // +1KBmemoryUsageGauge.dec(512); // -512B


3. Histogram(直方图)

用于测量值的分布(例如响应时间)。



import { Histogram } from 'prom-client';

const httpRequestDuration = new Histogram({ name: 'http_request_duration_seconds', help: 'HTTP 请求持续时间(秒)', labelNames: ['method', 'route'], buckets: [0.1, 0.3, 0.5, 1, 2, 5], // 桶边界});

// 观测值const start = Date.now();// ... 处理请求 ...httpRequestDuration.observe( { method: 'GET', route: '/api' }, (Date.now() - start) / 1000);


4. Summary(摘要)

类似于直方图,但在客户端计算分位数。



import { Summary } from 'prom-client';

const responseTimeSummary = new Summary({ name: 'response_time_summary_seconds', help: '响应时间摘要(秒)', percentiles: [0.5, 0.9, 0.99], // 分位数});

responseTimeSummary.observe(0.42);responseTimeSummary.observe(0.35);


为 Prometheus 导出指标



创建一个 /metrics 端点,以文本格式提供指标:



import express from 'express';import { register } from './metrics';

const app = express();

app.get('/metrics', async (req, res) => { try { res.set('Content-Type', register.contentType); res.end(await register.metrics()); } catch (err) { res.status(500).end(err); }});

app.listen(3000, () => console.log('服务器运行在端口 3000'));


现在,当收到 GET 请求时

推荐