grafanacon 2019 - influxdb 2table per series _measurement host region _field _time _value mem a...

69
InfluxDB 2.0 Paul Dix @pauldix paul@influxdata.com

Upload: others

Post on 03-Jun-2020

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

InfluxDB 2.0Paul Dix@pauldix

[email protected]

Page 2: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

Biggest Change Since 0.9

Page 3: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

Clean Migration Path

Page 4: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

Compatibility Layer

Page 5: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

• MIT Licensed

• Multi-tenanted

• Telegraf, InfluxDB, Chronograf, Kapacitor rolled into 1

• OSS single server

Page 6: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

• MIT Licensed

• Multi-tenanted

• Telegraf, InfluxDB, Chronograf, Kapacitor rolled into 1

• OSS single server

• Cloud usage based pricing

• Dedicated Cloud

• Enterprise on-premise

Page 7: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

TICK is dead

Page 8: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

Long Live InfluxDB 2.0(and Telegraf)

Page 9: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement
Page 10: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

Consistent Documented APICollection, Write/Query, Streaming & Batch Processing, Dashboards

Page 11: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement
Page 12: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

Officially Supported Client Libraries

Go, Node.js, Ruby, Python, PHP, Java, C#, C, Kotlin

Page 13: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

Visualization Libraries

Page 14: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

Multi-tenant roles

• Operator

• Organization Administrator

• User

Page 15: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

Data Model• Organizations

• Buckets (retention)

• Time series data

• Tasks

• Runs

• Logs

• Dashboards

• Users

• Tokens

• Authorizations

• Protos (templates)

• Scrapers

• Telegrafs

• Labels

Page 16: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

All-in-one but separable

Page 17: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

Demo

Page 18: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

https://influxdata.com/download

Page 19: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

Status

• Alpha 1 released 4 weeks ago

• New alpha build every week

• Alphas deliver features

• Beta once feature complete

• Beta releases for performance and stability

Page 20: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

Thank youPaul Dix@pauldix

[email protected]

Page 21: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

Flux Language Primer

Page 22: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

// get all data from the telegraf dbfrom(bucket:”telegraf/autogen”) // filter that by the last hour |> range(start:-1h) // filter further by series with a specific measurement and field |> filter(fn: (r) => r._measurement == "cpu" and r._field == "usage_system")

Page 23: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

// get all data from the telegraf dbfrom(bucket:”telegraf/autogen”) // filter that by the last hour |> range(start:-1h) // filter further by series with a specific measurement and field |> filter(fn: (r) => r._measurement == "cpu" and r._field == "usage_system")

Comments

Page 24: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

// get all data from the telegraf dbfrom(bucket:”telegraf/autogen”) // filter that by the last hour |> range(start:-1h) // filter further by series with a specific measurement and field |> filter(fn: (r) => r._measurement == "cpu" and r._field == "usage_system")

Named Arguments

Page 25: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

// get all data from the telegraf dbfrom(bucket:”telegraf/autogen”) // filter that by the last hour |> range(start:-1h) // filter further by series with a specific measurement and field |> filter(fn: (r) => r._measurement == "cpu" and r._field == "usage_system")

String Literals

Page 26: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

// get all data from the telegraf dbfrom(bucket:”telegraf/autogen”) // filter that by the last hour |> range(start:-1h) // filter further by series with a specific measurement and field |> filter(fn: (r) => r._measurement == "cpu" and r._field == "usage_system")

Buckets, not DBs

Page 27: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

// get all data from the telegraf dbfrom(bucket:”telegraf/autogen”) // filter that by the last hour |> range(start:-1h) // filter further by series with a specific measurement and field |> filter(fn: (r) => r._measurement == "cpu" and r._field == "usage_system")

Duration Literal

Page 28: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

// get all data from the telegraf dbfrom(bucket:”telegraf/autogen”) // filter that by the last hour |> range(start:2018-11-07T00:00:00Z) // filter further by series with a specific measurement and field |> filter(fn: (r) => r._measurement == "cpu" and r._field == "usage_system")

Time Literal

Page 29: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

