tarsdocs
  • Readme.md
  • CLA
  • LICENSE
  • 基础介绍
    • 简介
    • 基础概念
    • 基础通信协议 Tars
    • 统一通信协议 Tup
    • 开发模式介绍
    • 模板配置
    • 服务市场
    • 服务扩展
    • 框架版本说明
  • 开源版框架介绍
    • 开源版本部署
      • 部署总体介绍
      • Docker环境安装
      • Mysql安装
      • 框架源码部署(Linux/Mac)
      • 框架源码部署(Windows)
      • 框架Docker部署
      • 框架节点部署
      • 业务服务容器化
      • 框架K8SDocker 部署
      • 框架K8STARS 部署
      • 框架K8SFramework 部署(强烈推荐)
      • 框架更新及扩容
      • 调用链升级注意事项
      • TarsWeb-v3.0.3升级说明
    • 开源版管理平台
      • TarsWeb说明
      • web用户体系
      • web管理平台 API
  • 企业版本介绍
    • 企业版说明
    • 框架集群化机制
    • 框架单节点机制
    • 使用二进制包部署
    • 使用容器部署
    • 业务服务一主多备机制
    • 命令行控制终端
    • IP-LIST级联缓存机制
    • 多数据中心管理
    • 多网络支持
    • 第三方服务管理
    • 数据产生和管理机制
    • 密码重置
    • TarsPython介绍
  • 框架关键特性
    • 业务配置
    • 服务监控
    • 无损发布/重启
    • 调用链
    • IDC分组
    • 鉴权功能
  • TarsCPP
    • 编译
    • 快速开发入门
    • 使用指南
    • 开发规范
    • 服务线程说明文档
    • protobuf 协议支持文档
    • 第三方协议支持
    • HTTP1 支持
    • HTTP2 支持
    • TLS 通信支持
    • Push 功能说明
    • PushCallback 功能说明
    • Cookie 支持
    • 队列模式
    • 手动绑定
    • 性能数据
    • 2.x 版本变化
    • 3.x 版本变化
    • 协程版本说明
    • 基础类库说明
    • [案例]
      • 框架快速入门
      • Http 服务示例
  • TarsJava
    • 快速开始
    • 快速开发入门
    • [使用指南]
      • Tars 服务开发与上线
      • HTTP 服务开发与上线
      • 生成接口调用文件
    • [性能测试]
      • tars java 压测代码
  • TarsGo
    • 基本介绍
    • 快速开始
    • 使用指南
    • cmake 管理代码
    • pb2tarsgo
    • 性能数据
    • 使用示例
  • TarsPHP
    • 搭建 php 环境
    • 快速开发入门
    • [快速起步]
      • 搭建 HttpServer
      • 搭建 TimerServer
      • 搭建 TcpServer
      • 搭建 WebSocketServer
      • 弹幕活动实战
    • [框架简介]
      • 简介
      • tars-server
      • tars-client
      • tars-config
      • tars-deploy
      • tars-extension
      • tars-log
      • tars-monitor
      • tars-registry
      • tars-report
      • tars-utils
      • tars2php
    • [高阶应用]
      • PHP 的 Swoole 框架如何接入 Tars
      • 与 thinkphp 结合使用
      • 与 Swoft 结合使用
      • 与 Laravel 结合使用
      • 与 Yii2 结合使用
      • 持续集成方案
    • [其他]
      • 常见问题
      • 如何 Debug
      • changelog
      • 其他外部文档
  • Tars.js
    • 基本介绍
    • 脚手架
    • 快速开发入门
    • @tars/stream
    • @tars/rpc
    • @tars/logs
    • @tars/config
    • @tars/monitor
    • @tars/notify
    • @tars/utils
    • @tars/dyeing
    • @tars/node-agent
    • @tars/winston-tars
    • tars2node
  • K8SFramework
    • [安装和使用说明]
      • 介绍
      • 特性
      • 安装
      • 升级
      • 云原生运维
      • 管理平台
      • 证书
    • [开发环境构建]
      • Dockerfile 说明
      • 服务发布流程说明
      • 制作基础编译镜像
      • 制作业务服务镜像
      • 制作 Helm 包
      • 发布业务镜像到 K8S 集群
      • 服务发布示例
      • 如何调试业务服务
  • 服务扩展
    • 云告警
    • 接口及压测工具
    • 网关服务
    • dcache缓存服务
    • 发送邮件服务
    • 一致性存储服务
    • 一致性存储web管理平台
    • 唯一计数服务
  • 常见问题
    • 安装常见问题
    • Issues
    • Issues-tarscpp
    • Issues-tarsjava
    • Issues-tarsgo
    • Issues-tarsphp
  • 开源合作
    • TarsFramework 项目 Git 合作规范
  • 直播视频
    • B 站 TARS 培训系列课程
  • 相关文章
    • TARS 技术文章
  • 其它资源分享
    • 下载
    • Tars 介绍.pptx
    • TarsPHP 解密.pdf
    • TarsJava 本地调试.pdf
    • 微服务在腾讯的业务实践.pptx
