官术网_书友最值得收藏!

第3章 數據存儲

3.1 存儲接口

Prometheus提供了兩種存儲方式,分別為本地存儲和遠端存儲。

本地存儲通過Prometheus自帶的時序數據庫將數據保存在本地,從而實現高性能讀寫。但時序數據庫畢竟是非集群的數據庫,這樣就限制了它的存儲容量,無法保存大量的歷史監控數據。為此,Prometheus引入了遠端存儲。

為了適配各種遠端存儲,Prometheus 抽象了一組數據讀寫接口,并通過適配器模式將Prometheus對遠端存儲的讀寫接口轉化為第三方的數據存儲接口,從而擴展了Prometheus存儲大量歷史數據的能力。

Prometheus存儲總共定義了兩組方法,分別用于數據寫入和數據讀取。

這里先介紹數據寫入接口Appender,主要涉及Add、AddFast、Commit和Rollback這4種方法。

Add 方法和 AddFast 方法用于追加樣本數據,請求參數主要是采樣時間和樣本值,如下所述。

◎ Add方法需要根據傳入的標簽通過 Hash算法找到(如果不存在則創建)序列ID,然后將樣本值保存到序列中。

◎ AddFast方法則直接傳入序列 ID,省去了前面進行序列查找或者序列 ID生成的步驟。

Commit 方法用于提交多個 Add 方法或將 AddFast 方法的結果持久化(例如保存到WAL中)。

Rollback方法用于回滾。

接下來講解監控數據的查詢接口Querier。Querier接口主要定義了Select方法,Select方法用于根據給定的標簽查詢對應的時序數據。具體代碼如下:

為了兼容本地存儲和遠端存儲,Prometheus提供了fanout接口,該接口同樣實現了上面的Appender接口。當執行fanout中的方法(如Add)時,fanout接口會先執行本地存儲(primary)的 Add 方法,然后遍歷執行每個遠端存儲(secondaries)的Add方法。當需要獲取Prometheus保存時間最長的監控數據時,也會分別調用本地存儲和遠端存儲的startTime方法,獲取各自的最長保存時間點,選擇最大值作為整個存儲的最長保存時間。

Prometheus連接存儲的示意圖如圖3-1所示。

圖3-1

主站蜘蛛池模板: 新蔡县| 措美县| 南京市| 莱州市| 都兰县| 保德县| 海盐县| 合江县| 三门县| 竹溪县| 达孜县| 石狮市| 沅江市| 武城县| 乌拉特中旗| 灵丘县| 宁阳县| 平罗县| 永胜县| 海阳市| 乌拉特后旗| 旬邑县| 镇坪县| 苏尼特右旗| 怀安县| 沙雅县| 竹北市| 镇康县| 宁阳县| 铁力市| 塔城市| 浦县| 泗水县| 永和县| 安义县| 忻州市| 遵义市| 平度市| 隆子县| 垣曲县| 永修县|