利用Prometheus 打造企业分布式监控平台(5)--数据模型

数据格式

Prometheus 从根本上来讲将数据存储为时间序列。除了存储的时间序列外,Prometheus可能会生成临时派生的时间序列做为查询结果。Prometheus可与键值对配合使用。键以数值形式描述要测量的值,而值将实际测量值存储为数字。正则表达式

basic-filtering-1.png

下面详细介绍这几部分:api

Metric names 和 labels

每一个时间序列都由其指标名称和称为标签的可选键值对做为惟一标识。服务器

度量标准名称指定所测量系统的通常功能(例如,http_requests_total-接收到的HTTP请求总数)。它能够包含ASCII字母和数字以及下划线和冒号。它必须匹配正则表达式(a-zA -Z _:] [a-zA-Z0-9 _:] *。函数

标签启用Prometheus的维度数据模型:具备相同度量标准名称的标签的任何给定组合都会标识该度量标准的特定维度实例(例如:全部使用POST方法到/api/tracks处理程序的HTTP请求)。查询语言容许根据这些维度进行过滤和汇总。更改任何标签值(包括添加或删除标签)都会建立一个新的时间序列。工具

PS:此处决定了咱们在存储metrics的时候,应该删除掉无用labels,以下降存储压力。

标签名称可能包含ASCII字母,数字和下划线。网站

标签值能够包含任何Unicode字符。spa

Samples

Samples构成实际的时间序列数据,每一个样本包括:code

  • 一个float64值
  • 毫秒精度的时间戳

数据类型

Prometheus中,有两种基本数据类型和两种计算数据类型。blog

基本数据类型包括gauges 和 counters。计算数据类型包括histograms 和 summaries。事件

Counter

多是你可使用的最简单的度量标准形式。计数器,顾名思义,是随着时间的推移对元素进行计数。

例如,若是您要计算服务器上HTTP错误的数量或网站的访问次数,则可能要使用一个计数器。

就像您在物理上想象的那样,计数器只会增长或重置。

结果,计数器天然不能适应可能降低或负的值。

计数器特别适合于计算一段时间内某个事件的发生次数,即指标随时间变化的速率。

Gauges

Gauges用于处理可能随时间下降的值。在视觉上,它们就像热敏电阻:在任何给定的时间,若是您观察到热敏电阻,即可以看到当前的温度值。

若是系统每5秒发送一次指标,而Prometheus每15秒拉取一次目标,则可能会丢失一些指标,若是对这些指标执行其余计算,结果的准确性就会愈来愈差。

有了计数器,每一个值都会被汇总在其中,当Prometheus对其进行刮取时,将会知道在刮取间隔期间发送了一个值。

Histogram

直方图是一种更复杂的指标类型,它为您的指标提供了更多信息,例如观测值的总和和计数。

值被汇总到可配置上限的存储桶中,这意味着使用直方图,您能够:

  • 计算平均值:由于它们表明您的值总和除以记录的值数的分数。
  • 根据您的值计算分数测量:这是一个很是强大的工具,由于它可让您了解给定存储桶中有多少值遵循给定标准。当您要监视比例或创建质量指标时,这很是有用。

例如envoy关于请求消耗时间的统计:

# TYPE envoy_cluster_upstream_rq_time histogram
envoy_cluster_upstream_rq_time_bucket{envoy_cluster_name="http_service",le="0.5"} 1
envoy_cluster_upstream_rq_time_bucket{envoy_cluster_name="http_service",le="1"} 1
envoy_cluster_upstream_rq_time_bucket{envoy_cluster_name="http_service",le="5"} 3
envoy_cluster_upstream_rq_time_bucket{envoy_cluster_name="http_service",le="10"} 5
envoy_cluster_upstream_rq_time_bucket{envoy_cluster_name="http_service",le="25"} 5
envoy_cluster_upstream_rq_time_bucket{envoy_cluster_name="http_service",le="50"} 5
envoy_cluster_upstream_rq_time_bucket{envoy_cluster_name="http_service",le="100"} 5
envoy_cluster_upstream_rq_time_bucket{envoy_cluster_name="http_service",le="250"} 5
envoy_cluster_upstream_rq_time_bucket{envoy_cluster_name="http_service",le="500"} 5
envoy_cluster_upstream_rq_time_bucket{envoy_cluster_name="http_service",le="1000"} 5
envoy_cluster_upstream_rq_time_bucket{envoy_cluster_name="http_service",le="2500"} 5
envoy_cluster_upstream_rq_time_bucket{envoy_cluster_name="http_service",le="5000"} 5
envoy_cluster_upstream_rq_time_bucket{envoy_cluster_name="http_service",le="10000"} 5
envoy_cluster_upstream_rq_time_bucket{envoy_cluster_name="http_service",le="30000"} 5
envoy_cluster_upstream_rq_time_bucket{envoy_cluster_name="http_service",le="60000"} 5
envoy_cluster_upstream_rq_time_bucket{envoy_cluster_name="http_service",le="300000"} 5
envoy_cluster_upstream_rq_time_bucket{envoy_cluster_name="http_service",le="600000"} 5
envoy_cluster_upstream_rq_time_bucket{envoy_cluster_name="http_service",le="1800000"} 5
envoy_cluster_upstream_rq_time_bucket{envoy_cluster_name="http_service",le="3600000"} 5
envoy_cluster_upstream_rq_time_bucket{envoy_cluster_name="http_service",le="+Inf"} 5

实际上,直方图常常使用的场景也是:

  • http 请求耗时
  • http 响应大小

Summaries

汇老是直方图的扩展,除了提供观测值的总和和计数外,还提供滑动窗口上的分位数度量。

提醒一下,分位数是将几率密度划分为相等几率范围的方法。

直方图和汇总本质上是不一样的。

直方图聚合的值会随时间变化,从而提供求和和计数功能,使您能够轻松查看给定指标的演变。

另外一方面,汇总会在滑动窗口上显示分位数(即随着时间不断发展)。

总结

Counter Gauge Histogram Summary
General
值是否能够上下变化
是不是复杂数据类型(一个metric多个值)
是一个近似值
Querying
可使用rate函数
能够计算百分位数
可使用histogram_quantile函数查询
相关文章
相关标签/搜索