天天看点

Prometheus的指标分类

Prometheus 指标分为 Counter (计数器) Gauge (仪表盘)、Histogram (直方图)、Summary (摘要)

Counter 是计数器类型,它的特点是只增不减,例如机器启动时间、 HTTP 访问

量等 。Counter 具有很好的不相关性,不会因为机器重启而置 我们在使用 Counter

指标时,通常会结合 rate ()方法获取该指标在某个时间段的变化率,例如,“ HTTP

请求总量”指标就属于典型的 Counter 指标,通过对它进行 rate ()操作,可以得出请

求的变化率。

Gauge 是仪表盘,表征指标的实时变化情况,可增可诚,例如 CPU 和内存的使

用量、网络 大小等,大部分监控数据都是 Gauge 类型的。

Summary和Histogram 一样,都属于高级指标,用于凸显数据的分布状况

如果需要了解某个时间段内请求的响应时间,则通常使用平均响应时间,但这样做无

法体现数据的长尾效应 例如,一个 HTTP 服务器的正常响应时间是 30ms ,但有很

少几次请求耗时 3s ,通过平均响应时间很难瓢别长尾效应,这时可以通过 Histogram

或者 Summary 展现 Histogram Summary 这两种指标类型在本质上是可以相互转

化的

这里先了解一下数据分位:伊代表分位数 ,;三 ψ~1 ,分位数是在 个观测值中

按数 ·N 排序的观测值 例如, 0.9 分位数代表第 位置上的数,如果总数是

100 那么将是第 个数

Summary 是采样点分位图统计,用于得到数据的分布情况 例如,如果在要统

计的班级中,有 90%学生的成绩低于 93 分,有 95%学生的成绩低于 96 分,则采用

Summary 能够更好地展示数据的分布情况

Prometheus 内部, Prometheus_tsdb_ wal_fsync _ duration_seconds 指标的类型为

Summary ,它记录了 Prometheus Server WAL 写入磁盘的 同步时间:

Prometheus_tsdb_wal_fsync_duration_seconds{quantile=” 0 . 5”} 0.012352463

Prometheus tsdb wal fsync duration seconds{quantile=” 0.9 ”} 0 .0144 58005

从而得出有 50% 的同步时间低于 0.012 352 463s ,有 90% 的同步时间低于 0.014

458 005s

Histogram 反映了某个区间内的样本个数,通过{ le ="上边界”}指定这个范围内的

样本数 Prometheus 中表示每个本地存储序列保存的 chunk 的指标 prometheus_

local_ storage_ series_ chunks __persisted 就属于 Histogram 指标类型,如下所示:

prometheus_local_storage_series_chunks_persisted{le=” l.6384e+06”} 260

prometheus_local_storage_series_chunks_persisted{le=” 6.5536e+06”} 780

可以看到,小于 l.6384e+06 chunk 的序列有 260 个,小于 6.5536e+06 chunk

的序列有 780 个

代表注释,“# HELP ”提供帮助信息,“#TYPE ”代表 metric 类型

如下所示是调用 Prometheus exporter 返回的一个监控数据样本

HELP http_requests_total The total number of HTTP requests .

TYPE http_requests_total counter

http requests_total{method=”post” , code=” 20 0 ”}

95066363000

http_requests_total{method=”post”, code=” 40 。”}

66363000

如果是 Histogram Summary 类型,则必须满足以下条件:

指标必须提供 sum count 方法,分别表示总和和总量;

© Summary 类型符合“指标名称{quant le =分位点}”格式;

Histogram 类型符合“指标名称 buck t{le =分位点}”格式,必须包含“指标

名称一bucket{le="+Inf’}”的指标项,它的值等于“指标名_count ”的值;

Summary Historam 中, quantil 巳和 le 必须按从小到大的顺序排列

为了兼容 push 方式, Prometheus 提供了 Pushgateway 组件 Pushgateway 组件

接收客户端发送过来的数据,按照 Job Instance 两个层级进行组织,支持数据的

追加和删除,并且为防止数据丢失,还支持本地存储

动态发现方式比较适合在云环境下使用 云的理念就是按需供给,资源是动态

分配的,并且生命周期比物理机器短。

Prometheus 通过动态发现方式获取监控对象 目前支持以下系统获取监控对象:

容器管理系统,例如 Kubernetes Marathon;

各种云管平台,例如 EC2 Azure OpenStack;

各种服务发现组件,例如 DNS Zoo Keeper Consul等

Promet eus 会从这些组件中获取监控对象,并汇总在这些组件中获取的数据,

从而获取所有监控对象 在第 次被 入时,监控 象(下称 target 的状态是

unkno 之后, Prometheus 会在设定的周期内对 target 数据进行循环采集,如果采

集成功, targ et 状态变为 up ;如 果采集失败(例如超 ), target 状态变为 down

下面以与 Kubernetes 集成为例讲解监控对象自动发现的流

( 1 )需要在 Prometheus 里配置 Kubernetes API 的地址和认证凭据,这样

Prometheus 就可以连接到 Kubernetes API 来获取信息

( 2 ) Prometheu 的服务发现组件会一直监昕( watch ) Kubernetes 集群的变化,

当有新主机或加入集群的时候,会获取新主机的主机名和主 IP ,如果是新 建的