监控指标: 数值类型的监控数据
指标标识 | 优点 | 缺点 |
---|---|---|
全局唯一字符串 | 简单 | 缺少维度,不利于聚合计算,灵活筛选 |
标签集组合 | 灵活 | 较重复 |
Influx 指标格式 | 灵活,精巧,语义丰富 | 理解成本较高 |
监控指标:一般是全局唯一的字符串
host.10.2.3.4.mem_used_percent
, 包含: 机器的信息,指标名设监控数据采集的频率: 30 秒
指标内容:
{
"name": "host.10.2.3.4.mem_used_percent",
"points": [
{
"clock": 1662449136,
"value": 45.4
},
{
"clock": 1662449166,
"value": 43.2
},
{
"clock": 1662449196,
"value": 44.9
},
{
"clock": 1662449226,
"value": 44.8
}
]
}
HTTP 请求状态码的指标 :
分类维度都要拼到指标标识中。处理弊端:较混乱,不方便聚合统计
myhost.service1.http_request.200.get
myhost.service1.http_request.200.post
myhost.service1.http_request.500.get
myhost.service1.http_request.500.post
myhost.service2.http_request.200.get
myhost.service2.http_request.500.post
OpenTSDB 描述指标的方式
指标通过空格分开
mysql.bytes_received 1287333217 327810227706 schema=foo host=db1
mysql.bytes_sent 1287333217 6604859181710 schema=foo host=db1
mysql.bytes_received 1287333232 327812421706 schema=foo host=db1
mysql.bytes_sent 1287333232 6604901075387 schema=foo host=db1
mysql.bytes_received 1287333321 340899533915 schema=foo host=db2
mysql.bytes_sent 1287333321 5506469130707 schema=foo host=db2
Influx 指标格式分 4 个部分: measurement,tag_set field_set timestamp
mesurement,labelkey1=labelval1,labelkey2=labelval2 field1=1.2,field2=2.3 timestamp
例子:
weather,location=us-midwest temperature=82 1465839830100400200
| -------------------- -------------- |
| | | |
| | | |
+-----------+--------+-+---------+-+---------+
|measurement|,tag_set| |field_set| |timestamp|
+-----------+--------+-+---------+-+---------+
将 OpenTSDB 的指标数据改成 Influx 格式
mysql,schema=foo,host=db1 bytes_received=327810227706,bytes_sent=6604859181710 1287333217000000000
mysql,schema=foo,host=db1 bytes_received=327812421706,bytes_sent=6604901075387 1287333232000000000
mysql,schema=foo,host=db2 bytes_received=340899533915,bytes_sent=5506469130707 1287333321000000000
Prometheus 生态支持的 4 种数据类型 : Gauge、Counter、Histogram、Summary
测量值类型: 可大可小,可正可负,一般是当前值
单调递增的值
直方图类型 (Histogram):用于描述数据分布
典型场景: 监控延迟数据,计算 90 分位、99 分位的值
例子:服务 service1,它的接口延迟最小在一两百毫秒,最大在 1 秒,当超过 3 秒,就认为该系统不正常
当90 分位值 (第 900 个请求)落在第 3 个桶 (延迟小于 3 秒)
histogram_quantile 计算逻辑:
最终 90 分位的延迟数据计算方法:
(3−1)×(50÷150) + 1 = 1.67秒
Summary 解决痛点:Histogram 计算成千上万个接口的分位值延迟数据,还是很耗资源
Summary: 在客户端计算分位值,再把计算结果推给服务端存储,展示时,直接查询,不用再计算,性能大幅提升
告警收敛 : 当出现故障,可能会瞬间产生很多告警事件 (告警风暴),就要想办法让告警事件变少
告警闭环 : 告警要认领,期间可能会升级通知