天天看點

Prometheus學習(九)之Prometheus 存儲

目錄

0.前言

1.存儲

1.1磁盤布局

1.2壓縮方面

1.3營運方面

1.4遠端存儲內建

1.4.1概述

1.4.2現有內建

本文來自prometheus官網手冊和prometheus簡介

prometheus是一個本地磁盤時間序列資料庫,但也可選擇與遠端存儲系統內建,其本地時間序列資料庫以自定義格式在磁盤上存儲時間序列資料。

采集的樣本按每兩個小時的時間段儲存到一個目錄,該目錄包含一個或多個塊檔案,該檔案包含該時間視窗的所有時間序列樣本,以及中繼資料檔案和索引檔案(用于将度量名稱和标簽索引到塊檔案中的時間序列)。通過api删除系列時,删除記錄存儲在單獨的邏輯删除檔案中(而不是立即從塊檔案中删除資料)

目前傳入樣本的塊儲存在記憶體中,但尚未完全保留。通過預寫日志(wal)防止崩潰,可以在崩潰後重新啟動prometheus伺服器時重放。預寫日志檔案以128mb段存儲在wal目錄中。這些檔案包含尚未壓縮的原始資料,是以它們比正常塊檔案大得多。 prometheus将保留至少3個預寫日志檔案,但是高流量伺服器可能會看到三個以上的wal檔案,因為它需要保留至少兩個小時的原始資料。

prometheus伺服器的資料目錄的目錄結構如下所示:

注意,本地存儲的局限性在于它不是叢集或複制的。 是以,面對磁盤或節點中斷,它不是任意可伸縮的或持久的,應該像對待任何其他類型的單節點資料庫一樣對待它。 建議将raid用于磁盤可用性,快照用于備份,容量規劃等,以提高耐用性。 通過适當的存儲耐久性和計劃,可以在本地存儲中存儲多年的資料。

或者,可以通過遠端讀/寫api使用外部存儲。 這些系統在耐用性,性能和效率上差異很大,是以需要仔細評估。有關檔案格式的更多詳細資訊,請參見tsdb格式。

最初的兩個小時的塊最終會在背景壓縮為更長的塊。壓縮将建立較大的塊,按最多保留時間的10%,或21天,以較小者為準。

prometheus具有幾個允許配置本地存儲的标志。最重要的是:

平均而言,prometheus每個樣本僅使用大約1-2個位元組。 是以,要計劃prometheus伺服器的容量,可以使用以下粗略公式:

要調整每秒采集樣本的速率,您可以減少抓取的時間序列數(每個目标的目标更少或更少的系列),或者可以增加抓取時間間隔。但是,由于壓縮序列中的樣本,減少序列數可能更有效。

如果您的本地存儲由于某種原因而損壞,最好的選擇是關閉prometheus并删除整個存儲目錄。 prometheus的本地存儲不支援不相容posix的檔案系統,可能會發生損壞,無法恢複。 nfs僅是潛在的posix,大多數實作不是。您可以嘗試删除單個塊目錄來解決該問題,這意味着每個塊目錄将損失大約兩個小時的資料時間視窗。同樣,prometheus的本地存儲并不意味着持久的長期存儲。

如果同時指定了時間和大小保留政策,則在那一刻将使用第一個觸發的政策。過期的塊清除将在背景計劃中進行。删除過期的資料塊可能最多需要兩個小時。過期的塊在清除之前必須完全過期。

prometheus的本地存儲在可伸縮性和持久性方面受到單個節點的限制。 prometheus并沒有嘗試解決prometheus本身中的群集存儲,而是提供了一組允許與遠端存儲系統內建的接口。

prometheus通過兩種方式與遠端存儲系統內建:

prometheus可以将提取的樣本以标準格式寫入遠端url。

prometheus可以以标準化格式從遠端url讀取(傳回)樣本資料。

Prometheus學習(九)之Prometheus 存儲

讀寫協定都使用基于http的快速壓縮協定緩沖區編碼。該協定尚未被認為是穩定的api,當可以安全地假定prometheus和遠端存儲之間的所有躍點都支援http2.0時,該協定将來可能會更改為在http2.0上使用grpc。

有關在prometheus中配置遠端存儲內建的詳細資訊,請參閱prometheus配置文檔的“遠端寫入”和“遠端讀取”部分,有關請求和響應消息的詳細資訊,請參閱遠端存儲協定緩沖區定義。

注意,在讀取路徑上,prometheus僅從遠端擷取一組标簽選擇器和時間範圍的原始系列資料。 promql對原始資料的所有評估仍然在prometheus本身中進行。這意味着遠端讀取查詢具有一定的可伸縮性限制,因為所有必需的資料都需要先加載到查詢的prometheus伺服器中,然後在那裡進行處理。但是,支援promql的完全分布式評估暫時被認為是不可行的。

要了解有關與遠端存儲系統的現有內建的更多資訊,請參閱內建文檔。

繼續閱讀