Prometheus存儲原理及數據備份還原


prometheus將采集到的樣本以時間序列的方式保存在內存(TSDB 時序數據庫)中,並定時保存到硬盤中。與zabbix不同,zabbix會保存所有的數據,而prometheus本地存儲會保存15天,超過15天以上的數據將會被刪除,若要永久存儲數據,有兩種方式,方式一:修改prometheus的配置參數“storage.tsdb.retention.time=10000d”;方式二:將數據引入存儲到Influcdb中。為保證數據安全性,本文主要介紹的是promethues本地存儲備份數據的方法。


一、存儲原理

  prometheus 提供了本地存儲(TSDB)時序型數據庫的存儲方式,在2.0版本之后,壓縮數據的能力得到了大大的提升,單節點情況下可以滿足大部分用戶的需求,但本地存儲阻礙了prometheus集群化的實現,因此在集群中應當采用 其他時序性數據來替代,比如influxdb。
  prometheus 分為三個部分,分別是:抓取數據存儲數據查詢數據

  prometheus按照block塊的方式來存儲數據,每2小時為一個時間單位,首先會存儲到內存中,當到達2小時后,會自動寫入磁盤中。block的目錄結構如下:  

chunks	             多個,是個目錄、保存timeseries數據
meta.json	        配置文件,包含起止時間、包含哪些block
index	             通過metric名和labels查找時序數據在chunk文件中的位置
tombstones	     刪除操作會首先記錄到這個文件

  為防止程序異常而導致數據丟失,采用了WAL機制,即2小時內記錄的數據存儲在內存中的同時,還會記錄一份日志,存儲在block下的wal目錄中。當程序再次啟動時,會將wal目錄中的數據寫入對應的block中,從而達到恢復數據的效果。

   當刪除數據時,刪除條目會記錄在tombstones 中,而不是立刻刪除。

     prometheus采用的存儲方式稱為“時間分片”,每個block都是一個獨立的數據庫。優勢是可以提高查詢效率,查哪個時間段的數據,只需要打開對應的block即可,無需打開多余數據。

  目錄結構:

  prometheus的存儲層使用了全文檢索中的“倒排索引”概念,將每個時間序列視為一個小文檔。而metric和label對應的是文檔中的單詞。

二、數據備份

1、完全備份

  備份prometheus的data目錄可以達到完全備份的目的,但效率較低。

2、快照備份

  prometheus提供了一個功能,是通過API的方式,快速備份數據。

  實現方式:

  首先,修改prometheus的啟動參數,新增以下兩個參數:

--storage.tsdb.path=/usr/local/share/prometheus/data \
--web.enable-admin-api        

  重啟prometheus

  調用API

curl -XPOST http://prometheusIP:端口/api/v1/admin/tsdb/snapshot
返回結果:	
{"status":"success","data":{"name":"20191220T012427Z-21e0e532e8ca3423"}}

  此時,數據將快速的備份到 data/snapshots下。

   【注意】上述API還有一個參數

skip_head=<bool>                        默認是false
作用:是否跳過存留在內存中還未寫入磁盤中的數據,仍在block塊中的數據

完整的調用方式為:

# 不跳過內存中的數據,即同時備份內存中的數據
curl -XPOST http://127.0.0.1:9090/api/v2/admin/tsdb/snapshot?skip_head=false
# 跳過內存中的數據
curl -XPOST http://127.0.0.1:9090/api/v2/admin/tsdb/snapshot?skip_head=true

 三、數據還原

  利用api方式制作成snapshot后,還原時將snapshot中的文件覆蓋到data目錄下,重啟prometheus即可!

  添加定時備份任務(每周日3點備份)

crontable -e                              #注意時區,修改完時區后,需要重啟 crontab    systemctl  restart cron

0 3 * * 7 sudo /usr/bin/curl -XPOST -I http://127.0.0.1:9090/api/v1/admin/tsdb/snapshot >> /home/bill/prometheusbackup.log


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM