A production-grade backend Grafana data source plugin for the e6data distributed SQL engine.
Credentials never leave the Grafana server: the access token is stored in
secureJsonData and used only by the Go backend, which speaks e6data's native
gRPC protocol (QueryEngineService) directly — the same protocol used by the
official Python connector and JDBC driver.
- Backend execution — works in Grafana OSS, Enterprise, and Cloud.
- Native gRPC transport — full type fidelity (Decimal128, timezone-aware timestamps) with no intermediate gateway to operate.
- Long-running & large queries — chunked result fetching with configurable
row/byte caps; query cancellation wired to e6data
cancelQuery. - Metadata-aware — catalog/schema/table/column discovery powers template variables, Explore, and SQL autocomplete.
- Secure by default — TLS verification, custom CA bundles, SSRF guards, and log redaction baked into the backend.
Grafana (browser) ──► Grafana server ──► e6 backend plugin ──► E6Client ──► e6data engine
React panels DataSourceWithBackend (Go) (gRPC+Thrift)
See docs/architecture.md and the ADRs for the full design and the transport decision record.
Try the plugin against your own e6data cluster with just Docker — no Go/Node toolchain needed. The image multi-stage-builds the plugin from source and serves it inside Grafana.
# 1. Point a gitignored local provisioning file at your cluster + paste a token
cp provisioning/datasources/local.yaml.example provisioning/datasources/local.yaml
$EDITOR provisioning/datasources/local.yaml # fill in host, cluster, catalog, schema, username, accessToken
# 2. Build and start
docker compose up --buildOpen http://localhost:3000 (anonymous admin). The "e6data (live)" datasource
is provisioned and selected by default — open Explore and run e.g.
SELECT * FROM date_dim LIMIT 100. (First Save & test after an idle cluster
takes ~60–90 s while auto-resume spins it up; click it again if it times out.)
To also start the in-repo mock engine (for the "e6data (mock)" datasource):
docker compose --profile mock up --buildPrerequisites: Go 1.26+, Node 20+, Mage, Docker.
# backend
mage -v # build backend for the host platform
mage coverage # run Go tests with coverage
# frontend
npm ci
npm run dev # watch-build the frontend
npm test # jest unit tests| Field | Stored in | Notes |
|---|---|---|
| Host | jsonData | e6data engine/planner host |
| Port | jsonData | default 443 |
| Database | jsonData | default database |
| Catalog | jsonData | catalog name |
| Cluster name | jsonData | e6data cluster UUID/name (gRPC cluster-name header) |
| Username | jsonData | e6data username (email) |
| Access token | secureJsonData | never sent to the browser |
| TLS enabled | jsonData | on by default |
| CA certificate | secureJsonData | optional custom CA bundle (PEM) |
See docs/configuration.md and docs/security.md.
Issues and PRs welcome — see CONTRIBUTING.md and the developer guide. Security reports: SECURITY.md.