Node.js 应用监控管理器 Pandora.js

MIT
跨平台
阿里巴巴
2018-02-23
big_allen

Pandora.js 阿里巴巴产出的一个Node.js 应用监控管理器,可以让您对自己的 Node.js 应用了若指掌,我们的目标就是让应用可管理、可度量、可追踪。

同时,这也是阿里巴巴开源的第一个使用了类型系统的 Node.js 软件。它使用的是 TypeScript,为 Pandora.js 带来了前所未有的逻辑健壮性。

什么是 Pandora.js

就像前面提到的一样,Pandora.js 是一个 Node.js 应用监控管理器。它集成了多种类型的能力诸如:监控、链路追踪、调试、进程管理等等。一个一个讲太过凌乱,这里分为几个大范畴:

  1. 让业务更易追踪

    • 基于 Open-tracing 实现了业务链路追踪系统。

    • 实时追踪每个请求链路,让每次请求不再是黑盒。在运行时直观的看出接口或页面慢在哪里、错在哪里、超时在哪里。

    • 可以实时追踪多种基础中间件的用量及错误,诸如: MySQL、Mongose、Redis 等等。

  2. 让应用更易度量

    • 实现了软件行业上通用的 Metrics 系统。

    • 自带多种监控指标实现,从操作系统指标到 Node.js Runtime,从 HTTP QPS 到中间件用量。

    • 支持多种监控指标类型(Metrics 类型),您可以基于这些指标类型,轻松地建构您的业务监控指标。

  3. 让系统更加健壮

    • 故障演练扩展,可以模拟大部分基础中间件的不可以用状态。这是从淘宝多次大促中沉淀下来的断网演习工具。

    • 远程调试扩展,基于 Dashboard 的能力可以实时调试您的线上进程,线上业务问题不再抓瞎。

  4. 让应用更易管理

    • 进程管理管理能力,提供了基础的进程守护和 Cluster 能力。

    • 基础服务管理能力来满足中间件管理等场景,提供了依赖管理和标准的启停接口。

    • 提供了进程间通信的基础能力。

上面提到的全部能力和数据,全部通过 RESTFul 接口或文本日志透出,您可以轻松的将其集成进您的监控管理系统。

业务链路追踪 - Trace

链路追踪是第一个要介绍的重量级特性,可以追踪每个业务请求的全过程,在运行时直观的看出接口或页面慢在哪里、错在哪里、超时在哪里。

听上去很厉害的样子,但实际使用起来很简单。您只需要简单的使用 Pandora.js 来启动您的应用,然后打开 Pandora.js dashboard 就可以看到您的业务链路的全部细节:

轻松识别慢链路和错误链路

undefined

调用了,哪里耗时多,一目了然

undefined

应用度量

默认的应用度量 - Built-in Metrics

Pandora.js 为您默认提供了近百项开箱即用的默认监控指标,让您轻松的开始监控您的应用。

默认提供了,Node.js Runtime 指标,操作系统指标,HTTP Incoming 指标等等。

Node.js 指标,包含大量运行时指标

undefined

操作系统指标,包含 Load、CPU、内存、磁盘、网络、TCP 等各种指标

undefined

自定义的应用度量 - Custom Metrics

应用运行在生产环境,我们有太多想要知道和观察的数据了。以往我们都是写很多日志文件,查看分析十分麻烦。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 分组:

undefined

当然还有更多的 Metrics 类型可以实践,请具体参见文档

应用管理 - 兼容常用的启动模式

Pandora.js 提供了 fork 和 cluster 两种模式来启动应用,您只需要在初始化时简单选择:

$ pandora init app.js 
? Which type do you like to generate ? (Use arrow keys)
  fork 
❯ cluster
的码云指数为
超过 的项目
加载中

评论(13)

宫不上叔
宫不上叔
舞草比我司的好
notreami
notreami
搞得,我都想改行学nodejs去了。
张林
张林
不论做的好坏都花费了精力和时间。
张亦俊
张亦俊
哪个大神写个跟PM2的对比呢
php110
php110
我是直接来看评论的
sami
sami
pm2 玩家路过
壮士
壮士
看的不错嘛~
big_allen
big_allen 软件作者
真的要是为了 KPI 就不搞这个了...
Flylinran
Flylinran
请问你有什么好的推荐嘛
小99
小99
不要这么过激,年轻人

暂无资讯

暂无问答

AI考拉技术分享-Node基础架构专题(三)

前言 转眼新年过了,开始了搬砖的日子。在这里给大家拜个晚年,送上一些小知识,希望大家好搬砖! klg-tracer 链路追踪工具,base on pandora Installation npm install klg-tracer Node.js...

02/12 14:31
2
0
【书单】JS书单汇总:怀念2013

  从2011年11月到现在,大抵接近两年的时间。对JS的了解,不敢说有多深,不过大都得益于下列书籍。大部分看过,小部分只是翻翻。2014年打算把这些书挑一些出来回顾回顾,然后研究下新的东西...

2014/01/24 00:37
472
2
《深入理解JavaScript系列》

《深入理解JavaScript系列》系列技术文章整理收藏

2015/06/23 15:08
61
0
javascript学习资料分享

有志于web前端工作的话,javascript的知识是必不可少的。越学,我越觉得自己所欠缺的越多。路漫漫其修远兮,吾将上下而求索。下面将一些好的资料分享给大家。 JavaScript学习资料: (1)遇见...

2012/04/06 11:37
3.3K
7
解决一个html 或jsp 引入多个不同版本的jquery 解决方案

解决一个html 或jsp 引入多个不同版本的jquery 解决方案

2017/11/02 12:25
79
0
分享一些前端开发中最常用的JS代码片段

逛社区时看到的文章,我修改调整了内容,如果大家觉得也有帮助 可以收藏下~ HTML5 DOM 选择器 javascript 代码 JavaScript运行复制全屏 1 // querySelector() 返回匹配到的第一个元素 2 var ...

02/27 21:21
54
0
Impatient JavaScript 中文版校对活动期待大家的参与

贡献指南:https://github.com/apachecn/impatient-js-zh/blob/master/CONTRIBUTING.md 整体进度:https://github.com/apachecn/impatient-js-zh/issues/1 项目仓库:https://github.com/ap...

06/17 10:32
5
0
a标签中调用javascript方法的几种方法:

我们常用的在a标签中有点击事件: 1. a href="javascript:js_method();" 这是我们平台上常用的方法,但是这种方法在传递this等参数的时候很容易出问题,而且javascript:协议作为a的href属性的...

2013/12/01 00:20
67
0
asp.net中调用javascript自定义函数的方法(包括引入JavaScript文件)总结

通常javascript代码可以与HTML标签一起直接放在前端页面中,但如果JS代码多的话一方面不利于维护,另一方面也对搜索引擎不友好,因为页面因此而变得臃肿;所以一般有良好开发习惯的程序员都会...

2012/11/04 21:28
970
0

没有更多内容

加载失败,请刷新页面

返回顶部
顶部