在开发 Web 应用程序时,性能监控是非常必要的一件事情。因此,引入一种运行时指标监控工具是非常必要的。nestjs-prometheus 是一个基于 NestJS 的运行时指标监控工具,可以帮助你监控你的 NestJS 应用程序运行的各种指标。本文将介绍在 NestJS 中如何使用这个 npm 包。
安装和配置
首先,你需要在你的 NestJS 应用程序中安装 @panterazar/nestjs-prom,可以通过以下命令进行安装:
npm install @panterazar/nestjs-prom
安装完成后,你需要在你的应用程序主模块中进行配置。在这个模块中,你需要从 @panterazar/nestjs-prom 中导入 NestJSPrometheusService 和 PromModule,如下所示:
-- -------------------- ---- ------- ------ - ------ - ---- ----------------- ------ - ----------------------- - ---- -------------------------- ------ - ---------- - ---- -------------------------- --------- -------- ------------------------ ------------ --- ---------- - ------------------------ -- ----- --------- -- -- ------ ----- --------- --
这个示例代码中,PromModule 的 register 方法用来配置和启用 Prometheus 服务。NestJSPrometheusService 是一个提供了各种指标的服务。
为了方便启用和配置,你可以根据你的需要在 PromModule 中传递一些配置选项,例如启用 Process 监控器和 HTTP 监控器,如下所示:
-- -------------------- ---- ------- ------ - ------ - ---- ----------------- ------ - ----------------------- - ---- -------------------------- ------ - ---------- - ---- -------------------------- --------- -------- - --------------------- -------------- - ---- -------------------- -- ----------------------- ----- ---------------------------- ----- ----------------------- ----- --- -- ------------ --- ---------- - ------------------------ -- ----- --------- -- -- ------ ----- --------- --
在这个示例代码中,配置默认标签,启用默认的控制器,进程监控器和 HTTP 监控器。
使用 NestJSPrometheusService
当配置完成后,在控制器和服务中就可以使用 NestJSPrometheusService 服务来记录各种指标和值。这个服务提供了很多方法,可以用来记录各种指标,例如计数器、直方图、摘要等。
这里将介绍一些基本的使用示例,在实际场景中,你可以根据需求来使用各种指标。
计数器
计数器指标用来记录某些事件发生的次数。例如在 NestJS 中,可以用计数器来记录 API 接口请求的总数。
-- -------------------- ---- ------- ------ - ----------- ---- --------------- - ---- ----------------- ------ - ----------------------- - ---- -------------------------- ------------- -------------------------------------------------------- ------ ----- ------------- - ------------------- -------- ------------ ------------------------ -- ------ ------- ------ - -------------------------- ----- ---------------------- ----- ------ ---- ---------- ----------- ---------- ---------- -------- ------- ------ ------- ----- --- ------ ------ -------- - -
这个示例代码中,我们创建了一个名为 http_requests_total
的计数器,并且记录了一次 GET 请求的状态为 200。
直方图
直方图指标用于记录事件发生的频率,以及在某个时间段内事件分布的情况。例如在 NestJS 开发中,可以用直方图来记录 API 接口请求的请求时间分布情况。
-- -------------------- ---- ------- ------ - ----------- ---- --------------- - ---- ----------------- ------ - ----------------------- - ---- -------------------------- ------------- ---------------------------------------------------------- ------ ----- ------------- - ------------------- -------- ------------ ------------------------ -- ------ ------- ------ - ----- -------- - ---------------------------- ----- -------------------------------- ----- ----- ------- -------- -- --------- ----------- ---------- ---------- -------- ------- ----- ---- -- ---- --------------- ------- ------ ------- ----- --- ------ ------ -------- - -
这个示例代码中,我们创建了一个名为 http_request_duration_seconds
的直方图,并记录了一次 GET 请求的时间分布情况,分别为 0.001 秒、0.01 秒、0.1 秒、1 秒和 10 秒。
摘要
摘要指标用于记录一组样本的分布情况,与直方图类似,但更加精细。例如在 NestJS 中,可以用摘要指标来记录系统 CPU 使用率的分布情况。
-- -------------------- ---- ------- ------ - ----------- ---- --------------- - ---- ----------------- ------ - ----------------------- - ---- -------------------------- ------------- --------------------------------------------------------- ------ ----- ------------- - ------------------- -------- ------------ ------------------------ -- ------ ------- ------ - -------------------------- ----- ------------ ----- ---- ------- ----------- ------------- -------------- --- ----------- -- ------------ ----- ---- ----- ------------ --------- ------------------- -- ----- ------ ------ -------- - -
这个示例代码中,我们创建了一个名为 cpu_usage
的摘要指标,并记录了应用程序的 CPU 使用率分布情况,分别为 0.1、0.5 和 0.9。
结论
nestjs-prometheus 是一个非常强大的运行时指标监控工具,它可以帮助开发人员监控应用程序中的各种指标。本文介绍了如何在 NestJS 中使用 @panterazar/nestjs-prom 这个 npm 包来实现指标监控。如果你想了解更多关于指标监控的知识,以及如何在 NestJS 中使用它,则建议你仔细阅读 NestJS 和 @panterazar/nestjs-prom 的官方文档。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60067357890c4f7277583cde