ytyou / ticktock

TickTockDB is an OpenTSDB-like time series database, with much better performance.
GNU General Public License v3.0
72 stars 8 forks source link

basic query test cases - single data point in a time series #42

Closed ylin30 closed 1 year ago

ylin30 commented 1 year ago

This is a list of UTs to cover very basic query scenarios. It is not complete, to be added. Two issues are reported at the end of the ticket.

TT-dev: 512624f1c2e36ba836e86017d0b87ceecddbc753 (future release: 0.11.6)

ticktock@546c164b2d87:~/ticktock$ ./bin/tt -c conf/tt.conf --http.server.port 6182,6183 --http.listener.count 2,2 &

Scenarios: Just add a data point with 2 tag. Then issue queries with a combination of 3 parameters, e.g., m=avg:1m-avg:test.cpu.idle

  1. Aggregator (avg, sum, count)
  2. Downsample (1m-avg, 1m-sum, 1m-count)
  3. No Downsample

Steps:

  1. Add a data point with 2 tags. [Yi-MBP /]$ curl -XPOST 'http://192.168.1.41:6182/api/put' -d 'put test.cpu.idle 1679757000 100 host=aaa cpu=0'

  2. m=avg:1m-avg:test.cpu.idle{host=aaa,cpu=0} [Yi-MBP ~]$ curl 'http://192.168.1.41:6182/api/query?start=1679757000&end=1679757700&m=avg:1m-avg:test.cpu.idle\{host=aaa,cpu=0\}' [{"metric":"test.cpu.idle","tags":{"cpu":"0","host":"aaa"},"aggregateTags":[],"dps":{"1679757000":100.0}}]

  3. m=avg:1m-sum:test.cpu.idle{host=aaa,cpu=0} [Yi-MBP ~]$ curl 'http://192.168.1.41:6182/api/query?start=1679757000&end=1679757700&m=avg:1m-sum:test.cpu.idle\{host=aaa,cpu=0\}' [{"metric":"test.cpu.idle","tags":{"cpu":"0","host":"aaa"},"aggregateTags":[],"dps":{"1679757000":100.0}}]

  4. m=avg:1m-count:test.cpu.idle{host=aaa,cpu=0} [Yi-MBP ~]$ curl 'http://192.168.1.41:6182/api/query?start=1679757000&end=1679757700&m=avg:1m-count:test.cpu.idle\{host=aaa,cpu=0\}' [{"metric":"test.cpu.idle","tags":{"cpu":"0","host":"aaa"},"aggregateTags":[],"dps":{"1679757000":1.0}}]

  5. m=sum:1m-avg:test.cpu.idle{host=aaa,cpu=0} [Yi-MBP ~]$ curl 'http://192.168.1.41:6182/api/query?start=1679757000&end=1679757700&m=sum:1m-avg:test.cpu.idle\{host=aaa,cpu=0\}' [{"metric":"test.cpu.idle","tags":{"cpu":"0","host":"aaa"},"aggregateTags":[],"dps":{"1679757000":100.0}}]

  6. m=sum:1m-sum:test.cpu.idle{host=aaa,cpu=0} [Yi-MBP ~]$ curl 'http://192.168.1.41:6182/api/query?start=1679757000&end=1679757700&m=sum:1m-sum:test.cpu.idle\{host=aaa,cpu=0\}' [{"metric":"test.cpu.idle","tags":{"cpu":"0","host":"aaa"},"aggregateTags":[],"dps":{"1679757000":100.0}}]

  7. m=sum:1m-count:test.cpu.idle{host=aaa,cpu=0} [Yi-MBP ~]$ curl 'http://192.168.1.41:6182/api/query?start=1679757000&end=1679757700&m=sum:1m-count:test.cpu.idle\{host=aaa,cpu=0\}' [{"metric":"test.cpu.idle","tags":{"cpu":"0","host":"aaa"},"aggregateTags":[],"dps":{"1679757000":1.0}}]

  8. m=count:1m-avg:test.cpu.idle{host=aaa,cpu=0} [Yi-MBP ~]$ curl 'http://192.168.1.41:6182/api/query?start=1679757000&end=1679757700&m=count:1m-avg:test.cpu.idle\{host=aaa,cpu=0\}' [{"metric":"test.cpu.idle","tags":{"cpu":"0","host":"aaa"},"aggregateTags":[],"dps":{"1679757000":1.0}}]

  9. m=count:1m-sum:test.cpu.idle{host=aaa,cpu=0} [Yi-MBP ~]$ curl 'http://192.168.1.41:6182/api/query?start=1679757000&end=1679757700&m=count:1m-sum:test.cpu.idle\{host=aaa,cpu=0\}' [{"metric":"test.cpu.idle","tags":{"cpu":"0","host":"aaa"},"aggregateTags":[],"dps":{"1679757000":1.0}}]

  10. m=count:1m-count:test.cpu.idle{host=aaa,cpu=0} [Yi-MBP ~]$ curl 'http://192.168.1.41:6182/api/query?start=1679757000&end=1679757700&m=count:1m-count:test.cpu.idle\{host=aaa,cpu=0\}' [{"metric":"test.cpu.idle","tags":{"cpu":"0","host":"aaa"},"aggregateTags":[],"dps":{"1679757000":1.0}}]

  11. m=avg:test.cpu.idle{host=aaa,cpu=0} [Yi-MBP ~]$ curl 'http://192.168.1.41:6182/api/query?start=1679757000&end=1679757700&m=avg:test.cpu.idle\{host=aaa,cpu=0\}' [{"metric":"test.cpu.idle","tags":{"cpu":"0","host":"aaa"},"aggregateTags":[],"dps":{"1679757000":100.0}}]

  12. m=sum:test.cpu.idle{host=aaa,cpu=0} [Yi-MBP ~]$ curl 'http://192.168.1.41:6182/api/query?start=1679757000&end=1679757700&m=sum:test.cpu.idle\{host=aaa,cpu=0\}' [{"metric":"test.cpu.idle","tags":{"cpu":"0","host":"aaa"},"aggregateTags":[],"dps":{"1679757000":100.0}}]

  13. m=count:test.cpu.idle{host=aaa,cpu=0} [Yi-MBP ~]$ curl 'http://192.168.1.41:6182/api/query?start=1679757000&end=1679757700&m=count:test.cpu.idle\{host=aaa,cpu=0\}' [{"metric":"test.cpu.idle","tags":{"cpu":"0","host":"aaa"},"aggregateTags":[],"dps":{"1679757000":1.0}}]