// get all data from the telegraf dbfrom(bucket:”telegraf/autogen”) // filter that by the last hour |> range(start:-1h) // filter further by series with a specific measurement and field |> filter(fn: (r) => r._measurement == "cpu" and r._field == "usage_system")

Pipe forward operator

Page 30: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

// get all data from the telegraf dbfrom(bucket:”telegraf/autogen”) // filter that by the last hour |> range(start:-1h) // filter further by series with a specific measurement and field |> filter(fn: (r) => r._measurement == "cpu" and r._field == "usage_system")

Anonymous Function

Page 31: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

// get all data from the telegraf dbfrom(bucket:”telegraf/autogen”) // filter that by the last hour |> range(start:-1h) // filter further by series with a specific measurement and field |> filter(fn: (r) => (r._measurement == "cpu" or r._measurement == “cpu") and r.host == “serverA")

Predicate Function

Page 32: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

// variablessome_int = 23

Page 33: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

// variablessome_int = 23some_float = 23.2

Page 34: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

// variablessome_int = 23some_float = 23.2some_string = “cpu"

Page 35: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

// variablessome_int = 23some_float = 23.2some_string = “cpu"some_duration = 1h

Page 36: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

// variablessome_int = 23some_float = 23.2some_string = “cpu"some_duration = 1hsome_time = 2018-10-10T19:00:00

Page 37: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

// variablessome_int = 23some_float = 23.2some_string = “cpu"some_duration = 1hsome_time = 2018-10-10T19:00:00some_array = [1, 6, 20, 22]

Page 38: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

// variablessome_int = 23some_float = 23.2some_string = “cpu"some_duration = 1hsome_time = 2018-10-10T19:00:00some_array = [1, 6, 20, 22]some_object = {foo: "hello" bar: 22}

Page 39: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

Data Model & Working with Tables

Page 40: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

Example Series

_measurement=mem,host=A,region=west,_field=free _measurement=mem,host=B,region=west,_field=free _measurement=cpu,host=A,region=west,_field=usage_system _measurement=cpu,host=A,region=west,_field=usage_user

Page 41: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

Example Series

_measurement=mem,host=A,region=west,_field=free _measurement=mem,host=B,region=west,_field=free _measurement=cpu,host=A,region=west,_field=usage_system _measurement=cpu,host=A,region=west,_field=usage_user

Measurement

Page 42: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

Example Series

_measurement=mem,host=A,region=west,_field=free _measurement=mem,host=B,region=west,_field=free _measurement=cpu,host=A,region=west,_field=usage_system _measurement=cpu,host=A,region=west,_field=usage_user

Field

Page 43: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

Table

_measurement host region _field _time _valuemem A west free 2018-06-14T09:15:00 10mem A west free 2018-06-14T09:14:50 10

Page 44: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

_measurement host region _field _time _valuemem A west free 2018-06-14T09:15:00 10mem A west free 2018-06-14T09:14:50 10

Column

Page 45: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

_measurement host region _field _time _valuemem A west free 2018-06-14T09:15:00 10mem A west free 2018-06-14T09:14:50 10

Record

Page 46: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

_measurement host region _field _time _valuemem A west free 2018-06-14T09:15:00 10mem A west free 2018-06-14T09:14:50 10

Group Key

_measurement=mem,host=A,region=west,_field=free

Page 47: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

_measurement host region _field _time _valuemem A west free 2018-06-14T09:15:00 10mem A west free 2018-06-14T09:14:50 10

Every record has the same value!

_measurement=mem,host=A,region=west,_field=free

Page 48: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

Table Per Series_measurement host region _field _time _value

mem A west free 2018-06-14T09:15:00 10mem A west free 2018-06-14T09:14:50 11

_measurement host region _field _time _valuemem B west free 2018-06-14T09:15:00 20mem B west free 2018-06-14T09:14:50 22

_measurement host region _field _time _valuecpu A west usage_user 2018-06-14T09:15:00 45cpu A west usage_user 2018-06-14T09:14:50 49

_measurement host region _field _time _valuecpu A west usage_system 2018-06-14T09:15:00 35cpu A west usage_system 2018-06-14T09:14:50 38

Page 49: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

input tables -> function -> output tables

Page 50: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

