写点什么

研发应用 --Prometheus

用户头像
en
关注
发布于: 刚刚
研发应用--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 的浮点型数据表示当前样本的值。

表示形式

<metric name>{<label name>=<label value>, ...}
复制代码

指标名称为 api_http_requests_total,标签为 method="POST"handler="/messages" 的时间序列可以表示为:

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


发布于: 刚刚阅读数: 2
用户头像

en

关注

努力分享对他人有价值的知识 2018.06.14 加入

还未添加个人简介

评论

发布
暂无评论
研发应用--Prometheus