FluxPipe is an experimental stand-alone Flux API for serverless workers and embedded datasources
Flux is a lightweight scripting language for querying databases and working with data. 1
Need a practical Flux introduction? Check out the official page or 3 Minutes to Flux
Demo
Try our serverless demo to instantly fall in love with flux
Instructions
Download a binary release, docker or build from source
π¦ Download Binary
curl -fsSL github.com/metrico/fluxpipe/releases/latest/download/fluxpipe-server -O \
&& chmod +x fluxpipe-server
π Start Server w/ Options
./fluxpipe-server -port 8086
Run with -h
for a full list of parameters
π Using Docker
docker pull ghcr.io/metrico/fluxpipe:latest
docker run -ti --rm -p 8086:8086 ghcr.io/metrico/fluxpipe:latest
π Usage
Playground
Fluxpipe embeds a playground interface to instantly execute queries (borrowed from ClickHouse 2)
Secrets
Flux builds using EnvironmentSecretService
accessing system environment variables from flux scripts.
import "influxdata/influxdb/secrets"
key = secrets.get(key: "ENV_SECRET")
HTTP API
Fluxpipe serves a simple REST API loosely compatible with existing flux integrations and clients
1
Grafana FluxUsage with native Grafana InfluxDB/Flux datasource (url + organization fields are required!)
β ClickHouse SQL
import "contrib/qxip/clickhouse"
clickhouse.query(
url: "https://play@play.clickhouse.com",
query: "SELECT database, total_rows FROM tables WHERE total_rows > 0"
)
|> rename(columns: {database: "_value", total_rows: "_data"})
|> keep(columns: ["_value","_data"])
β LogQL
import "contrib/qxip/logql"
option logql.defaultURL = "http://qryn:3100"
logql.query_range(
query: "rate({job=\"dummy-server\"}[5m])",
start: v.timeRangeStart,
end: v.timeRangeStop
)
|> map(fn: (r) => ({r with _time: time(v: uint(v: r.timestamp_ns)), _value: float(v: r.value) }))
|> drop(columns: ["timestamp_ns", "value"])
|> sort(columns: ["_time"])
|> group(columns: ["labels"])
β CURL POST
Usage with curl
curl -XPOST localhost:8086/api/v2/query -sS \
-H 'Accept:application/csv' \
-H 'Content-type:application/vnd.flux' \
-d 'import g "generate" g.from(start: 2022-04-01T00:00:00Z, stop: 2022-04-01T00:03:00Z, count: 3, fn: (n) => n)'
#datatype,string,long,dateTime:RFC3339,long
#group,false,false,false,false
#default,_result,,,
,result,table,_time,_value
,,0,2022-04-01T00:00:00Z,1
,,0,2022-04-01T00:00:36Z,2
,,0,2022-04-01T00:01:12Z,3
STDIN CMD
Fluxpipe can be used as a command-line tool and stdin pipeline processor
Generate CSV
echo 'import g "generate" g.from(start: 2022-04-01T00:00:00Z, stop: 2022-04-01T00:03:00Z, count: 5, fn: (n) => 1)' \
| ./fluxpipe-server -stdin
#datatype,string,long,dateTime:RFC3339,long
#group,false,false,false,false
#default,_result,,,
,result,table,_time,_value
,,0,2022-04-01T00:00:00Z,1
,,0,2022-04-01T00:00:36Z,1
,,0,2022-04-01T00:01:12Z,1
,,0,2022-04-01T00:01:48Z,1
,,0,2022-04-01T00:02:24Z,1
Parse CSV
cat scripts/csv.flux | ./fluxpipe-server -stdin
Query SQL
cat scripts/sql.flux | ./fluxpipe-server -stdin
Public Demo
Grafana Datasource
Configure your Grafana instance with our public demo endpoint (limited resources)
Status
- Fluxlib
- parser
- executor
- Contribs
- contrib/qxip/clickhouse
- contrib/qxip/logql
- contrib/qxip/hash
- ENV secrets
- STDIN pipeline
- HTTP api
- plaintext
- json support
- web playground