input tables -> function -> output tables// example queryfrom(db:"telegraf") |> range(start:2018-06-14T09:14:50, start:2018-06-14T09:15:01) |> filter(fn: r => r._measurement == “mem" and r._field == “free”) |> sum()

Page 51: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

input tables -> function -> output tables

What to sum on?

// example queryfrom(db:"telegraf") |> range(start:2018-06-14T09:14:50, start:2018-06-14T09:15:01) |> filter(fn: r => r._measurement == “mem" and r._field == “free”) |> sum()

Page 52: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

input tables -> function -> output tables

Default columns argument

// example queryfrom(db:"telegraf") |> range(start:2018-06-14T09:14:50, start:2018-06-14T09:15:01) |> filter(fn: r => r._measurement == “mem" and r._field == “free”) |> sum(columns: [“_value”])

Page 53: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

input tables -> function -> output tables

_measureme

host region _field _time _valuemem A west free 2018-06-

14T09:110

mem A west free 2018-06-14T09:1

11

_measureme

host region _field _time _valuemem B west free 2018-06-

14T09:1520

mem B west free 2018-06-14T09:14

22

Input in table form

// example queryfrom(db:"telegraf") |> range(start:2018-06-14T09:14:50, start:2018-06-14T09:15:01) |> filter(fn: r => r._measurement == “mem" and r._field == “free”) |> sum()

Page 54: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

input tables -> function -> output tables

_measureme

host region _field _time _valuemem A west free 2018-06-

14T09:110

mem A west free 2018-06-14T09:1

11

_measureme

host region _field _time _valuemem B west free 2018-06-

14T09:1520

mem B west free 2018-06-14T09:14

22

sum()

// example queryfrom(db:"telegraf") |> range(start:2018-06-14T09:14:50, start:2018-06-14T09:15:01) |> filter(fn: r => r._measurement == “mem" and r._field == “free”) |> sum()

Page 55: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

input tables -> function -> output tables// example queryfrom(db:"telegraf") |> range(start:2018-06-14T09:14:50, start:2018-06-14T09:15:01) |> filter(fn: r => r._measurement == “mem" and r._field == “free”) |> sum()

_measureme

host region _field _time _valuemem A west free 2018-06-

14T09:110

mem A west free 2018-06-14T09:1

11

_measureme

host region _field _time _valuemem B west free 2018-06-

14T09:1520

mem B west free 2018-06-14T09:14

22

sum()

_measureme

host region _field _time _valuemem A west free 2018-06-

14T09:121

_measureme

host region _field _time _valuemem B west free 2018-06-

14T09:1542

Page 56: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

N to N table mapping(1 to 1 mapping)

Page 57: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

N to M table mapping

Page 58: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

window// example queryfrom(db:"telegraf") |> range(start:2018-06-14T09:14:30, end:2018-06-14T09:15:01) |> filter(fn: r => r._measurement == “mem" and r._field == “free”) |> window(every:20s)

30s of data (4 samples)

Page 59: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

window// example queryfrom(db:"telegraf") |> range(start:2018-06-14T09:14:30, end:2018-06-14T09:15:01) |> filter(fn: r => r._measurement == “mem" and r._field == “free”) |> window(every:20s)

split into 20s windows

Page 60: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

window

_meas host region _field _time _valumem A west free …14:30 10mem A west free …14:40 11mem A west free …14:50 12mem A west free …15:00 13

_meas host region _field _time _valumem B west free …14:30 20mem B west free …14:40 22mem B west free …14:50 23mem B west free …15:00 24

// example queryfrom(db:"telegraf") |> range(start:2018-06-14T09:14:30, end:2018-06-14T09:15:01) |> filter(fn: r => r._measurement == “mem" and r._field == “free”) |> window(every:20s)

Input

Page 61: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

window

_meas host region _field _time _valumem A west free …14:30 10mem A west free …14:40 11mem A west free …14:50 12mem A west free …15:00 13

_meas host region _field _time _valumem B west free …14:30 20mem B west free …14:40 22mem B west free …14:50 23mem B west free …15:00 24

window( every:20s)

// example queryfrom(db:"telegraf") |> range(start:2018-06-14T09:14:30, end:2018-06-14T09:15:01) |> filter(fn: r => r._measurement == “mem" and r._field == “free”) |> window(every:20s)

