Prometheus的基本概念与存储方式介绍

7 篇文章 0 订阅
2 篇文章 0 订阅

一、什么是Prometheus

1.1 定义:

Prometheus是一个开源监控系统,它前身是SoundCloud的警告工具包。从2012年开始,许多公司和组织开始使用Prometheus。该项目的开发人员和用户社区非常活跃,越来越多的开发人员和用户参与到该项目中。目前它是一个独立的开源项目,且不依赖与任何公司。 为了强调这点和明确该项目治理结构,Prometheus在2016年继Kurberntes之后,加入了Cloud Native Computing Foundation。

1.2 特征:

Prometheus的主要特征有:

  • 多维度数据模型
  • 灵活的查询语言
  • 不依赖分布式存储,单个服务器节点是自主的
  • 以HTTP方式,通过pull模型拉去时间序列数据
  • 也通过中间网关支持push模型
  • 通过服务发现或者静态配置,来发现目标服务对象
  • 支持多种多样的图表和界面展示,grafana也支持它
1.3 基本架构

在这里插入图片描述

更多内容可以参考:https://prometheus.io/docs/introduction/overview/

二、Prometheus的存储配置

在Prometheus容器run的时候 输入命令部分加上--storage.tsdb.path--storage.tsdb.retention.time的配置即可。即:

docker run -d -p 9090:9090 \
  -v /home/sw/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
  --name prometheus_test \
  --net=host \
  prom/prometheus \
  --config.file=/etc/prometheus/prometheus.yml \
  --storage.tsdb.path=/prometheus/data \
  --web.console.libraries=/usr/share/prometheus/console_libraries \
  --web.console.templates=/usr/share/prometheus/consoles \
  --storage.tsdb.retention.time=7d

其中默认:–storage.tsdb.path =/prometheus,–storage.tsdb.retention.time=15d

三、Prometheus存储的基本概念

3.1 本地存储

Prometheus包括一个本地磁盘时间序列数据库,但也可选择与远程存储系统集成。(可以通过远程读/写API使用外部存储。)
目前虚拟机的存储路径为prometheus docker的/prometheus文件夹:
在这里插入图片描述
Prometheus采用TSDB本地存储,核心为block和wal。摄取的样本分为两小时的块(block)。每个两小时的块包含一个目录,其中包含一个或多个块文件,其中包含该时间窗口的所有时间序列样本,以及元数据文件和索引文件(将度量标准名称和标签索引到块文件中的时间序列) )。通过API删除系列时,删除记录存储在单独的逻辑删除文件中(而不是立即从块文件中删除数据)。
当前传入样本的块保存在内存中,但尚未完全保留。通过预写日志(WAL)防止崩溃,可以在崩溃后重新启动Prometheus服务器时重放。WAL以128MB的段存储在wal目录中。这些文件包含尚未压缩的原始数据,因此它们比常规的块文件大得多。Prometheus将至少保留3个预写日志文件,但是高流量服务器可能会看到三个以上的WAL文件,因为它需要保留至少两个小时的原始数据。
最初的两小时块最终会在后台压缩成更长的块。
存储目录结构如下:
在这里插入图片描述

  • block的目录结构与存储数据量:

    1、TSDB将存储的监控数据按照时间分成多个block存储,默认最小的block保存时间为2h(2h的block会合并成大block,之前block被删除)线上看到压缩三次,source有9个block,那么2*9=18小时
    2、TSDB还会将小块合并成大块,减少内存中block的数量,便于索引查找数据(线上观察下来,每一个block目录都经过三次合并,18小时数据)

3.2 运营方面

Prometheus有几个标志,允许配置本地存储。 最重要的是:

  • –storage.tsdb.path:这决定了Prometheus写入数据库的位置。 默认为data/。
  • –storage.tsdb.retention.time:这决定了何时删除旧数据。 默认为15d。如果此标志设置为默认值以外的任何值,则覆盖storage.tsdb.retention.time。
  • –storage.tsdb.retention.size:[EXPERIMENTAL]这确定了存储块可以使用的最大字节数(请注意,这不包括WAL大小,这可能很大)。
    最早的数据将被删除。 默认为0或禁用。 此标志是实验性的,可以在将来的版本中进行更改。 支持的单位:KB,MB,GB,PB。
    例如:“512MB”
  • –storage.tsdb.wal-compression:此标志启用压缩预写日志(WAL)。根据您的数据,可以预期WAL大小将减少一半,而额外的CPU负载却很少。请注意,如果启用此标志,然后将Prometheus降级到2.11.0以下的版本,则您将需要删除WAL,因为它将不可读。
3.3 对prometheus存储数据的大小估计:

平均而言,Prometheus每个样本仅使用大约1-2个字节。 因此,要规划Prometheus服务器的容量,可以使用粗略的公式:

needed_disk_space = retention_time_seconds * ingested_samples_per_second * bytes_per_sample

另外,官网有一句话:Again, Prometheus’s local storage is not meant as durable long-term storage.或许使用Prometheus的本地存储作为平台持久化存储的数据库不是明智的选择。

3.4 远程存储集成

prometheus提供了本地存储,即tsdb时序数据库。本地存储的优势就是运维简单,缺点就是无法海量的metrics持久化和数据存在丢失的风险,我们在实际使用过程中,出现过几次wal文件损坏,无法再写入的问题。Prometheus的本地存储在可伸缩性和持久性方面受到单个节点的限制。 Prometheus并没有尝试解决Prometheus本身中的群集存储,而是提供了一组允许与远程存储系统集成的接口
prometheus以两种方式与远程存储系统集成:
Prometheus可以以标准格式将其提取的样本写入远程URL:
在这里插入图片描述
写入:https://prometheus.io/docs/prometheus/latest/configuration/configuration/#remote_write
Prometheus可以以标准格式从远程URL读取(返回)样本数据:
读取:https://prometheus.io/docs/prometheus/latest/configuration/configuration/#remote_read

四、参考

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值