Issue 1: Interestingly: If using coun or count2, the result still works, i.e., 1.0.

[Yi-MBP ~]$ curl 'http://192.168.1.41:6182/api/query?start=1679757000&end=1679757700&m=coun:test.cpu.idle\{host=aaa,cpu=0\}'
[{"metric":"test.cpu.idle","tags":{"cpu":"0","host":"aaa"},"aggregateTags":[],"dps":{"1679757000":1.0}}]
[Yi-MBP ~]$ curl 'http://192.168.1.41:6182/api/query?start=1679757000&end=1679757700&m=count2:test.cpu.idle\{host=aaa,cpu=0\}'
[{"metric":"test.cpu.idle","tags":{"cpu":"0","host":"aaa"},"aggregateTags":[],"dps":{"1679757000":1.0}}]
ylin30 commented 1 year ago

Next, let's add another data point with same tags at the same timestamp, except with a different value 200. We expect that the previous data point will be overwritten.

[Yi-MBP ~]$ curl -XPOST 'http://192.168.1.41:6182/api/put' -d 'put test.cpu.idle 1679757000 200 host=aaa cpu=0'

All 13 test cases above are correct, including Grafana, except Issue 2: if we mis-spelled the aggregator, queries still return values. It is excepted that the query should fail.

[Yi-MBP ~]$ curl 'http://192.168.1.41:6182/api/query?start=1679757000&end=1679757700&m=coun:1m-max:test.cpu.idle\{host=aaa,cpu=0\}'
[{"metric":"test.cpu.idle","tags":{"cpu":"0","host":"aaa"},"aggregateTags":[],"dps":{"1679757000":200.0}}][Yi-MBP ~]$
[Yi-MBP ~]$
[Yi-MBP ~]$
[Yi-MBP ~]$ curl 'http://192.168.1.41:6182/api/query?start=1679757000&end=1679757700&m=coun:test.cpu.idle\{host=aaa,cpu=0\}'
[{"metric":"test.cpu.idle","tags":{"cpu":"0","host":"aaa"},"aggregateTags":[],"dps":{"1679757000":1.0}}][Yi-MBP ~]$
[Yi-MBP ~]$
[Yi-MBP ~]$
[Yi-MBP ~]$ curl 'http://192.168.1.41:6182/api/query?start=1679757000&end=1679757700&m=av:test.cpu.idle\{host=aaa,cpu=0\}'
[{"metric":"test.cpu.idle","tags":{"cpu":"0","host":"aaa"},"aggregateTags":[],"dps":{"1679757000":200.0}}][Yi-MBP ~]$
[Yi-MBP ~]$
[Yi-MBP ~]$
[Yi-MBP ~]$ curl 'http://192.168.1.41:6182/api/query?start=1679757000&end=1679757700&m=av:1m-avg:test.cpu.idle\{host=aaa,cpu=0\}'
[{"metric":"test.cpu.idle","tags":{"cpu":"0","host":"aaa"},"aggregateTags":[],"dps":{"1679757000":200.0}}][Yi-MBP ~]$
[Yi-MBP ~]$
[Yi-MBP ~]$
[Yi-MBP ~]$ curl 'http://192.168.1.41:6182/api/query?start=1679757000&end=1679757700&m=sum1:1m-avg:test.cpu.idle\{host=aaa,cpu=0\}'
[{"metric":"test.cpu.idle","tags":{"cpu":"0","host":"aaa"},"aggregateTags":[],"dps":{"1679757000":200.0}}][Yi-MBP ~]$
[Yi-MBP ~]$

