用于监控路由和云储存调用情况的 LeanEngine Node.js 中间件
JavaScript HTML
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
public
test
.gitignore
.jshintrc
README.md
collector.js
index.js
package.json
server.js

README.md

LeanEngine Sniper

这个中间件会记录 express 程序被访问的路由、StatusCode、响应时间,以及程序所调用的 LeanCloud API 的类别和响应时间;Sniper 提供了一个 Web UI 来来展示这些统计数据,支持以路由、实例、StatusCode 三个维度来进行分组展现,还支持以五秒的精度来查看实时数据,帮助你监控和诊断 LeanEngine 应用遇到的性能问题。

添加依赖

npm install --save leanengine-sniper

在你的 express 程序中添加中间件

var sniper = require('leanengine-sniper');
var AV = require('leanengine');
var app = express();
app.use(sniper({AV: AV}));

等它收集一段时间数据,就可以打开你的站点下的 /__lcSniper 查看统计图表了,basicAuth 的账号是 appId,密码是 masterKey.

数据会储存在你的应用云储存中的 LeanEngineSniper 这个 Class 中(如果你在设置中禁用了「客户端创建 Class」,则需要你手动创建),默认会每五分钟创建一条记录,因此你的应用每个月会因上传统计数据而消耗 9k 次云存储 API 调用。

配置 Redis

Redis 是可选功能,配置 Redis 后,Sniper 可以提供过去十分钟以 5 秒钟为精度的实时视图;此外如果你的应用运行着多个实例,借助 Redis 可以通过合并多个实例的数据减少调用云存储的次数:

app.use(sniper({AV: AV, redis: process.env['REDIS_URL_cache1']}));

定义自己的 URL 分组或忽略规则

你可以给 sniper 传一个 rules 参数,定义一些处理 URL 的规则:

app.use(sniper({
  AV: AV,
  rules: [
    {match: /^GET \/(pdf|docx?).+/, rewrite: 'GET /$1'}, // 将例如 /pdf/overview.pdf 的 URL 重写为 /pdf
    {match: /^GET \/public/, ignore: true}            // 忽略 GET /public 开头的 URL
  ]
}));

sniper 的更多选项

  • specialStatusCodes, 数字数组,为了记录合适大小的数据,默认只会单独记录几个常见的 statusCode, 你可以覆盖默认的值。
  • ignoreStatics, 布尔值,默认启用,会将常见的静态文件 URL 重写为类似 GET *.js 的 URL.
  • commitCycle, 毫秒数,默认五分钟,上传统计数据的间隔,建议设置在 1 分钟到 20 分钟内。
  • realtimeCycle, 毫秒数,默认五秒钟,实时统计数据的刷新间隔。
  • className, 字符串,默认 LeanEngineSniper, 用于存储统计数据的 Class.

Web UI 使用说明

筛选

目前 Sniper 提供了几个维度的筛选功能:路由筛选、实例筛选、StatusCode 筛选、时间段筛选。

默认选项为空,代表不筛选;选项后面的数字代表这一个选项代表的总请求量(不受筛选条件影响);

星号选项则代表在这个维度上对数据进行分组展示,一次只能按照一个维度来分组,分组可以和筛选组合使用;取决于图表类型,只会显示请求量靠前的几个分组,以避免在图表上有太多的线。

路由筛选、StatusCode 筛选仅对和路由有关的图表有效;实例筛选对所有图表都有效。

在两个输入框(分别是开始时间和结束时间)填入类似 -1d, -2h30m, 2015-11-11T06:06:44.857Z 这类时间,点击「时间段筛选」,即可按照时间端筛选所有数据;你还可以点击「路由请求量」或「路由响应时间」图表上的点来自动填写时间。

实时数据

勾选右上角的「追踪实时信息」后,所有图表都会变成以五秒钟为精度的实时信息,Sniper 会从启动实时追踪后开始积累数据(所以一开始是空的),最多保存十分钟的数据。

图表

  • 路由请求量

    默认根据 StatusCode 分为 success, clientError, serverError 三组。

  • 路由响应时间

    因为没有源数据,StatusCode 的筛选和分组不会对该图表生效。

  • 实例请求量

    默认分为 success, clientError, serverError 三组,可以选择按照 StatusCode 分组;只会显示请求量最大的 10 实例。

  • 实例平均响应时间

    只会显示请求量最大的 10 实例。

  • 路由 StatusCode 分布

  • 路由分布

    只会显示请求量最大的 15 个路由。

  • 云调用分布

    只会显示请求量最大的 15 类请求。

  • 云调用次数

  • 云调用平均响应时间

截图

Web UI