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

posted @ 2022-02-07 10:54  梧桐花落  阅读(1377)  评论(0编辑  收藏  举报