第二节 深入Prometheus设计-指标定义与分类(PromQL)
1.指标
- 每种监控系统都有自己的指标定义和规范
- 指标的数据格式将直接影响对数据的采集和存储
- 定义指标时需要充分考虑通用性和扩展性
1.1 指标定义
<metric name>{<label name>=<label value>, ...},
1.1.1指标名称(metric name)
- 用于说明指标的含义
- 指标名称必须有字母、数字、下划线或者冒号组成
- 符合正则表达式
[a-zA-Z:][a-zA-Z0-9:]
- 冒号不能用于
exporter
1.1.2 标签(label)
- 体现指标的维度特性,用于过滤和聚合
- 通过标签名和标签值组成,键值对形式形成多种维度
1.1.3 举例
指标1 http_request_total{status="200",method="POST"}
指标2 {__name__ = "http_request_total",status="200",method="POST"}
- 以上两个指标是一样,下划线开头的标签是系统内部使用的
- 指标名称:
http_request_total
代表HTTP
请求的总数 - 标签1:
status
值200
, 代表状态码为200
- 标签2:
method
值POST
,代表请求类型为POST
2 指标分类
Prometheus
指标分为Counter
、Gauge
、Histogram
、Summary
。
2.1 Counter 计数器
- 计数器类型,只增不减
- 适用于机器启动时间、HTTP访问量
- 具有很好的不相关性,不会因为机器重启而置
0
- 通常会结合
rate()
方法获取该指标在某个时间段的变化率
2.2 Gauge
- 仪表盘,表征指标的实时变化情况。
- 可增可减,
CPU
和内存使用量。 - 大部分监控数据类型都是
Gauge
类型的
2.3 Summary
- 高级指标,用于凸显数据的分布情况
- 某个时间段内请求的响应时间
- 可以与
Histogram
相互转化 - 采样点分位图统计,用于得到数据的分布情况
- 无需消耗服务端资源
- 与
histogram
相比消耗系统资源更多 - 计算的指标不能再获取平均数等其他指标
- 一般只适用于独立的监控指标,如垃圾回收时间等
2.4 Histogram
- 反映了某个区间内的样本个数,通过
{le="上边界"}
指定这个范围内的样本数。
2.5 数据样本
Prometheus
采集的数据样本都是以时间序列保存的,每个样本都由三个部分组成
- 指标
- 样本值: 64位浮点数和时间戳的组合代表这个时间点采集到的数据。
- 时间戳