prometheus對接influxdb壓測結果


由於prometheus單純依靠本地存儲遠不足以應對長期歷史數據持久化,因此依靠influxdb作為遠端存儲解決以上問題成為一種常見的策略。本次壓測的目的為:一方面比較influxdb與prometheus不同規格下的性能指標,另一方面根據不同的性能指標,選出最優的匹配規格供參考,避免出現一端性能浪費以及一端成為瓶頸的情況。

influxdb規格與性能指標

參考[TSDB for InfluxDB規格測試]的結果,四種規格的Influxdb與相應指標如下:

規格 db timeseries tps qps
2c8g 1 50000 40075.7 0.6
4c16g 1 100000 76587.6 0.6
8c32g 1 200000 123871 1.9
16c64g 1 400000 182279.4 2.3

部署prometheus采取兩種規格8c32g,16c64g。

為了盡量避免網絡延遲對寫入性能指標的影響,以上influxdb實例與prometheus實例均處於同一VPC下,通過內網訪問,內網帶寬峰值:5Gbps

性能摸底:

首次規格匹配選用prometheus(8c32g)與influxdb(16c64g),以influxdb(16c64g)18w的寫入性能為標准,使用Avalanche作為數據源,產生18w/s的數據指標用於prometheus拉取並寫入遠端存儲influxdb。
壓測數據源采用Avalanche數據源,Avalanche具體配置參數如下:

--avaCount=6 --avaBin=/root/prometheus-avalanche/cmd/avalanche --avaMetricCount=5000 --avaSeriesCount=30 --avaValueInt=5 --avaSeriesInt=360000 --avaMetricInt=3000

測試結果:

內存使用量:

  • 8c32g prometheus
    img
  • 16c64g influxdb

img

以上可見,prometheus占用內存較大,其存儲機制為數據每2小時落盤一次,8c32g prometheus內存成為瓶頸,不足以支撐到2小時數據落盤,最終導致prometheus server崩潰。

CPU使用率:

  • 8c32g prometheus

img

  • 16c64g influxdb

img

以上可見,Prometheus cpu占用不大,influxdb cpu使用率近80%,但仍可穩定運行。

網絡流入流出速率:

  • 8c32g prometheus

img

  • 16c64g influxdb

img

綜上所述:

prometheus cpu占用率不大,對內存需求量大。influxdb相反,內存占用不大,cpu需求量大。網絡不是瓶頸,5Gbps帶寬遠足以支撐數據傳輸。以上性能摸底結論:8c32g prometheus內存寫爆,16c64g influxdb可穩定運行。

prometheus(16c64g)+influxdb(16c64g)

同樣以18w/s數據點規格進行寫入,穩定運行36h:

內存使用量:

  • prometheus

img

  • influxdb

img

CPU使用率:

  • prometheus

img

  • Influxdb

img

prometheus(8c32g)+influxdb(8c32g)

以9w/s數據點規格進行寫入,穩定運行36h:

內存使用量:

  • prometheus

img

  • influxdb

img

CPU使用率:

  • prometheus

img

  • influxdb

img

結論:

本次壓測可以看出,prometheus瓶頸在於內存,influxdb的瓶頸在於cpu,內網帶寬不是問題,遠足以支撐數據傳輸。為了避免資源浪費,性能輸出最大化的條件下,建議使用以下兩種規格組合:

  • prometheus(16c64g)+influxdb(16c64g):

在帶寬足夠,平均label數量小於等於15的條件下,可穩定支持18w/s的寫入。

  • prometheus(8c32g)+influxdb(8c32g):

在帶寬足夠,平均label數量小於等於15的條件下,可穩定支持9w/s的寫入。

查詢測試:

本次查詢測試基於JMeter測試工具,主要通過JMeter支持的HTTP Request任務摸版,模擬多用戶並發情景,向Prometheus Server的HTTP API(Localhost:9090/api/vi)發送符合PromQL語義的query,JMeter會搜集相關的query latency等信息。

prometheus(16c64g)+influxdb(16c64g):

  • 1MB/query

img

  • 10MB/query

img

prometheus(8c32g)+influxdb(8c32g)

  • 4MB/query

img


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM