存儲和數據保留
Prometheus 所需的存儲空間與您存儲的時間序列和標簽的數量以及您配置的數據保留量直接相關。需要注意的是,Prometheus 並不是用來作為長期指標存儲的。數據保留時間通常只有幾天,而不是幾周或幾個月。原因是,Prometheus 不會對其存儲的指標進行任何聚合。這很好,因為聚合會稀釋數據,但這也意味着所需的存儲空間隨着時間的推移線性增長而沒有保留。
計算所需存儲空間的一種方法是通過以下查詢來查看 Prometheus 中存儲塊的平均大小:
rate(prometheus_tsdb_compaction_chunk_size_bytes_sum[1h]) / rate(prometheus_tsdb_compaction_chunk_samples_sum[1h])
接下來,找出你每秒的數據攝取率:
rate(prometheus_tsdb_head_samples_appended_total[1h])
然后與保留時間相乘,並添加幾個百分點作為緩沖區:
平均塊大小(以字節為單位) * 每秒的攝取速率 * 保留時間(以秒為單位) * 1.1 = 必需的存儲空間(以字節為單位)
你可以在這篇博客文章中找到更多關於如何計算必要存儲的信息。
https://www.robustperception.io/how-much-disk-space-do-prometheus-blocks-use
你可以在Prometheus 文檔中閱讀更多關於 Prometheus 存儲概念的內容。
https://prometheus.io/docs/prometheus/latest/storage
CPU 和內存的請求和限制
在較大的 Kubernetes 集群中,Prometheus 會消耗大量內存。 Prometheus 需要的內存直接與它存儲的時間序列和標簽的數量以及填充這些標簽的 scrape 間隔有關。
你可以在這個博客文章中找到更多關於如何計算所需內存的信息。
https://www.robustperception.io/how-much-ram-does-prometheus-2-x-need-for-cardinality-and-ingestion
所需的 CPU 數量與您正在執行的查詢數量相關。
長期儲存
Prometheus 並不是為了長期存儲指標,而只用於短期存儲。
為了長期存儲一些或所有的指標,你可以利用 Prometheus 的遠程讀/寫功能將其連接到存儲系統,如Thanos、InfluxDB、M3DB或其他系統。你可以在這篇博客文章中找到一個示例設置。
https://prometheus.io/docs/prometheus/latest/storage/#remote-storage-integrations
https://thanos.io/
https://www.influxdata.com/
https://www.m3db.io/
https://rancher.com/blog/2020/prometheus-metric-federation