prometheus怎么存储数据的

Prometheus

Time Series

时序数据库,跟着一个时间轴往前走

  • Data scheme

    • identifier -> (t0,v0),(t1,v1),(t2,v2),(t3,v3),…
  • Prometheus Data Model

    • {
  • Typical set of series identifiers
    在这里插入图片描述

  • Query

    • _ name_=“requests_total” selects all series belonging to the requests_total metric.
    • method=“PUT|POST” -selects all series method is PUT or POST.
      在这里插入图片描述

Prometheus v1.x-存储V2版本

  • 每个time series 一个文件

  • 在内存里批处理 1kb chunks
    在这里插入图片描述

  • 弊端

    • chunk在内存里,如果程序丢掉或者node crashed,chunk马上丢掉了
    • series维度很多,files很多,i节点很快就会被耗尽,硬盘写不进去了
    • 几千个chunk写入硬盘,硬盘会很忙
    • 保持file打开并且进行I/O操作,会造成高延迟
    • 旧数据需要被清除,导致SSD写入放大
    • CPU/MEM/DISK资源耗费巨大
  • Series Churn:一些series变不活跃,一些变的很活跃

    prometheus不知道到底是否应该存在内存当中

Prometheus v2.x-存储V3版本

在这里插入图片描述

  • 存储布局

    • 01xxxx 是data block
      • ULID:和UUID很类似,但是可以排序
    • chunk 目录
    • index 数据索引,倒排索引
    • meta.json
    • tombstone删除数据,放入叫tombstone的文件里
    • wal Write-Ahead Log预写日志,先写日志,再数据操作
    • chunk_head 可以改
      • Chunk 有120个samples,默认2h,chunk会被cut
  • 注意

    • 数据每两个小时保留到磁盘中
    • WAL用于数据恢复
    • 2小时一次,可以有效查询某一个时间范围数据
  • Blocks: 小数据库
    在这里插入图片描述

    • block不可改
    • prometheus来的数据先放入chunk_head里,满了以后放进block变成只读
    • 查询数据进入小block里,得到的数据merge到前端用户
  • Chunk-head

    • 不是所以chunks 都存在内存
    • 当chunk被cut,disk和mmap都会更新
      在这里插入图片描述
  • chunk head -> Block

    ​ chunks在3h内,前两小时的chunks(1,2,3,4)放到block里

    ​ WAL删除,checkpoint生成
    在这里插入图片描述
    在这里插入图片描述

  • Prometheus WAL & Checkpoint

    • WAL里也有许多chunk,到达一定时间点,做checkpoint操作
      • wal记录:包括Series以及对于的Samples
        • 第一次见到series就进行Series记录
        • Sample记录所有包含sample的write请求
      • WAL Truncation -Checkpoint
        • 删除所有不在Head中的series记录
        • 删除时间T之前的所有samples
        • 删除时间T之前的使用tombstone记录
        • 用从wal出现的同样方式保留剩余的series、samples、tombstone
          在这里插入图片描述
  • 优点:

    • querying time range变容易
    • disk write更容易
    • chunk保留住了
    • 可以灵活调整chunk size
    • 删除旧数据变得很容易
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值