Node.js 中的 Prometheus 指标:prom-client 库
Prometheus 是一个强大的开源监控和告警系统,它从您的应用程序和基础设施中收集指标。为了将 Prometheus 与 Node.js 应用程序集成,存在一个官方且最流行的库 prom-client。它提供了现成的工具,用于创建、注册和导出 Prometheus 能够理解的格式的指标。
在本文中,我们将详细讨论如何安装和使用 prom-client,有哪些可用的指标类型,以及如何配置用于数据收集的端点。
安装 prom-client
使用标准的 npm 包管理器安装该库:
npm install prom-client安装后,您可以将该库导入到您的项目中:
const client = require('prom-client');Prometheus 的主要指标类型
Prometheus 支持四种主要指标类型,每种类型解决不同的问题:
- Counter — 只能增加的计数器(例如,请求数、错误数)。
- Gauge — 可以增加或减少的值(例如,活跃用户数、内存使用量)。
- Histogram — 用于测量值分布情况的直方图(例如,请求响应时间)。
- Summary — 类似于直方图,但在应用程序端计算分位数。
prom-client 使用示例
我们以一个简单的 Express 应用程序为例,演示如何创建每种指标类型。
1. Counter(计数器)
计数器非常适合统计事件数量,例如 HTTP 请求或错误。
const httpRequestsCounter = new client.Counter({ name: 'http_requests_total', help: 'Total number of HTTP requests', labelNames: ['method', 'status']});
// 使用方式:httpRequestsCounter.inc({ method: 'GET', status: 200 });httpRequestsCounter.inc({ method: 'POST', status: 500 });2. Gauge(测量仪)
Gauge 允许跟踪可以双向变化的当前值。
const activeUsersGauge = new client.Gauge({ name: 'active_users', help: 'Number of active users'});
// 增加 1:activeUsersGauge.inc();// 减少 1:activeUsersGauge.dec();// 设置特定值:activeUsersGauge.set(42);3. Histogram(直方图)
直方图有助于分析操作执行时间的分布。
const requestDurationHistogram = new client.Histogram({ name: 'http_request_duration_seconds', help: 'Duration of HTTP requests in seconds', labelNames: ['method', 'route'], buckets: [0.1, 0.5, 1, 2, 5] // 桶的边界(以秒为单位)});
// 计时:const end = requestDurationHistogram.startTimer();// ... 执行请求 ...end({ method: 'GET', route: '/api/users' });4. Summary(摘要)
Summary 类似于直方图,但提供精确的分位数(例如,中位数、第 95 百分位数)。
const requestDurationSummary = new client.Summary({ name: 'http_request_duration_summary_seconds', help: 'Summary of HTTP request duration in seconds', labelNames: ['method', 'route'], percentiles: [0.5, 0.9, 0.99] // 用于计算的分位数});
// 使用方式与直方图类似:const endSummary = requestDurationSummary.startTimer();// ... 执行请求 ...endSummary({ method: 'GET', route: '/api/data' });为 Prometheus 配置端点
为了让 Prometheus 能够收集指标,需要创建一个单独的 HTTP 端点(通常是 /metrics),该端点将返回数