当前位置: 首页 > news >正文

Prometheus 存储学习

Prometheus 存储学习

  • 一、序言
  • 二、 运行时参数
  • 三、Prometheus 的数据存储了解
  • 四、远程存储学习

一、序言

本篇文章主要根据官网https://prometheus.io/docs/prometheus/latest/storage/文章对存储的描述进行理解。

prometheus 使用一个嵌入式的tsdb数据库存储数据,此数据库并非像平常数据库可登录查询数据,而是需要通过promql或者webui界面查询。

二、 运行时参数

  • --storage.tsdb.path: Prometheus 写入其数据库的位置。默认为 data/。
  • --storage.tsdb.retention.time: 保留时间默认为 15d。支持的单位:y, w, d, h, m, s, ms。
  • --storage.tsdb.retention.size: 设置最多占用多少存储空间。默认为 0 或禁用。支持的单位:B, KB, MB, GB, TB, PB, EB。 WAL 和 m-mapped 也计入总大小。
  • --storage.tsdb.wal-compression : 是否会对 WAL 日志进行压缩存储,默认否。

WAL介绍:

WAL 是 Prometheus TSDB 用于保证数据可靠性的临时日志,所有新采集的监控样本(时间序列数据)会先写入 WAL,再定期批量写入磁盘上的持久化存储(块文件)。这是为了防止 Prometheus 意外崩溃时丢失未持久化的数据。

三、Prometheus 的数据存储了解

存储目录结构如下:

root@localhost:~# ll /var/lib/prometheus/
drwxr-xr-x  9 root root  4096 Sep  6 21:00 ./
drwxr-xr-x 45 root root  4096 Sep  6 09:51 ../
drwxr-xr-x  3 root root  4096 Sep  6 13:00 01K4EPAVVDMQHK7HQZ9HKDT5AV/
drwxr-xr-x  3 root root  4096 Sep  6 17:00 01K4F42A6EHFC1NF0XNDEGYRE6/
drwxr-xr-x  3 root root  4096 Sep  6 19:00 01K4FAY1F2BXGZ6K1ZZZ8CBEHF/
drwxr-xr-x  3 root root  4096 Sep  6 19:00 01K4FAY1PGZN9XH8KKKPNNZJCW/
drwxr-xr-x  3 root root  4096 Sep  6 21:00 01K4FHSRQ6D5TPA953YG7V3765/
drwxr-xr-x  2 root root  4096 Sep  6 21:01 chunks_head/
-rw-r--r--  1 root root     0 Sep  6 15:18 lock
-rw-r--r--  1 root root 20001 Sep  6 22:36 queries.active
drwxr-xr-x  3 root root  4096 Sep  6 21:00 wal/

prometheus 正常来说,会将最近两小时采集的数据(一个块文件)保存到chunks_head目录下,当满足2小时或者达到指定大小时,prometheus tsdb将会冻结chunks_head并生成一个以 01K4EPAVV... 命名的持久化块目录,该目录结构如下:

chunks_head 目录下默认会保留两个块,4个小时的数据。
非正常的情况是:当你重启prometheus 时,他会自动将之前收集的数据,即使不满2小时或者存储阈值也会生成一个01K4EPAVV... 命名的文件。
--max-block-duration 修改满足多久生成新的文件,参考链接详细说明:https://prometheus.io/docs/prometheus/latest/storage/#longer-block-durations

root@localhost:/var/lib/prometheus# tree 01K4FHSRQ6D5TPA953YG7V3765/
01K4FHSRQ6D5TPA953YG7V3765/
├── chunks
│   └── 000001
├── index
├── meta.json
└── tombstones
  • chunks:该目录保存着2 小时内所有时间序列的样本数据
  • index:存储着时间序列的标签索引,是 Prometheus 高效查询数据的关键
  • meta.json:存储着当前数据块的元信息和统计数据,例如采集开始和结束时间,块的uuid,块大小等
  • tombstones:记录被标记为删除的时间序列,例如:当http_requests_total{path=“/old-api”} 这个api被废弃时,删除之前的所有数据时,prometheus会在tombstones文件中记录删除范围,当执行查询http_requests_total{path=“/old-api”} 时,会被自动过滤掉,相当于逻辑删除,当进行块合并时,被标记的数据不会被合并,相当与物理删除。(prometheus会动态的将之前的旧数据聚合)

chunks_head 已经介绍过了新收集的指标数据会保存在此目录下,收集完两小时后就会生成01K4EPAVV... 命名的持久化块目录,并将数据迁移过去。

lock: 进程锁文件,主要功能是防止多个prometheus实例同时访问数据,导致数据损坏

WAL:在上面也有介绍,就是新采集的指标数据会先预写到WAL–> 内存 --> chunks_head,这样的好处是当promeheus意外重启,chunks_head的数据不完整时,将通过加载chunks_head --> wal 来恢复丢失的数据。

查看WAL目录结构:

tree wal/
wal/
├── 00000022
├── 00000023
├── 00000024
└── checkpoint.00000021└── 00000000

000000开头的文件:存储最新采集的监控样本数据(以日志形式按顺序写入)
checkpoint.00000021:检查点目录,存储 WAL 日志的 “检查点快照”,用于优化重启时的恢复速度。

  • 工作原理:
    当 WAL 日志文件累积到一定数量(默认每生成 16 个日志文件),TSDB 会对已写入 chunks_head/ 的数据做一次 “快照”,写入 checkpoint.XXX 目录,重启prometheus也会触发。就是合并之前16个日志文件,并将之前的日志文件删除。

