前言

本期分享意在优化node服务的性能,侧重应用运行信息收集这一块,寻找适合dev们使用的APM。因此,我们对一些支持 Node.js 的 APM 软件做了一次调研。 在分别介绍每个软件之前,我们要先阐述使用这些软件的目的:它可以发现慢的 http 请求,并且可以查看当时的 Node 服务状态(包括内存 CPU 占用状态),database 状态(这里是 mongodb),帮助 dev 准确分析出请求处理缓慢的原因。

下文的体验报告将以此目标为标准进行评价。

软件列表

本次体验的 APM 软件有:

名称 介绍 开源/收费情况
atatus 支持多种语言,包括前端 不开源,收费
newrelic 支持多种语言,包括前端 开源,收费
keymetrics pm2, Node 应用管理器 开源,限额免费
Pandora.js 阿里出品,Node 应用管理器 开源,免费(自建服务)
alinode Node 底层的监控 开源,免费(阿里云上配置实例)
statsd + graphite + grafana 监控三件套,开发自由度高 开源,自建服务

一、atatus

atatus 提供了 npm 工具包 atatus-node 用于监控数据收集,具体配置见官方文档。

使用报告:不是 100 % 的采样率,没有收集到官网宣传的各种维度的信息,使用 Koa 框架,基本上只能看到总的 http response time。

二、newrelic

网址 newrelic.com/ ,和 atatus 基本相同,也提供 npm 工具包 newrelic。

三、keymetrics

偏向应用生命周期管理,可以看到 Node 服务的 cpu 内存等占用情况,有错误(crash)收集功能,国内访问很卡。

四、Pandora.js

Pandora.js 是一个 Node.js 应用监控管理器。它集成了多种类型的能力诸如:监控、链路追踪、调试、进程管理等等。

它是个很有趣的东西,总结来说是它很强大但是还不够成熟,包括 Pandora 自身和整个 Node 生态都不成熟。

(一)、应用管理

可以对标 PM2,不赘述。

(二)、应用度量

有操作系统指标,包含 Load、CPU、内存、磁盘、网络、TCP 等各种指标;
有 Node.js 指标(内存占用);
还可以自定义指标,类似 statsd 做的事情,但是后续的存储和展示嘛,非常简单,没有 statsd + graphite + grafana 好用。

(三)、链路追踪

这个是 Pandora 提供的比较“先进”的功能,链路追踪理论上可以分析出一个 http 哪里耗时多,例如一个 get 请求,做的事情有:查询 db、调用第三方服务等。链路追踪会记录每一个环节的耗时:

链路追踪的实现依赖了 Node 的一个实验性特性 async_hooks,因为是新特性,目前还有很多问题没有解决,例如 mongoose 和 superagent 两个工具包的 Promise 实现方式会导致 async_hooks,具体可以见我们在 Pandora 提的 issue ,也就是说,如果你刚好用了这两个框架,Pandora 链路追踪就失效了。

五、alinode

Node.js 性能平台 https://cn.aliyun.com/product/nodejs ,alinode 是在 node runtime 层面做的应用信息收集,而不是上述各个框架在应用层进行信息收集,所以 alinode 可以监控到进程数据,堆快照、堆时间线、CPU Profile、GC Trace 等非常底层的信息,如果你的应用性能瓶颈在 Node 服务本身,使用该工具会有很大的帮助,如果你的应用性能瓶颈在 DB,那应该是用 DB 监控工具。

六、statsd + graphite + grafana

这个三件套有意思的是,监控指标是开发自己定义的,考拉用这三件套监控请求处理时间,记录每个请求的处理时间。
这样在 grafana 上可以快速看出当前应用的请求量与趋势,已经快速分析哪些接口缓慢。

接口访问量的趋势变化:

处理最慢的接口:

这套工具的优势在于 grafana, 提供了非常直观的图表。
这套工具的搭建方法,我们后续再继续深入讨论。

总结

回到我们的目标“帮助 dev 准确分析出请求处理缓慢的原因”,理论上最贴合这个目标的是 Pandora.js ,但是我们还需要再等等,等它成熟。
最简单而强大的是 statsd + graphite + grafana 三件套,不用考虑 atatus newrelic 等。 如果你使用 Node 做高并发服务,alinode 将会很有用。


著作权归本文作者所有,未经授权,请勿转载,谢谢。

