Node.js 监控

论坛 期权论坛 期权     
Node Python Go全   2019-7-8 06:27   2903   0

应用程序没有监控,就如同运行在一个黑盒子里一样,我们既不知道它现在的状况,也难免会担心它在未来某个时刻挂掉。本文将会介绍 Node.js 监控的相关内容。


01


监控指标


监控最终一定是落实到一个个具体指标上的,我们需要重点关注哪些指标,这些指标背后又意味着什么呢?

1、CPU Usage

通常情况下,Node.js 消耗的 CPU 资源是很小的,它使用异步非阻塞 IO ,然而 event loop 运行在主线程中,主线程也是可以被阻塞的(比如执行大量 CPU 密集型任务),这会导致 CPU 的使用率及负载过高。(在程序上应该尽量避免 CPU 密集型任务,或者将它们分发到 worker 中去执行)

监控指标:
  • CPU Usage
  • CPU Load


2、Memory Usage and Leaks

在理解内存的使用和泄漏之前,你需要先了解 heap 和 stack 是什么:stack 用来存储函数及其上下文;heap 则是一个更大的区域,用来存储动态分配的 everything 。单个进程可以拥有的最大 heap 是 1.5 GB ,内存泄漏的问题不容忽视,即使 node.js 所基于的 V8 引擎拥有垃圾回收( Garbage Collection )机制。内存泄漏很容易观察到。

监控指标:
  • Released memory between Garbage Collection Cycles
  • Process Heap Size
  • Process Heap Usage


3、Garbage Collection

Garbage collection 有两种类型:一种是 incremental garbage collection cycles 增量垃圾回收周期一次只处理 heap 中的一部分,快速高效;另一种是 full garbage collection cycles 全量垃圾回收周期,这种方式会暂停程序的执行,因此执行频率很低。

通过测量增量或全量垃圾回收周期的执行频率,我们可以看到它们回收内存所需的时间以及释放的内存大小,将释放的内存与 heap 大小进行比较,观察是否存在增长趋势。

监控指标:
  • Time consumed for garbage collection
  • Counters for full garbage collection cycles
  • Counters for incremental garbage collection cycles
  • Released memory after garbage collection


4、Event Loop

Event loop 很特别,它将任务以异步的方式分发到主线程之外去执行,而它本身则需要处理这些事件的响应,也就是异步的回调函数。事件驱动很高效,但是可能会出现 event loop lag(事件驱动滞后),常见的原因是 long-running synchronous processes 和 incremental increase in tasks per loop 。

Long-running synchronous processe : 请注意在应用程序中处理同步执行的方式,毕竟其他操作都需要进行等待。Node.js 著名的规则就是 “Don't block the event loop”,正如上文所述,你可以使用 forks 或者子进程。

Incremental increase in tasks per loop : 事件循环的负载和任务数可能会增加,而 node.js 需要跟踪这些事件循环需要处理的所有异步函数,这可能会导致事件循环的滞后。当然不用过于担心,使用集群模式可以很好的解决这个问题。

监控指标:
  • Slowest Event Handling ( Max Latency )
  • Fastest Event Handling ( Min Latency )
  • Average Event Loop Latency


5、Cluster-Mode and Forking Worker  Processes

集群模式和 worker 进程也是现在用的比较多的地方,同样需要进行关注。

监控指标:
  • Worker count
  • Event loop latency per worker


6、Request/Response Latency

我们的服务最终都是处理请求和响应,监控自然必不可少。

监控指标:
  • Response time
  • Request rate
  • Error rates
  • Request/Response content size



02



开源监控工具



介绍几个开源的监控工具,开箱即用。

1、Prometheus

https://prometheus.io

普罗米修斯,开源的社区驱动的大名鼎鼎的工具,它可是和 Kubernetes 一样,都是从 Cloud Native Computing Foundation(云原生计算基金会)毕业的项目。这个工具是跨语言的。

2、PM2

https://github.com/Unitech/pm2

大家应该用得挺多。

3、Appmetrics

https://github.com/RuntimeTools/appmetrics-dash


4、Clinic.js

https://github.com/nearform/node-clinic

5、Express Status Monitor

https://github.com/RafalWilinski/express-status-monitor




分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:
帖子:
精华:
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP