zkat’s diary

技術ブログ

Influxdbでpercentileを計算する

組み込みの関数、percentileがinfluxdbに存在するので簡単に計算することができます。

docs.influxdata.com

適当なデータを積んで、計算してみます。 あるサーバーへのRTTを測定していることを想定し、以下のようなデータを適当に作りました。

insert testdb,server=target1,addr=v4,proto=tcp measured=98.4236389454876
insert testdb,server=target1,addr=v4,proto=tcp measured=49.02986276817023
insert testdb,server=target1,addr=v4,proto=tcp measured=73.68319133987919
insert testdb,server=target1,addr=v4,proto=udp measured=14.515447132468166
insert testdb,server=target1,addr=v4,proto=udp measured=10.153058203214846
insert testdb,server=target1,addr=v4,proto=udp measured=13.858574248282208
insert testdb,server=target1,addr=v6,proto=tcp measured=37.193169776622106
insert testdb,server=target1,addr=v6,proto=tcp measured=75.22886073245671
insert testdb,server=target1,addr=v6,proto=tcp measured=6.350597491749054
insert testdb,server=target1,addr=v6,proto=udp measured=9.58538941785223
insert testdb,server=target1,addr=v6,proto=udp measured=14.100650500638428
insert testdb,server=target1,addr=v6,proto=udp measured=15.64195452574981

20パーセンタイルと50パーセンタイルを計算してみます。

> select percentile(measured, 20) from testdb group by proto
name: testdb
tags: proto=tcp
time                percentile
----                ----------
1577766044022027112 6.350597491749054

name: testdb
tags: proto=udp
time                percentile
----                ----------
1577766044050092539 9.58538941785223


> select percentile(measured, 50) from testdb group by proto
name: testdb
tags: proto=tcp
time                percentile
----                ----------
1577766043809580444 49.02986276817023

name: testdb
tags: proto=udp
time                percentile
----                ----------
1577766043931028528 13.858574248282208

10パーセンタイルで計算して結果をgnuplotで図示してみます。横軸はlogスケールで示しています。

f:id:zkat:20191231133754p:plain
influxdb-percentile