or mis-spelled downsampling aggregator, queries still succeed.

[Yi-MBP ~]$ curl 'http://192.168.1.41:6182/api/query?start=1679757000&end=1679757700&m=sum:1m-avg1:test.cpu.idle\{host=aaa,cpu=0\}'
[{"metric":"test.cpu.idle","tags":{"cpu":"0","host":"aaa"},"aggregateTags":[],"dps":{"1679757000":200.0}}]
ylin30 commented 1 year ago

Next, let's add a new data point at 30 second later than 1679757000 with same tags and with value 300.

[Yi-MBP ~]$ curl -XPOST 'http://192.168.1.41:6182/api/put' -d 'put test.cpu.idle 1679757030 300 host=aaa cpu=0'

Repeat all the 13 cases. All are correct. No new issues are found.

Let's extend the test cases to cover downsample aggregators (min, max, p50, p75, p90, p99, p999, first, last, dev).

[Yi-MBP ~]$ curl 'http://192.168.1.41:6182/api/query?start=1679757000&m=avg:1m-max:test.cpu.idle\{host=aaa,cpu=0\}'
[{"metric":"test.cpu.idle","tags":{"cpu":"0","host":"aaa"},"aggregateTags":[],"dps":{"1679757000":300.0}}][Yi-MBP ~]$
[Yi-MBP ~]$
[Yi-MBP ~]$
[Yi-MBP ~]$ curl 'http://192.168.1.41:6182/api/query?start=1679757000&m=avg:1m-min:test.cpu.idle\{host=aaa,cpu=0\}'
[{"metric":"test.cpu.idle","tags":{"cpu":"0","host":"aaa"},"aggregateTags":[],"dps":{"1679757000":200.0}}][Yi-MBP ~]$
[Yi-MBP ~]$
[Yi-MBP ~]$
[Yi-MBP ~]$ curl 'http://192.168.1.41:6182/api/query?start=1679757000&m=avg:1m-p50:test.cpu.idle\{host=aaa,cpu=0\}'
[{"metric":"test.cpu.idle","tags":{"cpu":"0","host":"aaa"},"aggregateTags":[],"dps":{"1679757000":250.0}}][Yi-MBP ~]$
[Yi-MBP ~]$
[Yi-MBP ~]$ curl 'http://192.168.1.41:6182/api/query?start=1679757000&m=avg:1m-p90:test.cpu.idle\{host=aaa,cpu=0\}'
[{"metric":"test.cpu.idle","tags":{"cpu":"0","host":"aaa"},"aggregateTags":[],"dps":{"1679757000":300.0}}][Yi-MBP ~]$
[Yi-MBP ~]$
[Yi-MBP ~]$ curl 'http://192.168.1.41:6182/api/query?start=1679757000&m=avg:1m-p99:test.cpu.idle\{host=aaa,cpu=0\}'
[{"metric":"test.cpu.idle","tags":{"cpu":"0","host":"aaa"},"aggregateTags":[],"dps":{"1679757000":300.0}}][Yi-MBP ~]$
[Yi-MBP ~]$
[Yi-MBP ~]$ curl 'http://192.168.1.41:6182/api/query?start=1679757000&m=avg:1m-first:test.cpu.idle\{host=aaa,cpu=0\}'
[{"metric":"test.cpu.idle","tags":{"cpu":"0","host":"aaa"},"aggregateTags":[],"dps":{"1679757000":200.0}}][Yi-MBP ~]$
[Yi-MBP ~]$
[Yi-MBP ~]$ curl 'http://192.168.1.41:6182/api/query?start=1679757000&m=avg:1m-last:test.cpu.idle\{host=aaa,cpu=0\}'
[{"metric":"test.cpu.idle","tags":{"cpu":"0","host":"aaa"},"aggregateTags":[],"dps":{"1679757000":300.0}}][Yi-MBP ~]$
[Yi-MBP ~]$
[Yi-MBP ~]$ curl 'http://192.168.1.41:6182/api/query?start=1679757000&m=avg:1m-p95:test.cpu.idle\{host=aaa,cpu=0\}'
[{"metric":"test.cpu.idle","tags":{"cpu":"0","host":"aaa"},"aggregateTags":[],"dps":{"1679757000":300.0}}][Yi-MBP ~]$
[Yi-MBP ~]$
[Yi-MBP ~]$ curl 'http://192.168.1.41:6182/api/query?start=1679757000&m=avg:1m-p99:test.cpu.idle\{host=aaa,cpu=0\}'
[{"metric":"test.cpu.idle","tags":{"cpu":"0","host":"aaa"},"aggregateTags":[],"dps":{"1679757000":300.0}}][Yi-MBP ~]$
[Yi-MBP ~]$
[Yi-MBP ~]$ curl 'http://192.168.1.41:6182/api/query?start=1679757000&m=avg:1m-p999:test.cpu.idle\{host=aaa,cpu=0\}'
[{"metric":"test.cpu.idle","tags":{"cpu":"0","host":"aaa"},"aggregateTags":[],"dps":{"1679757000":300.0}}]
[Yi-MBP ~]$
[Yi-MBP ~]$ curl 'http://192.168.1.41:6182/api/query?start=1679757000&m=avg:1m-dev:test.cpu.idle\{host=aaa,cpu=0\}'
[{"metric":"test.cpu.idle","tags":{"cpu":"0","host":"aaa"},"aggregateTags":[],"dps":{"1679757000":50.0}}]

Issue 3: All are correct except p50 which returns value=250. Shouldn't it be either 200 or 300? Not 100% sure what p50 really refers to.

[Yi-MBP ~]$ curl 'http://192.168.1.41:6182/api/query?start=1679757000&m=avg:1m-p50:test.cpu.idle\{host=aaa,cpu=0\}'
[{"metric":"test.cpu.idle","tags":{"cpu":"0","host":"aaa"},"aggregateTags":[],"dps":{"1679757000":250.0}}]
ylin30 commented 1 year ago

Now, let's add an OOO data point.

[Yi-MBP ~]$ curl -XPOST 'http://192.168.1.41:6182/api/put' -d 'put test.cpu.idle 1679756930 400 host=aaa cpu=0'

All test cases are correct. No new issues are found!

ytyou commented 1 year ago

Issue #2: You disabled downsample. Without downsample, 100.0 should be the correct answer. On Monday, March 27, 2023 at 01:13:00 PM PDT, Yi Lin @.***> wrote:

Now, let's add an OOO data point.

[Yi-MBP ~]$ curl -XPOST 'http://192.168.1.41:6182/api/put' -d 'put test.cpu.idle 1679756930 400 host=aaa cpu=0'

All test cases are correct. No new issues are found!

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you were assigned.Message ID: @.***>

ylin30 commented 1 year ago

Now, add another data point in a different time series, host=aaa, cpu=1

[Yi-MBP ~]$ curl -XPOST 'http://192.168.1.41:6182/api/put' -d 'put test.cpu.idle 1679757000 500 host=aaa cpu=1'

Repeat the 13 test cases of query above without cpu=* tag. No new issues found! All are correct!

[Yi-MBP ~]$ curl 'http://192.168.1.41:6182/api/query?start=1679756900&end=1679757100&m=avg:1m-avg:test.cpu.idle\{host=aaa\}'
[{"metric":"test.cpu.idle","tags":{"host":"aaa"},"aggregateTags":["cpu"],"dps":{"1679757000":375.0}}][Yi-MBP ~]$
[Yi-MBP ~]$
[Yi-MBP ~]$
[Yi-MBP ~]$
[Yi-MBP ~]$ curl 'http://192.168.1.41:6182/api/query?start=1679756900&end=1679757100&m=sum:1m-avg:test.cpu.idle\{host=aaa\}'
[{"metric":"test.cpu.idle","tags":{"host":"aaa"},"aggregateTags":["cpu"],"dps":{"1679757000":750.0}}][Yi-MBP ~]$
[Yi-MBP ~]$
[Yi-MBP ~]$ curl 'http://192.168.1.41:6182/api/query?start=1679756900&end=1679757100&m=avg:1m-sum:test.cpu.idle\{host=aaa\}'
[{"metric":"test.cpu.idle","tags":{"host":"aaa"},"aggregateTags":["cpu"],"dps":{"1679757000":500.0}}][Yi-MBP ~]$
[Yi-MBP ~]$
[Yi-MBP ~]$
[Yi-MBP ~]$ curl 'http://192.168.1.41:6182/api/query?start=1679756900&end=1679757100&m=avg:1m-count:test.cpu.idle\{host=aaa\}'
[{"metric":"test.cpu.idle","tags":{"host":"aaa"},"aggregateTags":["cpu"],"dps":{"1679757000":1.5}}][Yi-MBP ~]$
[Yi-MBP ~]$
[Yi-MBP ~]$
[Yi-MBP ~]$ curl 'http://192.168.1.41:6182/api/query?start=1679756900&end=1679757100&m=sum:1m-count:test.cpu.idle\{host=aaa\}'
[{"metric":"test.cpu.idle","tags":{"host":"aaa"},"aggregateTags":["cpu"],"dps":{"1679757000":3.0}}][Yi-MBP ~]$
[Yi-MBP ~]$
[Yi-MBP ~]$ curl 'http://192.168.1.41:6182/api/query?start=1679756900&end=1679757100&m=sum:1m-avg:test.cpu.idle\{host=aaa\}'
[{"metric":"test.cpu.idle","tags":{"host":"aaa"},"aggregateTags":["cpu"],"dps":{"1679757000":750.0}}][Yi-MBP ~]$
[Yi-MBP ~]$
[Yi-MBP ~]$
[Yi-MBP ~]$ curl 'http://192.168.1.41:6182/api/query?start=1679756900&end=1679757100&m=sum:1m-sum:test.cpu.idle\{host=aaa\}'
[{"metric":"test.cpu.idle","tags":{"host":"aaa"},"aggregateTags":["cpu"],"dps":{"1679757000":1000.0}}][Yi-MBP ~]$
[Yi-MBP ~]$
[Yi-MBP ~]$
[Yi-MBP ~]$ curl 'http://192.168.1.41:6182/api/query?start=1679756900&end=1679757100&m=count:1m-avg:test.cpu.idle\{host=aaa\}'
[{"metric":"test.cpu.idle","tags":{"host":"aaa"},"aggregateTags":["cpu"],"dps":{"1679757000":2.0}}][Yi-MBP ~]$
[Yi-MBP ~]$
[Yi-MBP ~]$
[Yi-MBP ~]$ curl 'http://192.168.1.41:6182/api/query?start=1679756900&end=1679757100&m=count:1m-sum:test.cpu.idle\{host=aaa\}'
[{"metric":"test.cpu.idle","tags":{"host":"aaa"},"aggregateTags":["cpu"],"dps":{"1679757000":2.0}}][Yi-MBP ~]$
[Yi-MBP ~]$
[Yi-MBP ~]$ curl 'http://192.168.1.41:6182/api/query?start=1679756900&end=1679757100&m=count:1m-count:test.cpu.idle\{host=aaa\}'
[{"metric":"test.cpu.idle","tags":{"host":"aaa"},"aggregateTags":["cpu"],"dps":{"1679757000":2.0}}][Yi-MBP ~]$
[Yi-MBP ~]$
[Yi-MBP ~]$
[Yi-MBP ~]$ curl 'http://192.168.1.41:6182/api/query?start=1679756900&end=1679757100&m=avg:test.cpu.idle\{host=aaa\}'
[{"metric":"test.cpu.idle","tags":{"host":"aaa"},"aggregateTags":["cpu"],"dps":{"1679756930":400.0,"1679757000":350.0,"1679757030":300.0}}][Yi-MBP ~]$
[Yi-MBP ~]$
[Yi-MBP ~]$
[Yi-MBP ~]$ curl 'http://192.168.1.41:6182/api/query?start=1679756900&end=1679757100&m=sum:test.cpu.idle\{host=aaa\}'
[{"metric":"test.cpu.idle","tags":{"host":"aaa"},"aggregateTags":["cpu"],"dps":{"1679756930":400.0,"1679757000":700.0,"1679757030":300.0}}][Yi-MBP ~]$
[Yi-MBP ~]$
[Yi-MBP ~]$ curl 'http://192.168.1.41:6182/api/query?start=1679756900&end=1679757100&m=count:test.cpu.idle\{host=aaa\}'
[{"metric":"test.cpu.idle","tags":{"host":"aaa"},"aggregateTags":["cpu"],"dps":{"1679756930":1.0,"1679757000":2.0,"1679757030":1.0}}][Yi-MBP ~]$
[Yi-MBP ~]$
[Yi-MBP ~]$
ytyou commented 1 year ago

In v0.11.6, the correct spelling of aggregators will be enforced. The result of p50 looks correct and not an issue.