监控数据
本节讲解监控数据相关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": ""
}
最后修改 2021-02-06: v2 (bb04a83)