AI考拉技术分享会--Node.js APM 软件调研报告相关推荐

  1. AI考拉技术分享会—手把手教你入门UI 自动化测试 Appium

    2019独角兽企业重金招聘Python工程师标准>>> AI考拉日常技术分享会,前有众多前后端以及android大神分享,这次测试老司机Eric也放招,手把手带devs入门UI自动化 ...

  2. AI考拉技术分享--布隆过滤器实战

    2019独角兽企业重金招聘Python工程师标准>>> 前言 今天是中国传统佳节"猿宵节",是程序猿通宵赶代码的佳节. AI考拉的技术小伙伴志在打破传统,以&qu ...

  3. AI考拉技术分享会--IDE 常用功能 for Node.js

    前言 今天是属于大家的1024节,程序猿的日常工作离不开IDE的支持,在今天这个值得庆祝的日子,考拉的coders整理了工作中常用的IDE功能,大家节日快乐, 向程序猿致敬,向加班SAY NO! 一. ...

  4. 加入AI考拉大家庭,是一种怎样的体验?--来自考拉码农的心声

    hi,各位帅气又多金,外表冷酷实则内心热情的技术猿: 这是考拉拉第二次踏入这片专属程序猿的天地.为了让大家更加全面了解考拉拉背后的大家庭-AI考拉,我们随机采访了公司的程序猿萌,让他们简单描(tu)述 ...

  5. node.js 桌面软件框架 electron 开发流程

    ##node.js 桌面软件框架 electron 开发流程 ####步骤 1,安装electron npm --g electron 2,创建工程 //新建app文件夹 mkdir app //创建 ...

  6. node 升级_技术周刊( Node.js 12 性能大提升 2019-04-30)

    前端快爆 Node.js 12 发布,该版本带来了巨大的性能提升.V8 升级到 7.4 带来了诸多新特性,比如 Private Class Fields.Array#{flat,flatMap} 等: ...

  7. node html5,html5前端入门教程分享:Node.Js 框架

    项目前期准备: 以express 框架为例 npm i express-generator -g //全局安装express框架 express -e //生成express应用骨架 npm i // ...

  8. Node.js 2021年开发者报告解读

    大家好,我是若川.持续组织了5个月源码共读活动,感兴趣的可以点此加我微信 ruochuan12 参与,每周大家一起学习200行左右的源码,共同进步.同时极力推荐订阅我写的<学习源码整体架构系列& ...

  9. 磐创AI - 专注机器学习技术分享

    微信公众号推荐 磐创AI 编辑 安可 今天给大家推荐一个微信公众号「磐创AI」,是一个从三大深度学习框架Tensorflow.Keras与PyTorch的角度剖析AI行业最新动态,机器学习干货文章,深 ...

  10. 技术分享:用JS实现的3D海浪涌动特效

    分享一个基于ThreeJS的3D海浪涌动特效,效果如下: 常可用于页面背景,3D效果,视觉观感很好,海浪会随机涌动,科幻感.技术感强烈. 代码说明 代码会引用ThreeJS库,版本号为56.注:必须是 ...

最新文章

  1. Mac 安装多个版本jdk
  2. PHP 函数dirname()使用实例
  3. mysql 三层架构开发_从三层架构迈向领域驱动设计(转载)
  4. 在你的 Android App 里接入支付宝
  5. nll_loss 和 cross_entropy
  6. python编程从入门到实践之外星人入侵
  7. activiti报错ProcessEngines.getDefaultProcessEngine()为null
  8. HPU--1189 Ou à
  9. php能连接动易吗,动易CMS数据转成dedecms的php程序
  10. Parser-Free Virtual Try-on via Distilling Appearance Flows代码解析
  11. 阿里巴巴最新开源软件列表(建议收藏系列)
  12. css如何修改行内样式
  13. 第二章:WINDOWS的一些技巧
  14. 数字图像处理技术与人脸识别
  15. 汉庭加盟:连锁酒店影视房的市场分析
  16. Analyze静态分析所出现的问题总结
  17. 工程学导论-第四章-创造力
  18. 对于路由地址并未切换,但是地址栏发生地址发生变化原因
  19. 实时视频通信技术调研
  20. 手机淘宝构架演化实践

热门文章

  1. [Link-Cut-Tree][BZOJ2002]弹飞绵羊
  2. 在vuex的mutations中使用vue的小技巧
  3. 使用Struts2和jQuery EasyUI实现简单CRUD系统(五)——jsp,json,EasyUI的结合
  4. StringBuffer是字符串缓冲区
  5. 生活中的思维风暴——读《谁是谷歌想要的人才》精彩题目小记(二)
  6. opencv常用函数整理(二)
  7. fatal error C1010: 是否忘记了向源中添加“#include stdafx.h”?
  8. Wavesequencer Hyperion for Mac(数字模块化合成器)
  9. 珍惜吧,这届世界杯之后,怕是再也看不到他们了
  10. iOS底层探索之类的结构—cache分析(上)