【译】生产环境下的Node.js——开源监控工具

你认为Node.js应用程序能够拥有的最重要的功能是什么? 是花哨的全文模糊匹配搜索,仍是用socket进行实时聊天呢? 你能告诉我能够添加到Node.js应用中的最高级,最惊人和最吸引人的功能是什么么?javascript

想知道个人么?高性能和不间断服务。高性能应用程序须要作好如下三点:html

  1. 最短的停机时间;
  2. 可预测的资源使用率;
  3. 根据负载有效扩展

在第1部分,Node.js要监控的关键指标中,咱们讨论了您应该监控的关键Node.js指标,以便了解应用程序的运行情况。 我还解释了你应该避免的Node.js中的错误作法,例如阻塞线程和形成内存泄漏,还有一些巧妙的技巧能够用来提升应用程序的性能,好比使用集群模块建立工做进程和将长时间运行的任务从主线程分离开来用独立线程运行。java

在本文中,我将描述如何使用5种不一样的开源工具监控Node.js应用程序。它们可能没有像SematextDatadog那样功能全面,但它们是开源产品,能够彻底由本身控制。node

Appmetrics

Node应用指标监控看板显示了运行中的Node.js应用程序的性能数据。这是一个简单的模块,在Node.js入口文件的顶部应用并初始化。你能够经过在终端中运行如下命令从npm安装。git

$ npm install appmetrics-dash
复制代码

Appmetrics提供了一个很是易于使用的Web仪表板。为了得到全部由应用程序建立的HTTP服务的仪表板,你须要作的是在app.js(或者以其余命名的入口文件)文件中添加如下代码段。github

// Before all other 'require' statements
require('appmetrics-dash').attach()
复制代码

以后你将经过这个请求路径/appmetrics-dash中看到大量有用的指标。docker

  • CPU Profiling
  • HTTP传入请求
  • HTTP吞吐量
  • 平均响应时间(前5名)
  • CPU
  • 内存
  • 堆(Heap)
  • 事件循环时间(Event Loop Times)
  • 环境
  • 其余请求
  • HTTP出站请求

此工具不只显示指标。它容许您直接从仪表板生成Node.js报告和堆快照(Heap Snapshots)。 除此以外,您还可使用Flame Graphs,很是酷的开源工具。express

Express Status Monitor

Express.js是当前Node.js开发人员的的首选框架。 Express Status Monitor是一个很是简单的独立模块,您能够将其添加到Express应用。它公开了一个/status路由,在Socket.io和Chart.js的帮助下报告实时服务器指标。npm

从npm安装便可。api

$ npm install express-status-monitor
复制代码

安装完这个模块以后,你须要在其余中间件或者路由以前添加它。

app.use(require('express-status-monitor')())
复制代码

以后一旦你运行你的应用,你就能够经过/status路由检查你的Node.js指标。

Prometheus

除非你生活在原始时代,否则你必定据说过Prometheus。这是目前咱们能使用的最著名的开源监控工具。Prometheus 100%开源并由社区驱动。全部的组件在听从Apache 2 License开源协议并能够从GitHub下载。它是由CNCF(Cloud Native Computing Foundation)管理并已经毕业成员项目之一,跟它一样的成员项目包括KubernetesFluentd等。

要开始使用Prometheus进行监控,您须要下载最新版本并进行安装。

$ tar xvfz prometheus-\*.tar.gz
$ cd prometheus-\*
复制代码

而后经过运行可执行文件启动它,但在运行此命令以前,须要建立一个prometheus.yml文件。 它是一个配置文件,用于配置在哪些targets上,经过抓取HTTP端点数据监控哪些指标。

# prometheus.yml
scrape_configs:
 - job_name: 'prometheus'
 scrape_interval: 1s
 static_configs:
 - targets: ['127.0.0.1:3000']
 labels:
 service: 'test-prom'
 group: 'production'
复制代码

如今你可使用Prometheus了。

$ ./prometheus --config.file=prometheus.yml
复制代码

可是,我很懒,并且我很是喜欢Docker。 因此个人作法是运行官方的Prometheus Docker镜像,避免下载它的全部麻烦。

Prometheus and Docker

首先,进到Node.js应用程序的根目录。在这里,建立一个prometheus-data目录并将prometheus.yml文件放入其中。完成此操做后,运行Prometheus Docker容器。

