研发应用 --Prometheus
1.前言
工作中经常需要使用 prometheus 进行数据统计,但是对此工具的概念一直处于一个模糊状态,好似明白,但是又好似不明白,希望借由此篇文章弄懂 prometheus 的应用本质,并能让他人也通过此文章明白 prometheus 的使用。
2.简介
2.1 prometheus 名词解释
metric
采集的监控数据
TSDB
时间序列数据库(属于同一指标名称,同一标签集合的、有时间戳标记的数据流)
2.2 数据模型
2.2.1 指标名称和标签
每一条时间序列由指标名称(Metrics Name)
以及一组标签(键值对)
唯一标识。其中指标的名称(metric name)可以反映被监控样本的含义(例如,http_requests_total
— 表示当前系统接收到的 HTTP 请求总量)
通过使用标签,Prometheus 开启了强大的多维数据模型:对于相同的指标名称,通过不同标签列表的集合,会形成特定的度量维度实例
如
http_requests_total
有 label:handler,method
就可以从 uri 纬度和 method 纬度分别进行统计
2.2.2 样本
在时间序列中的每一个点称为一个样本(sample),样本由以下三部分组成:
指标(metric):指标名称和描述当前样本特征的 labelsets;
时间戳(timestamp):一个精确到毫秒的时间戳;
样本值(value): 一个 folat64 的浮点型数据表示当前样本的值。
表示形式
指标名称为 api_http_requests_total
,标签为 method="POST"
和 handler="/messages"
的时间序列可以表示为:
2.3 指标类型
Prometheus 的客户端库中提供了四种核心的指标类型。但这些类型只是在客户端库(客户端可以根据不同的数据类型调用不同的 API 接口)和在线协议中,实际在 Prometheus server 中并不对指标类型进行区分,而是简单地把这些指标统一视为无类型的时间序列。
2.3.1 counter
Counter 类型代表一种样本数据单调递增的指标,即只增不减,除非监控系统发生了重置。
2.3.2 Gauge
Gauge 类型代表一种样本数据可以任意变化的指标,即可增可减。Gauge 通常用于像温度或者内存使用率这种指标数据,也可以表示能随时增加或减少的“总数”,例如:当前并发请求的数量。
2.3.3 Histogram
Histogram 在一段时间范围内对数据进行采样(通常是请求持续时间或响应大小等),并将其计入可配置的存储桶(bucket)中,后续可通过指定区间筛选样本,也可以统计样本总数,最后一般将数据展示为直方图。
2.3.4 Summary
与 Histogram 类型类似,用于表示一段时间内的数据采样结果(通常是请求持续时间或响应大小等),但它直接存储了分位数(通过客户端计算,然后展示出来),而不是通过区间来计算。
2.4 prometheus 概览
Prometheus Server 直接从监控目标(Prometheus targets
)中或者间接通过推送网关(Pushgateway
)来拉取监控指标,它在本地存储所有抓取到的样本数据,并对此数据执行一系列规则,以汇总和记录现有数据的新时间序列或生成告警(push alerts to Alertmagager
)。可以通过 Grafana
或者其他工具来实现监控数据的可视化。
通过服务发现的方式去发现需要拉取的数据源。
3.存储机制
Prometheus 2.x 默认将时间序列数据库保存在本地磁盘中,同时也可以将数据保存到任意第三方的存储服务中。
Prometheus 按照两个小时为一个时间窗口,将两小时内产生的数据存储在一个块(Block)中。每个块都是一个单独的目录,里面含该时间窗口内的所有样本数据(chunks),元数据文件(meta.json)以及索引文件(index)。其中索引文件会将指标名称和标签索引到样板数据的时间序列中。此期间如果通过 API 删除时间序列,删除记录会保存在单独的逻辑文件 tombstone
当中。
当前样本数据所在的块会被直接保存在内存中,不会持久化到磁盘中。为了确保 Prometheus 发生崩溃或重启时能够恢复数据,Prometheus 启动时会通过预写日志(write-ahead-log(WAL))重新记录,从而恢复数据。预写日志文件保存在 wal
目录中,每个文件大小为 128MB
。wal 文件包括还没有被压缩的原始数据,所以比常规的块文件大得多。一般情况下,Prometheus 会保留三个 wal 文件,但如果有些高负载服务器需要保存两个小时以上的原始数据,wal 文件的数量就会大于 3 个。
参考文档
https://prometheus.fuckcloudnative.io/di-er-zhang-gai-nian/data_model
https://github.com/prometheus-junkyard/tsdb/blob/master/docs/format/wal.md
版权声明: 本文为 InfoQ 作者【en】的原创文章。
原文链接:【http://xie.infoq.cn/article/16e8ac752f43b00307775b705】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论