Page 62: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

window

_meas host region _field _time _valumem A west free …14:30 10mem A west free …14:40 11mem A west free …14:50 12mem A west free …15:00 13

_meas host region _field _time _valumem B west free …14:30 20mem B west free …14:40 22mem B west free …14:50 23mem B west free …15:00 24

window( every:20s)

// example queryfrom(db:"telegraf") |> range(start:2018-06-14T09:14:30, end:2018-06-14T09:15:01) |> filter(fn: r => r._measurement == “mem" and r._field == “free”) |> window(every:20s) _meas

uremehost region _field _time _valu

emem A west free …14:30 10mem A west free …14:40 11

_measureme

host region _field _time _valuemem B west free …14:50 23

mem B west free …15:00 24

_measureme

host region _field _time _valuemem B west free …14:30 20

mem B west free …14:40 22

_measureme

host region _field _time _valuemem A west free …14:50 12

mem A west free …15:00 13

Page 63: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

window

_meas host region _field _time _valumem A west free …14:30 10mem A west free …14:40 11mem A west free …14:50 12mem A west free …15:00 13

_meas host region _field _time _valumem B west free …14:30 20mem B west free …14:40 22mem B west free …14:50 23mem B west free …15:00 24

window( every:20s)

// example queryfrom(db:"telegraf") |> range(start:2018-06-14T09:14:30, end:2018-06-14T09:15:01) |> filter(fn: r => r._measurement == “mem" and r._field == “free”) |> window(every:20s) _meas

uremehost region _field _time _valu

emem A west free …14:30 10mem A west free …14:40 11

_measureme

host region _field _time _valuemem B west free …14:50 23

mem B west free …15:00 24

_measureme

host region _field _time _valuemem B west free …14:30 20

mem B west free …14:40 22

_measureme

host region _field _time _valuemem A west free …14:50 12

mem A west free …15:00 13

N to M tables

Page 64: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

Window based on time_start and _stop columns

Page 65: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

group// example queryfrom(db:"telegraf") |> range(start:2018-06-14T09:14:30, end:2018-06-14T09:15:01) |> filter(fn: r => r._measurement == “mem" and r._field == “free”) |> group(keys:[“region"])

Page 66: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

group// example queryfrom(db:"telegraf") |> range(start:2018-06-14T09:14:30, end:2018-06-14T09:15:01) |> filter(fn: r => r._measurement == “mem" and r._field == “free”) |> group(keys:[“region"])

new group key

Page 67: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

group

_meas host region _field _time _valumem A west free …14:30 10mem A west free …14:40 11mem A west free …14:50 12mem A west free …15:00 13

_meas host region _field _time _valumem B west free …14:30 20mem B west free …14:40 22mem B west free …14:50 23mem B west free …15:00 24

// example queryfrom(db:"telegraf") |> range(start:2018-06-14T09:14:30, end:2018-06-14T09:15:01) |> filter(fn: r => r._measurement == “mem" and r._field == “free”) |> group(keys:[“region"])

Page 68: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

group

_meas host region _field _time _valumem A west free …14:30 10mem A west free …14:40 11mem A west free …14:50 12mem A west free …15:00 13

_meas host region _field _time _valumem B west free …14:30 20mem B west free …14:40 22mem B west free …14:50 23mem B west free …15:00 24

group( keys:

[“region”])

// example queryfrom(db:"telegraf") |> range(start:2018-06-14T09:14:30, end:2018-06-14T09:15:01) |> filter(fn: r => r._measurement == “mem" and r._field == “free”) |> group(keys:[“region"])

_measureme

host region _field _time _valuemem A west free …14:30 10

mem B west free …14:30 20mem A west free …14:40 11mem B west free …14:40 21mem A west free …14:50 12mem B west free …14:50 22mem B west free …15:00 13mem B west free …15:00 23

N to M tables M == cardinality(group keys)

Page 69: GrafanaCon 2019 - InfluxDB 2Table Per Series _measurement host region _field _time _value mem A west free 2018-06-14T09:15:00 10 mem A west free 2018-06-14T09:14:50 11 _measurement

Group based on columns