获取正式的Prometheus Docker镜像并使用docker run命令运行该镜像。

$ docker run -d \
    --name prometheus \
    --network="host" \
    -v "$(pwd)/prometheus-data":/prometheus-data \
    prom/prometheus \
    --config.file=/prometheus-data/prometheus.yml
复制代码

我选择使用-network =“host”运行容器,让Prometheus容器能够经过本机localhost地址访问,而且这样作,Node.js应用程序的也能经过本机HTTP端口访问到。不然,若是你将Prometheus和Node.js分别运行在容器内,则须要在二者之间创建一个网络,以便彼此之间只能相互访问到。

-v选项用于将prometheus-data目录从主机映射到容器内的同名目录。

在Prometheus容器运行后,须要在Node.js应用程序中添加配置的代码以暴露一个监控数据接口。 首先须要从npm安装适用于Node.js的Prometheus客户端

$ npm install prom-client
复制代码

接在添加相关Prometheus相关配置代码

// after all 'require' statements
const client = require('prom-client')
const collectDefaultMetrics = client.collectDefaultMetrics
collectDefaultMetrics({ timeout: 1000 })
app.get('/metrics', (req, res) => {
  res.set('Content-Type', client.register.contentType)
  res.end(client.register.metrics())
})
复制代码

接下来你只需运行Node.js应用以后,经过http://localhost:9090/graph就能够看到Prometheus图表

Clinic.js

Clinic.js包含三个工具,可帮助诊断和查明Node.js性能问题。它的使用很是简单。你须要作的就是从npm安装模块并运行它。它将为您生成报告,使故障排除变得更加容易。

使用以下命令安装Clinic.js

$ npm install clinic
复制代码

一旦安装完毕,就能够选择要生成的报告类型了。你能够选择如下三种报告类型。

  • Doctor
    1. 经过注入探针来收集指标
    2. 评估健康和启发式
    3. 提供修复推荐
  • Bubbleprof- 一种全新的,彻底独特的方法来分析Node.js代码
    1. 使用async_hooks收集指标
    2. 跟踪操做之间的延迟
    3. 建立气泡图
  • Flame - 使用火焰图揭示代码中的瓶颈和热路径
    1. 经过CPU采样收集指标
    2. 跟踪栈顶频率
    3. 建立火焰图

让咱们从运行Doctor并测试node.js应用程序开始。

$ clinic doctor -- node app.js
复制代码

在程序运行时,使用压测工具运行负载测试。

$ loadtest -n 1000 -c 100 [http://localhost:3000/api](http://localhost:3000/api)
复制代码

一旦完成运行,中止服务器和Clinic.js Doctor将打开您能够查看的报告。

使用相同的方法,您能够运行Bubbleprof或Flame并获取相应工具的图形报告。

PM2

使用PM2在生产中运行Node.js应用程序变得更加容易。 它是一个进程管理器,能够轻松地让您以集群模式运行应用程序。通俗来讲,它将为您的主机每一个CPU核心都生成一个进程。

首先安装PM2

$ npm install pm2 -g
复制代码

安装完成后,若是您的主源文件是app.js,则经过在终端中运行此命令来生成PM2守护程序。

$ pm2 start app.js -i 0
复制代码

-i 0标志实例个数。这将以集群模式运行Node.js应用程序,其中数字0表示CPU核心数。你能够手动输入你想要的任何数字,但让PM2计算核心个数并自动产生相应个数的工做进程更简单些。

使用PM2查看Node.js监控数据也很容易

$ pm2 monit
复制代码

此命令将在终端中打开仪表板。在这里,您能够监视进程,日志,循环延迟,进程内存和CPU。

使用开源工具将监控Node.js方案进行包装

性能指标对于让用户满意相当重要。在本文中,我向您展现了如何使用5种不一样的开源工具向Node.js应用程序添加监视。 在了解了本系列第1部分Node.js要监控的关键指标以后,添加工具来监控现实生活中的应用程序是天然的学习进程。 本系列的最后一部分将介绍使用Sematext进行生产环境下Node.js监控

若是你想查看示例代码,这里是一个包含全部的实例代码 repo。你还能够克隆下来并选择任何工具打开。

若是你须要更多软件的全栈可观察性,请查看Sematext。 咱们正在推进开源咱们的产品并产生影响。

原文:Node.js Open-Source Monitoring Tools

参考资料

相关文章
相关标签/搜索