@lml_taf/taf-monitor
v0.4.6
Published
`TAF-Monitor` 是 `TAF(WUP)` 服务与特性监控上报模块。
Downloads
7
Readme
TAF-Monitor
TAF-Monitor
是 TAF(WUP)
服务与特性监控上报模块。
它由 3 个子模块构成:
- 服务监控(stat)
- 特性监控(property)
- 工具(finder)
安装
npm --registry http://npm.oa.com install "taf-monitor"
初始化
如果服务通过 node-agent (或在TAF平台)运行,则无需执行该方法。
初始化是通过调用特定模块的 init(data)
方法实现。
data: 可以为 taf配置文件路径 或 已配置的 taf-config-parser
实例。
服务监控(stat)
var stat = require('taf-monitor').stat
服务监控主要统计(上报)每个请求的 成功、失败、超时的调用量
,并当调用成功时额外搜集 调用耗时
。
因为其他模块已经集成了本模块, 所以一般情况下,服务脚本无需显式使用此模块。
已集成的模块如下:
- WUP Client & Server 由 taf-rpc 进行上报。
- HTTP(S) Server 由 node-agent 进行上报 ,但由于
HTTP(S)
协议的特性所以:- 不统计超时的调用量,所有请求的超时上报为 0。
- response.statusCode >= 400 为失败调用,否则为成功调用。
如您确定要手动进行上报,可通过如下代码进行:
stat.report(headers, type[, timeout]);
headers:
- masterName: 主调模块名
- slaveName: 被调模块名
- interfaceName: 被调模块接口名
- masterIp: 主调IP
- slaveIp: 被调IP
- slavePort: 被调端口
- bFromClient: 客户端上报为
true
,服务端上报为false
- returnValue: 返回值, 默认值为 0
如果被调为 set
则 headers
还需包含如下信息:
- slaveSetName: 被调
set
名 - slaveSetArea: 被调
set
地区名 - slaveSetID: 被调
set
组名
参数 type
的取值为 stat.TYPE
中的一种,如下所示:
stat.TYPE:
- SUCCESS: 成功
- ERROR: 失败
- TIMEOUT: 超时
如果 type === stat.TYPE.SUCCESS
必须上报响应耗时 timeout
(整型)
数据上报后,用户可在 TAF管理平台 -> 服务监控 选项卡中查看上报的数据。
特性监控(property)
var property = require('taf-monitor').property
特性监控上报的是服务脚本的 自定义特性
, 它由特性名、特性值、以及统计方法构成 (key/value pairs)。
property.create(name, policy)
调用 create
方法,会返回(或创建)一个上报对象,可通过调用返回对象的 report(value)
方法进行上报。
其中 name
为上报的特性值名,而 policy
是 property.POLICY
中的类的实例的数组(指定了数据的统计方法)。
property.create('name', [new property.POLICY.Count(), new property.POLICY.Max()]);
policy
数组中的实例对象不能有重复的统计方法。
请注意:不要每次上报都调用 create
方法获取上报对象,这样会造成性能损耗。
property.POLICY(统计方法)
特性监控所上报的数据(也就是在调用 property.create
时)需要指定一种或者几种统计方法,以便统计在一段时间内的值,这些方法都在 property.POLICY
中定义,它们分别是:
- property.POLICY.Max:统计最大值
- property.POLICY.Min:统计最小值
- property.POLICY.Count:统计一共有多少个数据
- property.POLICY.Sum:将所有数据进行相加
- property.POLICY.Avg:计算数据的平均值
- property.POLICY.Distr:分区间统计
除了 property.POLICY.Distr
:其它均不需要传递构造参数
property.POLICY.Distr(ranges)
Distr
为分区间统计,事先划分区间,在上报时会自动统计落入这个区间的 value
数量。
同时,在进行数据展示时,分区间统计展示成为 饼图类型。
其中,参数 ranges
为数组,其中的每一项为一个数值(Int),并以从小到大的顺序排列。
例如:
var monitor = property.create('name', [new property.POLICY.Distr([0, 10, 100, 1000])]);
monitor.report(2);
monitor.repott(20);
monitor.report(200);
上面的例子统计的统计结果为:
[0 - 10] = 1
(10 - 100] = 1
(100 - 1000] = 1
每个区间都包含右侧不包含左侧(除了第一个区间)
obj.report(value)
property.create
会返回一个上报对象,可通过调用对象的 report
的方法进行上报。
每次调用 report
只能上报一次的数据,并且 value
在一般情况下必须为数值。
数据上报后,用户可在 TAF管理平台 -> 特性监控 选项卡中查看上报的数据。
上报间隔
在服务监控与特性监控中,并非每次调用 report
方法均会上报数据,模块会搜集一定时间内提交的数据,并进行整合统计后一次性上报(单向调用)。
模块会自动读取TAF配置文件中 taf.application.client.report-interval
配置节(单位为 ms)用以配置上报间隔。
请注意:配置的上报间隔不可低于 10s,亦不可高于 TAF主控刷新时间
(也就是 taf.application.client.refresh-endpoint-interval
配置节)。
为了防止循环调用,上报模块本身的调用情况由被调方上报(也就是单向调用的上报逻辑)。
工具(finder)
var finder = require('taf-monitor').finder
finder
可以高性能的通过 ip:port
查询到对应的 servant
中的模块名(moduleName)与接口名(interfaceName)。
finder.find(ip, port);
方法的返回的对象为:
{
ip : 查询的IP,
port : 查询的端口,
moduleName : 模块名,
interfaceName : 接口名
}
例如:
服务的
servant
配置为:MTT.DemoServer.HttpObj@tcp -h 127.0.0.1 -t 60000 -p 80
通过调用:
var obj = finder.find('127.0.0.1', 80);
获取返回值:
obj.moduleName // MTT.DemoServer
obj.interfaceName // HttpObj