有本地存储,远端存储两种
本地存储即通过时序数据库(TSDB)存在本地,可以实现高性能的读写,大门时存储容量有限
核心是block和WAL。
TSDB按照时间间隔分隔成block,其大小不固定,默认的最小的是2h,TSDB会自动把小的block合成大的,
block主要包含chunks,index,meta.json,tombstones四个部分
chunks用来保存压缩后的时序数据,512mb每个,超过就会被截断
index记录chunk中的时许的偏移位置
tombstones用来对数据软删除
meta.json记录block中的元数据信息,起始时间,截止时间,样本数,时序数,数据源等,在后期删除block或者合并block时候会用到
WAL(write-ahead logging,预写日志)可以实现事务性和持久性,每个操作之前先把该事记录下来,方便以后进行回滚重试的操作,WAL被分割为128MB大小的文件段。
promtheus会将采集到的监控数据通过add接口添加到head block中,但这些数据没有被持久化。TSDB通过WAL将数据保存到磁盘中,再TSDB宕机重启后,会首先启动多线程读取WAL,恢复之前的状态。
远端存储可以读写第三方数据库,写入接口Appender,有Add,AddFast,Commit和Rollback四种方法,Querier接口是查询接口,定义了Select方法(通过标签搜索),还有fanout接口先遍历本地数据库,再遍历远端数据库。
通过Adapter适配器,将prometheus的读写请求转化为第三方远端存储接口,主要有InfluxDB,OpenDB,CreateDB,TiKV,Cortex,M3DB。
需要在promrtheus.yml文件中配置Adapter信息,然后从才能读写远端数据库。在对接远端存储之前需要先对远端存储和Adapter压测,确保可以承受来自peometheus的数据写入。