四、远程存储学习

prometheus 提供了一套接口,允许与远程存储系统进行集成,官方文档链接:https://prometheus.io/docs/prometheus/latest/storage/#remote-storage-integrations

prometheus 支持的外部存储查看链接:https://prometheus.io/docs/operating/integrations/#remote-endpoints-and-storage

如下演示如何使用InfluxDB数据库作为外部存储:

InfluxDB 是一款专为 时间序列数据(Time-Series Data) 设计的开源时序数据库(Time-Series Database, TSDB)

  1. 使用docker快速部署InfluxDB
    InfluxDB v1才支持prometheus 其他版本不支持

     docker run -d --name influxdb -p 8086:8086 influxdb:1.11.8
    
  2. 创建prometheus数据库

     docker exec -it  influxdb  bashinfluxdb@1e2d4cc5ca15:/$ influx
    
    Connected to http://localhost:8086 version v1.11.8
    InfluxDB shell version: v1.11.8
    > CREATE DATABASE "prometheus"
    > SHOW DATABASES
    name: databases
    name
    ----
    _internal
    prometheus
    
  3. 修改prometheus配置
    prometheus.yml配置文件后面加入两行

    remote_write:- url: "http://localhost:8086/api/v1/prom/write?db=prometheus"
    remote_read:- url: "http://localhost:8086/api/v1/prom/read?db=prometheus"
    
  4. prometheus是否能正确查询到数据
    在这里插入图片描述

  5. 查看InfluxDB中的数据

     influxdb@1e2d4cc5ca15:/$ influx
    
    Connected to http://localhost:8086 version v1.11.8
    InfluxDB shell version: v1.11.8
    > USE prometheus
    Using database prometheus
    > SELECT * FROM "up" limit 3
    name: up
    time                __name__ app        instance            job             value
    ----                -------- ---        --------            ---             -----
    1757229925823000000 up                  192.168.25.225:9100 consul_exporter 1
    1757229927835000000 up                  192.168.25.221:9100 consul_exporter 0
    1757229929158000000 up       prometheus localhost:9090      prometheus      1
    

文章转载自:

http://49q23PB9.ryfpx.cn
http://zuwOLb6W.ryfpx.cn
http://FStlIHzm.ryfpx.cn
http://OrINR5Jc.ryfpx.cn
http://gtxMI9Ys.ryfpx.cn
http://pttyszGK.ryfpx.cn
http://b99OWdsO.ryfpx.cn
http://4634UpJr.ryfpx.cn
http://L4ykZKAM.ryfpx.cn
http://X44zXDSw.ryfpx.cn
http://fm6cETNt.ryfpx.cn
http://1wfgoFSH.ryfpx.cn
http://rvw4CTLE.ryfpx.cn
http://H61nUQEZ.ryfpx.cn
http://3rIYGQmh.ryfpx.cn
http://Zx9nZJ0a.ryfpx.cn
http://APwcUN11.ryfpx.cn
http://1rovGhOu.ryfpx.cn
http://5Od6zeyL.ryfpx.cn
http://J1Wvdued.ryfpx.cn
http://Qi8NIQ3W.ryfpx.cn
http://tnjyCSAK.ryfpx.cn
http://6Yzj8v73.ryfpx.cn
http://Zr21jW27.ryfpx.cn
http://wCBzTD58.ryfpx.cn
http://tEXLTzOk.ryfpx.cn
http://hKN2fahV.ryfpx.cn
http://hRZQsRX7.ryfpx.cn
http://GAeQwYqS.ryfpx.cn
http://VenAYSHP.ryfpx.cn
http://www.dtcms.com/a/372123.html

相关文章:

  • 八.迪杰斯特拉(Dijkstra)算法
  • 大模型术语
  • Python入门教程之关系运算符
  • 9. Mono项目与Unity的关系
  • 【C#】 资源共享和实例管理:静态类,Lazy<T>单例模式,IOC容器Singleton我们该如何选
  • 【C语言】函数指针的使用分析:回调、代码逻辑优化、代码架构分层
  • SQLAlchemy ORM-表与表之间的关系
  • 系统架构性能优化与容灾设计深度解析
  • K8s ConfigMap配置管理全解析
  • 【Beetle RP2350】人体运动感应警报系统
  • tomcat下载
  • 数据结构精讲:栈与队列实战指南
  • 风电设备预测性维护方案:AIoT驱动的风电运维智能化转型​
  • Shell脚本监控系统资源详解
  • Vue基础知识-脚手架开发-Vue Router路由及params、query传参
  • 鱼眼相机模型
  • 类的加载和对象的创建
  • trl GRPO源码分析:如何处理多个reward function?
  • 临床研究三千问——临床研究体系的3个维度(8)
  • TypeORM入门教程:@JoinColumn和@OneToOne的关系
  • html列表标签之无序列表
  • [1]-01-创建空工程
  • 【模型训练篇】VeRL核心思想 - 论文HybridFlow
  • pycharm设置编辑区字体大小
  • 鸿蒙NEXT跨设备数据同步实战:分布式应用开发指南
  • C++ 中栈 (Stack) 详解和常见面试示例汇总实现
  • [光学原理与应用-461]:波动光学 - 波片实现偏振态的转换或调整
  • 苍穹外卖Day12 | Apache POI、导出Excel报表、HttpServletResponse、工作台
  • 《Go小技巧易错点100例》第三十八篇
  • Conda 包管理器与环境管理使用指南