1. Metric介绍
指标监控是不同的,因为它不假设情况可以用固定状态来解释。相反,它将您带入您的系统并提供数十个指标,然后您可以分析和理解这些指标
metrics是一种对采样数据的总称(metrics并不代表某一种具体的数据格式是一种对于度量计算单位的抽象)
每个metrics数据都包含几个部分:指标名称
、标签
和采样数据
指标名称
用于描述收集指标的性质,其名称应该具有语义化,可以较直观的表示一个度量的指标。名称格式可包括ASCII字符、数字、下划线和冒号
node_cpu_seconds_total
node_network_receive_bytes_total
node_cpu_seconds_total
node_network_receive_bytes_total
标签
时间序列标签为key/value格式,它们给Prometheus数据模型提供了维度,通过标签可以区分不同的实例
node_network_receive_bytes_total{device="eth0"} #表示eth0网卡的数据
node_network_receive_bytes_total{device="eth0"} #表示eth0网卡的数据
通过标签Prometheus可以在不同维度上对一个或一组数据进行查询处理。标签名称由 ASCII 字符,数字,以及下划线组成, 其中
__
开头属于 Prometheus 保留,标签的值可以是任何 Unicode 字符,支持中文。标签可来自被监控的资源,也可由Prometheus通过relabel在抓取期间
和之后
添加。
采样数据
按照某个时序以时间维度采集的数据,其值包含:
一个float64值
一个毫秒级的unix时间戳
除了实际采样数据/读数
(reading)之外,每个指标都有一个HELP
和一个TYPE
部分。在TYPE
中,您可以看到度量的类型)
1.1 Metric包含哪些
Name ,Timestamp ,Labels ,Value ,Type
Prometheus的时间序列统一使用以下格式来表示
<metric name>{<label name>=<label value>, ...}
<metric name>{<label name>=<label value>, ...}
1.Labels
标签用于将元数据添加到量度。这可以用来进行区分,例如,通过添加状态代码、URI 处理程序、函数名称......
2.Type
Counter类型
counter类型的指标与计数器一样,会按照某个趋势一直变化(一般是增加),我们往往用它记录服务请求总量、错误总数等
如下图展示就是一个counter类型的metrics数据采集,采集的是Prometheus的接口访问量,可看到数值一直在向上增加
基于counter类型的数据,我们可以清楚某些事件发生的次数,由于数据是以时序的方式进行存储,我们也可以轻松了解该事件产生的速率变化。
例如,通过rate()函数,获取api请求量每分钟的增长率:rate(apiserver_request_total[1m])
Gauge类型
与Counter不同,Gauge类型的指标用于展示瞬时的值,与时间没有关系,可增可减。该类型值可用来记录CPU使用率、内存使用率等参数,用来反映目标在某个时间点的状态。
Gauge指标简单且易于理解,对于该类型的指标,我们可以直观的查看目标在当前的状态。
node_memory_MemFree_bytes
node_memory_MemFree_bytes
Histogram类型
尽管能够通过 gauge 监控可增可减的值,并可以在查询时求出其一段时间内的平均值,但是对于一些典型的场景是请求时延、响应数据量大小等,平均值可能并不能很好地反映问题(此类场景,对于开发者更关注的或许是 P90/P95/P99 等)。Histogram 可以解决这个问题,它并不是记录一个值的变化情况,而是将被观测到的值划分进某一个区间中,称为桶(Bucket)。
Histogram 会在一段时间范围内对数据进行采样(通常是请求持续时间或响应大小等),并将其计入可配置的存储桶(Bucket)中。可以观察到指标在各个不同的区间范围的分布情况,可以观察到请求耗时在各个桶的分布
Histogram可用于请求耗时、响应时间等数据的统计,例如,指标prometheus_http_request_duration_seconds_bucket
即为Histogram类型。
# 样例计算1:
sum(rate(http_request_duration_seconds_bucket{le="0.3"}[5m])) by (job)
/
sum(rate(http_request_duration_seconds_count[5m])) by (job)
# 样例计算2:
histogram_quantile(0.95, sum(rate(http_request_duration_seconds_bucket[5m])) by (le))
# 样本数据
# HELP prometheus_http_request_duration_seconds Histogram of latencies for HTTP requests.
# TYPE prometheus_http_request_duration_seconds histogram
prometheus_http_request_duration_seconds_bucket{handler="/",le="0.1"} 1
prometheus_http_request_duration_seconds_bucket{handler="/",le="0.2"} 1
prometheus_http_request_duration_seconds_bucket{handler="/",le="0.4"} 1
prometheus_http_request_duration_seconds_bucket{handler="/",le="1"} 1
prometheus_http_request_duration_seconds_bucket{handler="/",le="3"} 1
prometheus_http_request_duration_seconds_bucket{handler="/",le="8"} 1
# 样例计算1:
sum(rate(http_request_duration_seconds_bucket{le="0.3"}[5m])) by (job)
/
sum(rate(http_request_duration_seconds_count[5m])) by (job)
# 样例计算2:
histogram_quantile(0.95, sum(rate(http_request_duration_seconds_bucket[5m])) by (le))
# 样本数据
# HELP prometheus_http_request_duration_seconds Histogram of latencies for HTTP requests.
# TYPE prometheus_http_request_duration_seconds histogram
prometheus_http_request_duration_seconds_bucket{handler="/",le="0.1"} 1
prometheus_http_request_duration_seconds_bucket{handler="/",le="0.2"} 1
prometheus_http_request_duration_seconds_bucket{handler="/",le="0.4"} 1
prometheus_http_request_duration_seconds_bucket{handler="/",le="1"} 1
prometheus_http_request_duration_seconds_bucket{handler="/",le="3"} 1
prometheus_http_request_duration_seconds_bucket{handler="/",le="8"} 1
Summary
Summary 也是用来做统计分析的,可用于统计一段时间内数据采样结果 ,如中位数(quantile=0.5
)、9分位数(quantile=0.9
)等,和 Histogram 区别在于,Summary 直接存储的就是百分位数,如下所示:可以直观的观察到样本的中位数,如 P90
和 P99
:
# HELP prometheus_engine_query_duration_seconds Query timings
# TYPE prometheus_engine_query_duration_seconds summary
prometheus_engine_query_duration_seconds{slice="queue_time",quantile="0.5"} 8.844e-06
prometheus_engine_query_duration_seconds{slice="queue_time",quantile="0.9"} 2.8198e-05
prometheus_engine_query_duration_seconds{slice="queue_time",quantile="0.99"} 0.000123539
# HELP prometheus_engine_query_duration_seconds Query timings
# TYPE prometheus_engine_query_duration_seconds summary
prometheus_engine_query_duration_seconds{slice="queue_time",quantile="0.5"} 8.844e-06
prometheus_engine_query_duration_seconds{slice="queue_time",quantile="0.9"} 2.8198e-05
prometheus_engine_query_duration_seconds{slice="queue_time",quantile="0.99"} 0.000123539
Counter
(计数器):表示一个单调递增的值,如请求总数、错误总数等。它只能增加,不能减少(除非系统重启)Gauge
(仪表盘):表示一个可以任意增减的值,如当前内存使用量、CPU 利用率等Histogram
(直方图):表示一组数据的分布情况,如请求延迟的分布。它包含多个 bucket(桶),每个 bucket 对应一个值范围,以及落入该范围的样本数量Summary
(摘要):与直方图类似,也表示一组数据的分布情况,但它提供了更精确的分位数(如中位数、95% 分位数等)计算