querying prometheus with flux - promcon na 2020 · 2020. 6. 3. · querying prometheus with flux...

114
Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com

Upload: others

Post on 30-Aug-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

Querying Prometheus with Flux (#fluxlang)

Paul Dix@pauldix

[email protected]

Page 2: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language
Page 3: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

• Data-scripting language

• Functional

• MIT Licensed

• Language & Runtime/Engine

Page 4: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

Prometheus users: so what?

Page 5: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

High availability?

Page 6: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

Sharded Data?

Page 7: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

Federation?

Page 8: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language
Page 9: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language
Page 10: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language
Page 11: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language
Page 12: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

subqueries

Page 13: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language
Page 14: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

subqueries recording rules

Page 15: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

Ad hoc exporation

Page 16: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language
Page 17: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

Focus is Strength

Page 18: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

Saying No is an Asset

Page 19: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language
Page 20: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

Liberate the silo!

Page 21: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language
Page 22: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

Language Elements

Page 23: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

// get all data from the telegraf dbfrom(db:"telegraf") // 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 24: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

// get all data from the telegraf dbfrom(db:"telegraf") // 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 25: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

// get all data from the telegraf dbfrom(db:"telegraf") // 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")

Functions

Page 26: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

// get all data from the telegraf dbfrom(db:"telegraf") // 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 27: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

// get all data from the telegraf dbfrom(db:"telegraf") // 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 28: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

// get all data from the telegraf dbfrom(db:"telegraf") // 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 Literal

Page 29: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

// get all data from the telegraf dbfrom(db:"telegraf") // 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 (relative time)

Page 30: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

// get all data from the telegraf dbfrom(db:"telegraf") // filter that by the last hour |> range(start:”2018-08-09T14: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 31: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

// get all data from the telegraf dbfrom(db:"telegraf") // 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 32: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

Operators

+ == != ( ) - < !~ [ ] * > =~ { } / <= = , : % >= <- . |>

Page 33: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

Types

• int

• uint

• float64

• string

• duration

• time

• regex

• array

• object

• function

• namespace

• table

• table stream

Page 34: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

Ways to run Flux - (interpreter, fluxd api server, InfluxDB 1.7 & 2.0)

Page 35: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

Flux builder in Chronograf

Page 36: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

Flux builder in Grafana

Page 37: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

Flux is about:

Page 38: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

Time series in Prometheus

Page 39: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language
Page 40: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language
Page 41: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

// get data from Prometheus on http://localhost:9090fromProm(query:`node_cpu_seconds_total{cpu=“0”,mode=“idle”}`) // filter that by the last minute |> range(start:-1m)

Page 42: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language
Page 43: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language
Page 44: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language
Page 45: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language
Page 46: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language
Page 47: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language
Page 48: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language
Page 49: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

Multiple time series in Prometheus

Page 50: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

fromProm(query: `node_cpu_seconds_total{cpu=“0”,mode=~”idle|user”}`) |> range(start:-1m) |> keep(columns: [“name”, “cpu”, “host”, “mode”, “_value”, “_time”])

Page 51: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language
Page 52: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language
Page 53: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language
Page 54: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language
Page 55: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language
Page 56: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

Tables are the base unit

Page 57: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

Not tied to a specific data model/schema

Page 58: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

Filter function

Page 59: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

fromProm() |> range(start:-1m) |> filter(fn: (r) => r.__name__ == “node_cpu_seconds_total” and r.mode == “idle” and r.cpu == “0”) |> keep(columns: [“name”, “cpu”, “host”, “mode”, “_value”, “_time”])

Page 60: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language
Page 61: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language
Page 62: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language
Page 63: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language
Page 64: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

fromProm() |> range(start:-1m) |> filter(fn: (r) => r.__name__ == “node_cpu_seconds_total” and r.mode in [“idle”, “user”] and r.cpu == “0”) |> keep(columns: [“name”, “cpu”, “host”, “mode”, “_value”, “_time”])

Page 65: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language
Page 66: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language
Page 67: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language
Page 68: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

Aggregate functions

Page 69: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

fromProm() |> range(start:-30s) |> filter(fn: (r) => r.__name__ == “node_cpu_seconds_total” and r.mode == “idle” and r.cpu =~ /0|1/) |> count() |> keep(columns: [“name”, “cpu”, “host”, “mode”, “_value”, “_time”])

Page 70: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language
Page 71: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language
Page 72: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language
Page 73: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language
Page 74: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language
Page 75: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language
Page 76: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

_start and _stop are about windows of data

Page 77: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

fromProm(query: `node_cpu_seconds_total{cpu=“0”,mode=“idle”}` |> range(start: -1m)

Page 78: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language
Page 79: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

fromProm(query: `node_cpu_seconds_total{cpu=“0”,mode=“idle”}` |> range(start: -1m) |> window(every: 20s)

Page 80: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language
Page 81: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

fromProm(query: `node_cpu_seconds_total{cpu=“0”,mode=“idle”}` |> range(start: -1m) |> window(every: 20s)j |> min()

Page 82: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language
Page 83: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

fromProm(query: `node_cpu_seconds_total{cpu=“0”,mode=“idle”}` |> range(start: -1m) |> window(every: 20s)j |> min() |> window(every:inf)

Page 84: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language
Page 85: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

Window converts N tables to M tables based on time boundaries

Page 86: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

Group converts N tables to M tables based on values

Page 87: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

fromProm(query: `node_cpu_seconds_total{cpu=~“0|1”,mode=“idle”}`) |> range(start: -1m)

Page 88: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language
Page 89: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

fromProm(query: `node_cpu_seconds_total{cpu=~“0|1”,mode=“idle”}`) |> range(start: -1m) |> group(columns: [“__name__”, “mode”])

Page 90: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language
Page 91: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language
Page 92: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language
Page 93: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

Nested range vectorsfromProm(host:”http://localhost:9090") |> filter(fn: (r) => r.__name__ == "node_disk_written_bytes_total") |> range(start:-1h) // transform into non-negative derivative values |> derivative() // break those out into tables for each 10 minute block of time |> window(every:10m) // get the max rate of change in each 10 minute window |> max() // and put everything back into a single table |> window(every:inf) // and now let’s convert to KB |> map(fn: (r) => r._value / 1024.0)

Page 94: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

Multiple Serversdc1 = fromProm(host:”http://prom.dc1.local:9090") |> filter(fn: (r) => r.__name__ == “node_network_receive_bytes_total”) |> range(start:-1h) |> insertGroupKey(key: “dc”, value: “1”)

dc2 = fromProm(host:”http://prom.dc2.local:9090") |> filter(fn: (r) => r.__name__ == “node_network_receive_bytes_total”) |> range(start:-1h) |> insertGroupKey(key: “dc”, value: “2”)

dc1 |> union(streams: [dc2]) |> limit(n: 2) |> derivative() |> group(columns: [“dc”]) |> sum()

Page 95: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

Work with data from many sources

• from() // influx

• fromProm()

• fromMySQL()

• fromCSV()

• fromS3()

• …

Page 96: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

Defining Functions

fromProm(query: `node_cpu_seconds_total{cpu=“0”,mode=“idle”}` |> range(start: -1m) |> window(every: 20s)j |> min() |> window(every:inf)

Page 97: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

Defining Functions

windowAgg = (every, fn, <-stream) => { return stream |> window(every: every) |> fn() |> window(every:inf) }

fromProm(query: `node_cpu_seconds_total{cpu=“0”,mode=“idle”}` |> range(start: -1m) |> windowAgg(every:20s, fn: min)

Page 98: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

Packages & Namespacespackage “flux-helpers” windowAgg = (every, fn, <-stream) => { return stream |> window(every: every) |> fn() |> window(every:inf) }

// in a new script import helpers “github.com/pauldix/flux-helpers" fromProm(query: `node_cpu_seconds_total{cpu=“0”,mode=“idle”}` |> range(start: -1m) |> helpers.windowAgg(every:20s, fn: min)

Page 99: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

Project Status• Everything in this talk is prototype (as of 2018-08-09)

• Proposed Final Language Spec

• Release flux, fluxd, InfluxDB 1.7, InfluxDB 2.0 alpha

• Iterate with community to finalize spec

• Optimizations!

• https://github.com/influxdata/flux

Page 100: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

Future work

Page 101: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

More complex Flux compilations to PromQL?

Page 102: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

PromQL parser for Flux engine?

Page 103: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

Add Flux into Prometheus?

Page 104: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

Arrow API for Prometheus

Page 105: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

Apache Arrow

Page 106: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

Stream from Prometheus

Page 107: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

Pushdown matcher and range

Page 108: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

Later pushdown more?

Page 109: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

Standardized Remote Read API?

Page 110: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

Arrow is becoming the lingua franca in data science and big data

Page 111: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

fromProm(query: `{__name__=~/node_.*/}`) |> range(start:-1h) |> toCSV(file: “node-data.csv”) |> toFeather(file: “node-data.feather”)

Page 112: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

Much more work to be done…

Page 113: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

Prometheus + Flux = Possibilities

Page 114: Querying Prometheus with Flux - PromCon NA 2020 · 2020. 6. 3. · Querying Prometheus with Flux (#fluxlang) Paul Dix @pauldix paul@influxdata.com • Data-scripting language

Thank youPaul Dix@pauldix

[email protected]