Powered by GitBook
On this page
  • Monitor
  • 安装
  • 初始化
  • 服务监控(stat)
  • 特性监控(property)
  • PP 监控(propertyplus)
  • 统计方法
  • 上报间隔

Was this helpful?

  1. Tars.js

@tars/monitor

Previous@tars/configNext@tars/notify

Last updated 3 years ago

Was this helpful?

Monitor

Monitor 是 TARS(TUP) 服务与特性监控上报模块。

它由 3 个子模块构成:

  • 服务监控(stat)

  • 特性监控(property)

  • PP 监控(propertyplus)

安装

npm install @tars/monitor

初始化

如果服务通过 (或在 TARS 平台)运行,则无需执行该方法。

初始化是通过调用特定模块的 init(data) 方法实现。

data: 可以为 tars 配置文件路径 或 已配置的 (@tars/utils).Config 实例。

服务监控(stat)

var stat = require("@tars/monitor").stat;

服务监控主要统计(上报)每个请求的 成功、失败、超时的调用量,并当调用成功时额外搜集 调用耗时。

因为其他模块已经集成了本模块, 所以一般情况下,服务脚本无需显式使用此模块。

已集成的模块如下:

    • 不统计超时的调用量,所有请求的超时上报为 0。

如您确定要手动进行上报,可通过如下代码进行:

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 组名

如果主调为 set 则 headers 还需包含如下信息:

  • masterSetInfo: 主调 set 信息(由 setName.setArea.setID 构成)

参数 type 的取值为 stat.TYPE 中的一种,如下所示:

stat.TYPE:

  • SUCCESS: 成功

  • ERROR: 失败

  • TIMEOUT: 超时

如果 type === stat.TYPE.SUCCESS 必须上报响应耗时 timeout (整型)

数据上报后,用户可在服务监控选项卡中查看上报的数据。

特性监控(property)

var property = require("@tars/monitor").property;

特性监控上报的是服务脚本的 自定义特性, 它由特性名、特性值、以及统计方法构成 (key/value pairs)。

property.create(name, policies)

调用 create 方法,会返回(或创建)一个上报对象,可通过调用返回对象的 report(value) 方法进行上报。

其中 name 为上报的特性值名,而 policies 是统计方法类的实例数组(指定了数据的统计方法)。

property.create("name", [
  new property.POLICY.Count(),
  new property.POLICY.Max(),
]);

policies 数组中的实例对象不能有重复的统计方法。

请注意:不要每次上报都调用 create 方法获取上报对象,这样会造成性能损耗。

obj.report(value)

property.create 会返回一个上报对象,可通过调用对象的 report 的方法进行上报。

