监控数据

本节讲解监控数据相关API

上报监控数据

Nightingale的transfer和agent两个模块都提供了上报数据的接口:

  • 本地agent上报接口: POST http://${agent.addr}/v1/push
  • 中心transfer上报接口: POST http://${transfer.addr}/api/transfer/push

字段含义见数据规范。说明一下 extra 字段,用户可以在这个字段中添加额外的信息,比如traceId(千万不要把traceId作为tag上报,会把索引模块打爆的),当监控数据触发告警后,告警引擎会将 extra 的内容写到告警事件中,透传给告警历史页面,用户可以根据 extra 中的信息更快的定位问题。

数据上报给agent和transfer的区别是什么?

数据结构中有一个字段叫counterType,可以设置为:GAUGE COUNTER SUBTRACT,其中 COUNTER 和 SUBTRACT 这两种数据类型,只有agent才支持,原理是:agent在接收到数据之后,判断counterType,如果发现是 COUNTER 或者 SUBTRACT ,会自动进行计算,将结果作为GAUGE类型上报给transfer,transfer只支持GAUGE类型。如果counterType这个字段为空,会被当成GAUGE类型。

COUNTER详解

COUNTER通常用于采集一直递增的值,比如网卡的丢包量,从操作系统的计数器获取的数据来看,是一直递增的,即操作系统启动以来总的丢包量,显然,我们对这个值当前是多少并不关注,我们更关注的是过去一段时间,每秒丢包量是多少。于是COUNTER类型应运而生,假设采集频率是10秒,10秒之前采集到的值是v1,当时的时间戳是t1,现在采集到的最新值v2,现在的时间戳是t2,agent就会自动计算:(v2-v1)/(t2-t1),得到的结果作为GAUGE上报。

SUBTRACT详解

SUBTRACT和COUNTER非常类似,就是在计算的时候,不除以时间差,只是计算:v2-v1,即最近一次统计周期内的增量是多少。

上报监控数据时采用POST方法,将监控数据组装为一个json array放到request body中,请求body样例:

[
    {
        "metric":"cpu.util",
        "endpoint":"192.168.1.2",
        "timestamp":1559733442,
        "step":10,
        "value":1,
        "tags":"",
        "extra":""
    }
]

查询监控数据

POST /api/transfer/data

counters字段比较重要,额外讲解一下。counters是个数组,每一个元素是metric+tags的一个组合,格式是:$metric/$tagkey1=$tagval1,$tagkey2=tagval2,metric+tags唯一标识了一个series,即监控图上的一条线。

请求body样例:

[
    {
        "start": 1598338900,
        "end": 1598338940,
        "endpoints": ["10.254.226.221"],
        "counters": ["cpu.idle"],
        "step": 20,
        "dstype": "GAUGE"
    },
    {
        "start": 1598338900,
        "end": 1598338940,
        "endpoints": ["10.254.88.96"],
        "counters": ["disk.bytes.used.percent/mount=/"],
        "step": 20,
        "dstype": "GAUGE"
    }
]

返回样例:

{
  "dat": [
    {
      "start": 1598338900,
      "end": 1598338940,
      "endpoint": "10.254.226.221",
      "counter": "cpu.idle",
      "dstype": "GAUGE",
      "step": 20,
      "values": [
        {
          "timestamp": 1598338900,
          "value": 98.648649
        },
        {
          "timestamp": 1598338920,
          "value": 98.316498
        },
        {
          "timestamp": 1598338940,
          "value": 98.307953
        }
      ]
    },
    {
      "start": 1598338900,
      "end": 1598338940,
      "endpoint": "10.254.88.96",
      "counter": "disk.bytes.used.percent/mount=/",
      "dstype": "GAUGE",
      "step": 20,
      "values": [
        {
          "timestamp": 1598338900,
          "value": 14.636725
        },
        {
          "timestamp": 1598338920,
          "value": 14.636725
        },
        {
          "timestamp": 1598338940,
          "value": 14.63682
        }
      ]
    }
  ],
  "err": ""
}
诚邀各位小伙伴:

一起参与夜莺社区建设,多写一些夜莺的文章,咱们一起把夜莺做成最好用的国产智能监控。各位甲方上帝们,也可联系我们(18612185520,微信同号)寻求技术支持护航服务,贵司业务发展这么快,我们帮你做好监控!