Prometheus學習系列(二十四)之存儲

Prometheus包括一個本地磁盤時間序列數據庫,但也可選擇與遠程存儲系統集成。git

1、本地存儲

Prometheus的本地時間序列數據庫以自定義格式在磁盤上存儲時間序列數據。github

1.1 磁盤佈局

攝取的樣本分爲兩小時的塊。每一個兩小時的塊包含一個目錄,其中包含一個或多個塊文件,其中包含該時間窗口的全部時間序列樣本,以及元數據文件和索引文件(將度量標準名稱和標籤索引到塊文件中的時間序列) )。經過API刪除系列時,刪除記錄存儲在單獨的邏輯刪除文件中(而不是當即從塊文件中刪除數據)。數據庫

當前傳入樣本的塊保存在內存中,但還沒有徹底保留。經過預寫日誌(WAL)防止崩潰,能夠在崩潰後從新啓動Prometheus服務器時重放。預寫日誌文件以128MB段存儲在wal目錄中。這些文件包含還沒有壓縮的原始數據,所以它們比常規塊文件大得多。 Prometheus將保留至少3個預寫日誌文件,可是高流量服務器可能會看到三個以上的WAL文件,由於它須要保留至少兩個小時的原始數據。json

Prometheus服務器的數據目錄的目錄結構以下所示:安全

./data/01BKGV7JBM69T2G1BGBGM6KB12
./data/01BKGV7JBM69T2G1BGBGM6KB12/meta.json
./data/01BKGTZQ1SYQJTR4PB43C8PD98
./data/01BKGTZQ1SYQJTR4PB43C8PD98/meta.json
./data/01BKGTZQ1SYQJTR4PB43C8PD98/index
./data/01BKGTZQ1SYQJTR4PB43C8PD98/chunks
./data/01BKGTZQ1SYQJTR4PB43C8PD98/chunks/000001
./data/01BKGTZQ1SYQJTR4PB43C8PD98/tombstones
./data/01BKGTZQ1HHWHV8FBJXW1Y3W0K
./data/01BKGTZQ1HHWHV8FBJXW1Y3W0K/meta.json
./data/01BKGV7JC0RY8A6MACW02A2PJD
./data/01BKGV7JC0RY8A6MACW02A2PJD/meta.json
./data/01BKGV7JC0RY8A6MACW02A2PJD/index
./data/01BKGV7JC0RY8A6MACW02A2PJD/chunks
./data/01BKGV7JC0RY8A6MACW02A2PJD/chunks/000001
./data/01BKGV7JC0RY8A6MACW02A2PJD/tombstones
./data/wal/00000000
./data/wal/00000001
./data/wal/00000002
複製代碼

最初的兩小時塊最終會在後臺壓縮成更長的塊。bash

請注意,本地存儲的限制是它不是羣集或複製的。 所以,面對磁盤或節點中斷,它不是任意可擴展的或持久的,所以應該被視爲更近期數據的短暫滑動窗口。 可是,若是您的耐久性要求不嚴格,您仍能夠成功地在本地存儲中存儲多達數年的數據。服務器

有關文件格式的更多詳細信息,請參閱TSDB格式app

2、運營方面

Prometheus有幾個標誌,容許配置本地存儲。 最重要的是:分佈式

  • --storage.tsdb.path:這決定了Prometheus寫入數據庫的位置。 默認爲data/
  • --storage.tsdb.retention.time:這決定了什麼時候刪除舊數據。 默認爲15d。 若是此標誌設置爲默認值之外的任何值,則覆蓋storage.tsdb.retention
  • --storage.tsdb.retention.size:[EXPERIMENTAL]這肯定了存儲塊可使用的最大字節數(請注意,這不包括WAL大小,這可能很大)。 最先的數據將被刪除。 默認爲0或禁用。 此標誌是實驗性的,能夠在未來的版本中進行更改。 支持的單位:KB,MB,GB,PB。 例如:「512MB」
  • --storage.tsdb.retention:不推薦使用此標誌,而使用storage.tsdb.retention.time

平均而言,Prometheus每一個樣本僅使用大約1-2個字節。 所以,要規劃Prometheus服務器的容量,您可使用粗略的公式:佈局

needed_disk_space = retention_time_seconds * ingested_samples_per_second * bytes_per_sample

要調整每秒攝取樣本的速率,您能夠減小抓取的時間序列數(每一個目標的目標更少或更少的系列),或者能夠增長刮擦間隔。然而,因爲一系列樣品的壓縮,減小系列數可能更有效。

若是您的本地存儲因任何緣由而損壞,最好的辦法是關閉Prometheus並刪除整個存儲目錄。 Prometheus的本地存儲不支持非POSIX兼容的文件系統,可能會發生損壞,沒法恢復。 NFS只是潛在的POSIX,大多數實現都不是。您能夠嘗試刪除單個塊目錄以解決問題,這意味着每一個塊目錄丟失大約兩個小時的數據時間窗口。一樣,普羅米修斯的本地存儲並不意味着持久的長期存儲。

若是同時指定了時間和大小保留策略,則在該時刻將使用先觸發的策略。

3、遠程存儲集成

Prometheus的本地存儲在可擴展性和耐用性方面受到單個節點的限制。 Prometheus沒有嘗試解決Prometheus自己的集羣存儲問題,而是提供了一組容許與遠程存儲系統集成的接口。

3.1 概述

rometheus以兩種方式與遠程存儲系統集成:

Prometheus能夠以標準格式將其提取的樣本寫入遠程URL。 Prometheus能夠以標準格式從遠程URL讀取(返回)樣本數據。

url

讀寫協議都使用基於HTTP的snappy壓縮協議緩衝區編碼。這些協議還沒有被視爲穩定的API,而且可能會在未來更改成使用gRPC over HTTP/2,此時能夠安全地假設Prometheus和遠程存儲之間的全部躍點都支持HTTP/2。

有關在Prometheus中配置遠程存儲集成的詳細信息,請參閱Prometheus配置文檔的遠程寫入遠程讀取部分。

有關請求和響應消息的詳細信息,請參閱遠程存儲協議緩衝區定義。

請注意,在讀取路徑上,Prometheus僅從遠程端獲取一組標籤選擇器和時間範圍的原始系列數據。對原始數據的全部PromQL評估仍然發生在Prometheus自己。這意味着遠程讀取查詢具備必定的可伸縮性限制,由於須要首先將全部必需的數據加載到查詢Prometheus服務器中,而後在那裏進行處理。可是,支持PromQL的徹底分佈式評估暫時被認爲是不可行的。

3.2 現有的集成

要了解有關與遠程存儲系統的現有集成的更多信息,請參閱Integrations文檔

4、連接

Prometheus官網地址:prometheus.io/ 個人Github:github.com/Alrights/pr…

相關文章
相關標籤/搜索