大家好,我是 WeiyiGeek,一個正在向全棧工程師(SecDevOps)前進(jìn)的計算機(jī)技術(shù)愛好者,歡迎各位道友一起學(xué)習(xí)交流、一起進(jìn)步 ,若此文有幫助請點(diǎn)個關(guān)注,后續(xù)追番不迷路 ??。
背景:VictoriaMetrics 理解為一個高性能、高性價比、可擴(kuò)展的時間序列數(shù)據(jù)庫(TSDB)和監(jiān)控解決方案,如果您正在尋找一個速度快、占用資源少、易于管理、又能很好地融入 Prometheus 生態(tài)的時間序列數(shù)據(jù)庫來存儲和查詢監(jiān)控指標(biāo),VictoriaMetrics 是一個非常值得考慮的選擇。
作者即將在【可觀測性監(jiān)控實踐】專欄發(fā)布企業(yè)中監(jiān)控可觀測性入門到落地實踐,希望大家多多支持,此外也可加入作者【全棧工程師修煉指南】知識星球獲取實時專欄文章,和相關(guān)可視化模板更新,以及問題答疑。
為啥需要 Prometheus 數(shù)據(jù)快照?
通過 Prometheus 基本上在一臺機(jī)器上運(yùn)行,若運(yùn)維人員希望備份數(shù)據(jù),或遷移采集的數(shù)據(jù)到其它時序數(shù)據(jù)庫中,例如,此小節(jié)將實踐將 Prometheus 指標(biāo)數(shù)據(jù)遷移到 VictoriaMetrics 的需求。
在 Prometheus 1.x 中,這是一個緩慢且具有破壞性的過程,需要完全重新啟動 Prometheus。好消息是,由于后續(xù)使用了新的存儲引擎,從 Prometheus 2.1 版本開始,添加了一個 API 端點(diǎn)來拍攝快照,讓我們看看如何使用它。
如何創(chuàng)建 Prometheus 數(shù)據(jù)快照?
前提條件,要使用它,您必須在運(yùn)行 Prometheus 時指定啟用 Admin API 端點(diǎn)參數(shù),例如:
$ ./prometheus --storage.tsdb.path=/data/ --web.enable-admin-api
然后, 你可以使用一個簡單的 HTTP POST 請求來請求生產(chǎn)快照,等待幾秒鐘后,它在JSON對象中返回了新快照的名稱,例如
$ curl -XPOST 127.0.0.1:9090/api/v1/admin/tsdb/snapshot
{"status":"success","data":{"name":"20250418T070445Z-3f070b1856d27be8"}}
此時,你將會在數(shù)據(jù)目錄的快照目錄下查看,你會看到這個快照文件。
$?cd?/data/snapshots
$ ls -
drwxr-xr-x ?3 root root 4.0K ?4月18日 15:04 .
drwxr-xr-x 35 root root 4.0K ?4月18日 15:04 ..
drwxr-xr-x 33 root root 4.0K ?4月18日 15:04 20250418T070445Z-3f070b1856d27be8
特別注意:Prometheus 快照由現(xiàn)有塊的硬鏈接和當(dāng)前打開塊的轉(zhuǎn)儲組成,由于使用硬鏈接,這意味著舊塊的快照不會占用額外的磁盤空間,因為磁盤上只有一個副本,但是如果您更改它們,它們的權(quán)限或它們的用戶/組,則可能會破壞 Prometheus 數(shù)據(jù)。當(dāng)你完成數(shù)據(jù)遷移后,你可以?rm -rf
?快照目錄,因為雖然快照最初只占用很少的額外磁盤空間,一旦原始塊被刪除/壓縮,快照就會成為保持磁盤空間使用的東西。
如何將 Prometheus 數(shù)據(jù)遷移到 VictoriaMetrics?
vmctl (VictoriaMetrics Control) 是 VictoriaMetrics 提供的一個命令行工具,它的主要設(shè)計目標(biāo)是在不同的存儲系統(tǒng)之間遷移(migrate )時間序列數(shù)據(jù),vmctl 工具文檔:?https://docs.victoriametrics.com/vmctl/
首先,通過 VictoriaMetrics 官方提供的 vmutils 工具包,來獲取 vmctl 工具包。
# 下載 vmutils 工具包
VERSION=v1.102.0
wget -L https://gh.wygk.eu.org/https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/${VERSION}/vmutils-linux-amd64-${VERSION}.tar.gz
# 解壓工具包,查看包含的組件
tar -zxvf vmutils-linux-amd64-${VERSION}.tar.gz -C /usr/local/bin/
??# vmagent-prod
??# vmalert-prod
??# vmalert-tool-prod
??# vmauth-prod
??# vmbackup-prod
??# vmrestore-prod
??# vmctl-prod
mv /usr/local/bin/vmctl-prod /usr/local/bin/vmctl
# 驗證 vmctl 版本信息
vmctl --version
??# vmctl version vmctl-20240717-185220-tags-v1.102.0-0-g65bb429b81
??# 2025/04/18 15:45:25 Total time: 237.131μs
然后,ctl 工具進(jìn)行 Prometheus 數(shù)據(jù)遷移,更多參數(shù)可執(zhí)行?vmctl prometheus --help
?查看詳細(xì)的幫助信息。
# 語法
NAME:
? ?vmctl prometheus - Migrate time series from Prometheus
USAGE:
? ?vmctl prometheus [command?options]
# 關(guān)鍵參數(shù):
--prom-snapshot value ? ? ? ? ??# 指定 Prometheus 快照目錄.
--prom-concurrency value ? ? ? ?# 并發(fā)運(yùn)行的快照讀取器數(shù)量(默認(rèn)值:1)
--prom-filter-time-start value ?# RFC3339格式的時間過濾器,提供值的開始時間序列 E.g. '2020-01-01T20:07:00Z'
--prom-filter-time-end value ? ?# RFC3339格式的時間過濾器,提供值的結(jié)束時間序列 E.g. '2020-01-01T20:08:00Z'
--prom-filter-label value ? ? ??# 按照匹配的標(biāo)簽提取,E.g. '__name__' will filter timeseries by name.
--prom-filter-label-value value?# 按照指定的標(biāo)簽提取,E.g. ".*"
--vm-concurrency value ? ? ? ? ?# 向VM執(zhí)行導(dǎo)入并發(fā)數(shù)量 (default: 2)
--vm-batch-size value ? ? ? ? ??# 在單次寫入請求中,最多向 VM 目標(biāo)發(fā)送多少數(shù)據(jù)點(diǎn) (default: 200000)
# 例如,遷移 2025-04-17 當(dāng)天的數(shù)據(jù)到 VictoriaMetrics中,讀取并發(fā)數(shù)量為3,導(dǎo)入并發(fā)數(shù)量為1,單次樣本數(shù)量為 200000。
vmctl prometheus
? --prom-snapshot=/data/prometheus/snapshots/20250418T070445Z-3f070b1856d27be8
? --prom-filter-time-start=2025-04-17T00:00:01Z
? --prom-filter-time-end=2025-04-17T23:59:59Z
? --prom-concurrency=3
? --vm-concurrency=1
? --vm-batch-size=200000?
# 執(zhí)行過程信息如下:
??# Prometheus import mode
??# Prometheus snapshot stats:
??# ? blocks found: 31;
??# ? blocks skipped by time filter: 27;
??# ? min time: 1744848000977 (2025-04-17T08:00:00+08:00);
??# ? max time: 1744934400000 (2025-04-18T08:00:00+08:00);
??# ? samples: 22846992;
??# ? series: 28392.
??# * Stats numbers are based on blocks meta info and don't account for applied filters.
??# Found 4 blocks to import. Continue? [Y/n] y
??# VM worker 0:↓ 1580443 samples/s
??# Processing blocks: 4 / 4 [███████████████████████████████████████████████████████████████████████████████████████████████████] 100.00%
??# 2025/04/18 16:16:47 Import finished!
??# 2025/04/18 16:16:47 VictoriaMetrics importer stats:
??# ? idle duration: 995.289323ms;
??# ? time spent while importing: 14.137585359s;
??# ? total samples: 22846888;
??# ? samples/s: 1616038.91;
??# ? total bytes: 440.5 MB;
??# ? bytes/s: 31.2 MB;
??# 2025/04/18 16:16:47 Total time: 24.861138465s
最后,驗證導(dǎo)入的數(shù)據(jù)塊在 VictoriaMetrics 中是否存在。
# export blocks from VictoriaMetrics
curl 127.0.0.1:8428/api/v1/export/native -g -d?'match[]={__name__!=""}'?-o exported_data_block
# check file size
-rw-r--r-- 1 root root 7.2M ?4月18日 16:21 exported_data_block
# verify block content
vmctl verify-block exported_data_block
??# 2025/04/18 16:21:51 verifying block at path="exported_data_block"
??# 2025/04/18 16:21:51 successfully verified block at path="exported_data_block", blockCount=25078
??# 2025/04/18 16:21:51 Total time: 80.108623ms
或者,通過 VictoriaMetrics 自帶的 vmui 工可視化具,來驗證數(shù)據(jù)是否導(dǎo)入成功,例如,作者查詢在IPMI導(dǎo)出器采集的指標(biāo)數(shù)據(jù)?ipmi_bmc_info{job="ipmi_inspur_chassis"}
,請注意查詢時時間,應(yīng)該為指標(biāo)原始采集時間,這一點(diǎn)需要謹(jǐn)記。
weiyigeek.top-驗證導(dǎo)入的指標(biāo)數(shù)據(jù)圖
至此,無需 Prometheus 服務(wù)停機(jī),即可將歷史采集指標(biāo)數(shù)據(jù),遷移到VictoriaMetrics。
當(dāng)然,除了 Prometheus 數(shù)據(jù)遷移,VictoriaMetrics 還支持其它多種數(shù)據(jù)源的遷移,你可以根據(jù)實際環(huán)境選擇其他數(shù)據(jù)源遷移(例如,InfluxDB、Thanos 、Cortex 、OpenTSDB ),參考地址:https://docs.victoriametrics.com/quick-start/#data-migration
若文章寫得不錯,不要吝惜手中轉(zhuǎn)發(fā),點(diǎn)贊、在看,若有疑問的小伙伴,可在評論區(qū)留言你想法喲!