Github: github.com/midwayjs/pa…, 欢迎 PR、Issue 和 Star.javascript
Pandora.js 阿里巴巴产出的一个Node.js 应用监控管理器,可让您对本身的 Node.js 应用了若指掌,咱们的目标就是让应用可管理、可度量、可追踪。html
咱们自 2014 年开始使用 Node.js 并参与运维工做,Pandora.js 是淘宝 Midway 团队这些年对企业环境 Node.js 运维监控的一个沉淀与总结。在发展的过程当中,咱们大量使用了社区的开源软件,此次 Pandora.js 的开源是对社区的回馈。但愿 Pandora.js 能让 Node.js 更好的应用在专业的商业场景上,给予它更好的基础监控运维能力去服务大规模商业场景。java
同时,这也是阿里巴巴开源的第一个使用了类型系统的 Node.js 软件。它使用的是 TypeScript,为 Pandora.js 带来了史无前例的逻辑健壮性。node
欢迎您来体验,同时更欢迎您基于 Pandora.js 建构您的 Node.js 运维基础设施。git
就像前面提到的同样,Pandora.js 是一个 Node.js 应用监控管理器。它集成了多种类型的能力诸如:监控、链路追踪、调试、进程管理等等。一个一个讲太过凌乱,这里分为几个大范畴:github
上面提到的所有能力和数据,所有经过 RESTFul 接口或文本日志透出,您能够轻松的将其集成进您的监控管理系统(为了更好的配套,在不远的未来咱们也会将咱们的私有监控管理平台开源)。npm
这样的归纳仍是有些枯燥与难以理解,接下来会经过 Pandora.js dashboard 的界面介绍几个主要特性,Pandora.js dashboard 是一个与 Pandora.js 相配套的单机可视化仪表。而后在文章的最后是一个能够跑起来的例子~json
链路追踪是第一个要介绍的重量级特性,能够追踪每一个业务请求的全过程,在运行时直观的看出接口或页面慢在哪里、错在哪里、超时在哪里。api
听上去很厉害的样子,但实际使用起来很简单。您只须要简单的使用 Pandora.js 来启动您的应用,而后打开 Pandora.js dashboard 就能够看到您的业务链路的所有细节:promise
轻松识别慢链路和错误链路
调用了,哪里耗时多,一目了然
Pandora.js 为您默认提供了近百项开箱即用的默认监控指标,让您轻松的开始监控您的应用。
默认提供了,Node.js Runtime 指标,操做系统指标,HTTP Incoming 指标等等。
Node.js 指标,包含大量运行时指标
操做系统指标,包含 Load、CPU、内存、磁盘、网络、TCP 等各类指标
应用运行在生产环境,咱们有太多想要知道和观察的数据了。以往咱们都是写不少日志文件,查看分析十分麻烦。Pandora.js 的 Metrics 提供了 Gauge(瞬时)、Counter(计数)、Meter(流速)、Histogram(直方图) 等多种度量类型,您能够轻易地完成大部分的应用或业务指标。
下面是一个例子:
根据 Email 去 Gravatar 获取用户的 Profile。而后我想统计有多少次成功了,多少次失败了。(这个例子在文章后面有附上)
const {MetricsClientUtil} = require('dorapan'); // dorapan 是 pandora 的一个客户端 sdk
const client = MetricsClientUtil.getMetricsClient(); // 得到 Metrics 客户端
// 建立两个 Counter (计数)类型的指标
const successCounter = client.getCounter('custom', 'custom.gravatar.success');
const failCounter = client.getCounter('custom', 'custom.gravatar.fail');
// ...此处省略若干代码
const userAvatars = {};
const promises = [];
for(const user of rows) {
const profileUrl = gravatar.profile_url(user.email);
promises.push(urllib.request(profileUrl, {
followRedirect: true, dataType: 'json'
}).then((res) => {
if(typeof res.data === 'object') {
successCounter.inc(1);
userAvatars[user.email] = res.data;
} else {
failCounter.inc(1);
}
}));
}
await Promise.all(promises);
复制代码
能够看到 Metrics 中已经出现了 Custom 分组:
固然还有更多的 Metrics 类型能够实践,请具体参见文档。
这个例子的演示依赖两个部件:
您最好在 Linux 系统安装,同时 Pandora.js 依赖 Node.js >= 8.0.0 (也就是当前的 LTS 版本。咱们在 macOS 上指标有部分实现也能够。若是您是 Windows 用户的话,我只能说欢迎 PR)。
$ npm i pandora -g
复制代码
安好后您会得到一个 pandora 命令。
$ npm i pandora-dashboard -g
复制代码
而后您就能够启动 Pandora.js dashboard 了。
$ pandora start --name dashboard `pandora-dashboard-dir`
复制代码
上面有个 command substitution pandora-dashboard-dir
,它是 Pandora.js 注入的一个全局命令。用来输出 Pandora.js dashboard 的目录,而后 Pandora.js 会把它当成一个普通的项目来启动。
安装完 Dashboard 以后打开 http://127.0.0.1:9081
,您能够看到 Dashboard 这个应用,这就是 Pandora.js dashborad 本身。
我找到一个 Node.js 的 简单 MySQL CRUD 的例子来进行接下来的演示。固然我为了演示还作了一些修改。示例项目在 Github,Clone 它您也能够跑跑试试看。
在这个例子里主入口为 server.js
,在项目根目录运行下面的命令来初始化。
$ pandora init server.js
? Which type do you like to generate ? (Use arrow keys)
fork
❯ cluster
复制代码
我选择了 Cluster,不过您能够选择任意一个,这两个选项的行为就像 PM2 同样。Fork 简单拉起 server.js ,而 Cluster 则用 Node.js 的 Cluster 模块启动 server.js (即 Master / Worker 模型)。
在初始化完后,将会生成一个 procfile.js
文件。这个文件用来定义项目结构,就像 PM2 的 Process file 同样。其实 procfile 就是 Process File 的简写。
而后咱们运行 pandora start
来启动应用:
$ pandora start
Starting rest-crud at /xx/xxx/rest-crud
rest-crud started successfully! Run command [ pandora log rest-crud ] to get more information
复制代码
先放问下 http://127.0.0.1:300/api/user
查看下简单的 CRUD 例子,稍微作点操做。
而后让咱们无视 Run command [ pandora log rest-crud ]
这个提示,直接打开 http://127.0.0.1:9081/
,而后您将看到:
点击 Standard Output
按钮来查看控制台输出:
点击 Trace
查看全部的链路:
点击 Metrics
查看全部的 Metrics 指标:
Node.js 应用在运维方面依旧仍是很薄弱,Pandora.js 所作的也只是一点点工做,帮忙开发者更加了解本身的应用,在问题来临时,再也不迷惘,再也不慌乱。
四年间,咱们看到了 Node 的兴起,工具链的完善,也看到了应用场景的萎缩,产品的各类迭代和意外,唏嘘之余,依旧得作好份内之事,让 Node 在部门,在集团,乃至在业界都能有一些成长和突破,同时让本身看清和选择一条路,坚决的走下去。
最后,再一次欢迎您来体验,尝试基于 Pandora.js 来建构您的 Node.js 运维基础设施,让天下没有难管理的应用。