Skip to content
Zhou Qi edited this page Apr 11, 2017 · 4 revisions

Scout 是一款基于 Node.js 和 MongoDB 的 URL 监控系统。根据管理员添加的监控条目,定时轮询 URL,自定义告警规则。

本系统不包含告警部分,告警消息通过 HTTP 发送出去,需要自定义告警接口。但是本系统会记录每次告警的状态(告警接口的返回主体等等),防止告警接口故障而无人发现。

告警接口

告警接口应当接收一个 json,拼装成你想要的格式,再通过短信平台、邮件服务、HTTP 等方式推送到接收人。

POST <你的接口>
Content-Type: application/json

{                             // 异常时
  "recipients": [],           // 字符串数组,表示接受人
  "name": "查询当前时间",      // 以下为监控条目信息,以及异常情况,字段名一目了然
  "URL": "https://your.server/your/api",
  "status": "Error",
  "statusCode": 200,
  "responseTime": 53,
  "now": 1484292986935,
  "errName": "AssertionError",
  "errMessage": "慢了123秒",
  "body": "{now:1484292863588}",
  "readType": "json",
  "testCase": "const d = Date.now() - body.now\nassert(d < 60000, `慢了${d/1000|0}秒`)"
}

若是从异常状态中恢复时,status 值为 "OK",并且无 errNameerrMessage 字段。

监控条目配置项

基本信息

  • 名称:名称。
  • 标签:(暂时仅)用于批量选择,请赋予有意义的词语。作用类似 HTML 的 class
  • URL: URL。
  • 方法:HTTP 请求方法。
  • 请求主体:HTTP 请求主体。
  • 告警接收人:可以是任意字符串组成的列表,当然你的告警接口要有对应的处理方式。

高级设置

  • 检测时间间隔:以分钟位单位,表示系统每隔多久检测一次。
  • 异常容忍次数:连续异常次数超过这个值,才发送告警。
  • Apdex 目标响应时间:Apdex target time
  • 请求头:HTTP 请求头。
  • 活跃时间段:以一周为周期,在此之外的时间不检测。

测试条件

一段 JS 代码。提供的全局变量有:

  • body:该次检测的返回主体。若期待类型设为 text,则为字符串类型;若设为 json,则为经过反序列化的值(通常是一个对象)。
  • statusCode:该次检测的 HTTP 状态码。
  • responseTime:该次检测的响应时间。

提供的全局方法:

  • assertAssert
  • console.loglog:定制的方法,用了你就知道效果了。

在后端,系统用 vm 模块创建一个沙盒,运行这段代码,若其中抛出错误,则判定为异常情况。建议使用 assert 函数。

Clone this wiki locally