每次调用 report 只能上报一次的数据,并且 value 在一般情况下必须为数值。

数据上报后,用户可在特性监控中查看上报的数据。

PP 监控(propertyplus)

var pp = require("@tars/monitor").propertyplus;

PP 监控允许用户通过 自定义维度 与 自定义指标 上报特性, 它由维度名、指标值、以及对应的指标统计方法构成。

PP 监控相比 特性监控 维度更多,可自定义的范围更大。可输出类似 服务监控 那样多维度的服务监控。

pp.create(name[, policies, options])

调用 create 方法,会返回(或创建)一个上报对象,可通过调用返回对象的 report(keys, values) 方法进行上报。

  • name: 上报的日志名

  • policies: 统计方法类的数组(按顺序指定指标值的统计方法), 默认为每个指标均采用 POLICY.Sum 进行统计

  • options:

    • notTarsLog: 是否非 TARS 服务上报(日志名拼装方式不同,没有默认维度值), 默认值为: false

    • cacheKeyPolicy: 是否开启本地缓存以提高性能, 默认值为: false

pp.create("name", [property.POLICY.Count, property.POLICY.Max]);

policies 数组中对应位置的统计方法指定了上报时指标值数组对应位置的统计策略。 所以统计方法数应与每次上报的指标数相同,也就是 policies.length === values.length

统计方法中除了 POLICY.Distr 其它均可用于此监控。

如服务脚本所需上报的维度数(维度值的基数)非常大,建议开启 cacheKeyPolicy 以提高性能、避免内存溢出。

不要每次上报都调用 create 方法获取上报对象,这样会造成性能损耗。

obj.report(keys, values)

pp.create 会返回一个上报对象,可通过调用对象的 report 的方法进行上报。

keys 数组中的每一项必须为 字符,代表 维度名。

values 数组中的每一项必须为 数值,代表 指标值。

同一上报对象的维度数与指标数每次调用均要一致(顺序也相同),且指标值的顺序还需要与 policies 统计方法的顺序一致。

例子

服务里面调用 DB,需要对 DB 调用做监控,其中:

  • 维度:DB 名与对应的 IP

  • 指标:调用次数与平均耗时

var obj = pp.create("db_status", [pp.POLICY.Sum, pp.POLICY.Avg]);

调用 DB:abc@192.168.1.1,耗时 12.2ms:

obj.report(["abc", "192.168.1.1"], [1, 12.2]);

调用 DB:test@127.0.0.1,耗时 25.6ms:

obj.report(["test", "127.0.0.1"], [1, 25.6]);

统计方法

特性监控 所上报的数据(也就是在调用 create 时)需要指定一种或者几种统计方法,以便统计在一段时间内的值,这些方法都在 POLICY 中定义,它们分别是:

  • POLICY.Max:统计最大值

  • POLICY.Min:统计最小值

  • POLICY.Count:统计一共有多少个数据

  • POLICY.Sum:将所有数据进行相加

  • POLICY.Avg:计算数据的平均值

  • 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

每个区间都包含右侧不包含左侧(除了第一个区间)

上报间隔

在监控上报中,并非每次调用 report 方法均会上报数据,模块会搜集一定时间内提交的数据,并进行整合统计后一次性上报(单向调用)。

模块会自动读取 TARS 配置文件中 tars.application.client.report-interval 配置节(单位为 ms)用以配置上报间隔。

请注意:配置的上报间隔不可低于 10s,亦不可高于 TARS主控刷新时间(也就是 tars.application.client.refresh-endpoint-interval 配置节)。

为了防止循环调用,上报模块本身的调用情况由被调方上报(也就是单向调用的上报逻辑)。

TUP Client & Server 由 进行上报。

HTTP(S) Server 由 进行上报 ,但由于 HTTP(S) 协议的特性所以:

为失败调用,否则为成功调用。

node-agent
@tars/rpc
node-agent
response.statusCode >= 400