Migration from InfluxDB 1.x, Telegraf and Grafana integration, monitoring, backups, and downsampling.
HyperbyteDB is designed as a drop-in replacement for InfluxDB 1.x. Most clients, libraries, Telegraf, and Grafana work without modification.
Use any tool that can export InfluxDB 1.x data as line protocol and POST it to HyperbyteDB's /write endpoint. Common approaches:
- Dual-write window — point Telegraf (or your collectors) at both InfluxDB and HyperbyteDB during cutover.
- InfluxDB export — use
influx_inspect exportor chunkedSELECT … INTOqueries from InfluxDB, then replay withcurl:
# Example: replay a line-protocol file
curl -sS -XPOST 'http://hyperbytedb:8086/write?db=mydb&precision=ns' \
--data-binary @/path/to/export.lp- Measurement-by-measurement — migrate one measurement at a time to limit blast radius during validation.
HyperbyteDB accepts the same line protocol format as InfluxDB 1.x; no separate migration binary is required.
- Line protocol write format and semantics
/writeand/queryendpoint behavior/pingresponse for client library connection tests- JSON response shapes (
{"results":[...]}) epochparameter for timestamp formatting- Authentication (query params, Basic, Token; internal APIs need admin)
- Gzip write support
- Chunked query responses
| Area | Difference |
|---|---|
| Query engine | ClickHouse (chDB) instead of TSM; minor floating-point edge cases |
| Storage format | Embedded chDB MergeTree tables instead of TSM shards |
fill(previous/linear) |
Implemented via ClickHouse INTERPOLATE; may differ at series boundaries |
SELECT INTO with regex |
Not supported; use explicit measurement names |
| Permissions | Admin vs non-admin only; no per-database GRANT/REVOKE |
| Subscriptions | Not supported |
Telegraf works with HyperbyteDB out of the box using its InfluxDB v1 output plugin.
[[outputs.influxdb]]
urls = ["http://hyperbytedb:8086"]
database = "telegraf"
skip_database_creation = false
timeout = "5s"
[[inputs.cpu]]
percpu = true
totalcpu = true
[[inputs.mem]]
[[inputs.disk]]
ignore_fs = ["tmpfs", "devtmpfs"]
[[inputs.net]]
[[inputs.system]]Point Telegraf at HyperbyteDB just as you would at InfluxDB. The skip_database_creation = false setting tells Telegraf to create the database if it doesn't exist.
HyperbyteDB works as an InfluxDB v1 datasource in Grafana.
- Open Grafana → Configuration → Data Sources → Add data source.
- Select InfluxDB.
- Set the URL to
http://hyperbytedb:8086. - Set the database name (e.g.,
telegraf). - If auth is enabled, enter credentials in the InfluxDB Details section.
- Click Save & Test.
The included docker-compose.yml ships Grafana with pre-provisioned datasources:
- HyperbyteDB (InfluxDB v1 API) for Telegraf host metrics
- Prometheus for
/metrics - Loki for container logs (via Alloy)
- Tempo for traces
Grafana is accessible at http://localhost:3000 with login admin/admin. Use Explore to correlate logs ({container=~".*hyperbytedb.*"}) and traces (service.name=hyperbytedb).
Add HyperbyteDB as a Prometheus target:
scrape_configs:
- job_name: 'hyperbytedb'
static_configs:
- targets: ['hyperbytedb:8086']
metrics_path: /metrics
scrape_interval: 15s| Metric | Type | What it tells you |
|---|---|---|
hyperbytedb_write_requests_total |
counter | Write throughput |
hyperbytedb_query_requests_total |
counter | Query throughput |
hyperbytedb_query_duration_seconds |
histogram | Query latency (P50/P95/P99) |
hyperbytedb_ingestion_points_total |
counter | Points ingested |
hyperbytedb_flush_duration_seconds |
histogram | WAL-to-chDB flush health |
hyperbytedb_native_rows_written_total |
counter | Rows inserted into chDB during flush |
| Condition | Alert |
|---|---|
rate(hyperbytedb_query_errors_total[5m]) > 0 |
Query failures |
hyperbytedb_query_duration_seconds{quantile="0.99"} > 10 |
Slow queries |
rate(hyperbytedb_write_errors_total[5m]) > 0 |
Write failures |
hyperbytedb_flush_duration_seconds{quantile="0.99"} > 30 |
Slow flushes |
hyperbytedb backup --output /backups/hyperbytedb-$(date +%Y%m%d)The backup contains:
wal/— RocksDB checkpoint of the WALmeta/— RocksDB checkpoint of metadatadata/— Copy of the chDB session directory ([chdb].session_data_path)manifest.json— Timestamp, WAL sequence, andengine_data_pathsfile list
Backups can be taken while HyperbyteDB is running. RocksDB checkpoints provide a consistent snapshot without stopping writes.
# 1. Stop HyperbyteDB
# 2. Restore (overwrites wal_dir, meta_dir, and chDB session data)
hyperbytedb restore --input /backups/hyperbytedb-20240115
# 3. Start HyperbyteDB
hyperbytedb serveWarning: Restore overwrites the configured
wal_dir,meta_dir, and[chdb].session_data_path. Ensure the config file points to the correct directories.
A typical pattern for long-term data retention:
- Raw data — kept for 7 days in the default retention policy.
- 5-minute rollups — kept for 90 days.
- 1-hour rollups — kept indefinitely.
-- Create retention policies
CREATE RETENTION POLICY "7d" ON "mydb" DURATION 7d REPLICATION 1 DEFAULT
CREATE RETENTION POLICY "90d" ON "mydb" DURATION 90d REPLICATION 1
CREATE RETENTION POLICY "forever" ON "mydb" DURATION INF REPLICATION 1
-- Create downsampling CQs
CREATE CONTINUOUS QUERY "cq_5m" ON "mydb"
BEGIN
SELECT mean("usage_idle") AS "usage_idle", mean("usage_user") AS "usage_user"
INTO "mydb"."90d"."cpu_5m"
FROM "cpu"
GROUP BY time(5m), *
END
CREATE CONTINUOUS QUERY "cq_1h" ON "mydb"
BEGIN
SELECT mean("usage_idle") AS "usage_idle", mean("usage_user") AS "usage_user"
INTO "mydb"."forever"."cpu_1h"
FROM "cpu"
GROUP BY time(1h), *
END- Administration — Backup procedures, cluster operations, compaction tuning
- Troubleshooting — Common problems and fixes
- API & TimeseriesQL Reference — Full syntax reference