Node.js 中的 Prometheus 指标:prom-client 库

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

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

开始课程

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),该端点将返回数

推荐