Prometheus 是由 SoundCloud 开源监控告警解决方案,特别适合现在容器化的监控。
架构图
Prometheus的特点
- 多维数据模型,包含key/value标识标签的时间序列数据;
- PromQL,一种灵活的查询语言 ,内置的函数可以让我们快速运算得到我们想要的结果;
- 不依赖分布式存储,默认是本地存储,也可以选择远程读写;
- 通过http请求拉取(pull)exporter数据;
- 也可以通过网关(gateway)推送(push)数据;
- 配置可以通过服务发现或静态配置发现监控目标;
- 多种图形和仪表板支持模式,特别是grafana的支持,让我们可以快速完成好看的图表。
数据格式
prometheus存储的是时序数据:即按相同时序(相同名称和标签),以时间维度存储连续的数据的集合。
时序(time series)是由名称(Metric)以及一组key/value标签定义的,具有相同的名字以及标签属于相同时序。
- metric名字:表示需要记录的数据的名称以及数据类型,如http_request_total。时序的名字由 ASCII 字符,数字,下划线,以及冒号组成,它必须满足正则表达式 [a-zA-Z:][a-zA-Z0-9:]*, 其名字应该具有语义化,一般表示一个可以度量的指标,例如 http_requests_total, 可以表示 http 请求的总数。
- 标签:用来表示一类资源,例如:同一个集群可以使用同一个标签,就可以通过标签获取到整个集群的同一个指标。
- 指标值:按照某个时序以时间维度采集的数据,称之为样本。实际的时间序列,每个序列包括一个float64的值和一个毫秒级的unix 时间戳
Prometheus 四种指标类型
Counter (计算器):单调递增的指标,即只增不减,除非监控系统发生了重置。
Gauge(仪表盘):可以任意变化的指标,即可增可减。
Histogram(直方图):在一段时间范围内对数据进行采样,并将其计入可配置的存储桶中,后续可通过指定区间筛选样本,也可以统计样本总数,最后一般将数据展示为直方图,
- 样本的值分布在 bucket 中的数量,命名为
_bucket{le= "<上边界>"}。解释的更通俗易懂一点,这个值表示指标值小于等于上边界的所有样本数量 - 所有样本值的大小总和,命名为
_sum。 - 样本总数,命名为
_count。值和 _bucket{le="+Inf"} 相同。
Summary(摘要):Histogram类似类型,用于表示一段时间内的数据采样结果(通常是请求持续时间或响应大小等),但它直接存储了分位数(通过客户端计算,然后展示出来),而不是通过区间计算
- 样本值的分位数分布φ-quantiles (0 ≤ φ ≤ 1) 情况,命名为
{quantile= "<φ>"} - 所有样本值的大小总和,命名为
_sum
Histogram与Summary的异同
它们都包含了
总结
prometheus的数据格式规范,可以使用PromQL语句快速查询,特别是结合grafana,完成一个图表是分分钟的事情。