Streamtime runs ClickHouse, the columnar analytics database, on a Kubernetes fleet (the Altinity distribution) and keeps it monitored and up to date. You choose how much data it ingests and how long it keeps it; Streamtime sizes the storage from that.
Key Features
Sized from your data: storage follows the expected ingestion rate, the retention period and the number of shards.
Shards and replicas: scale out with more shards, and add replicas per shard for availability.
Tenancy: Shared, Isolated or Dedicated fleets.
Monitoring and alerts: metrics, logs and alert rules for every cluster.
Settings
Basic Configuration
Identifier: lowercase letters, digits, - and _, up to 24 characters.
ClickHouse Provider: Altinity.
Retention Days: how long ingested data is kept before it ages out.
Expected Ingestion Rate: sustained writes in MB/s (default 10), used to size storage.
Fleet Selection: the Target Kubernetes Fleet. The cloud, tenancy and region you choose only narrow the list.
Advanced Configuration
Shards (default 1) and Replicas per shard (default 1).
Resources: CPU and memory requests and limits per ClickHouse host.
Users, profiles and server settings, passed to ClickHouse as they are.
The chart Version, to upgrade (see below).
Before you start
A fleet in Healthy state with room for the ClickHouse workload (see Fleet management).
For the API: an access token in STREAMTIME_TOKEN and your organization identifier in place of <org>. Replace api.example.com with your Streamtime API address.
packagemainimport("bytes""crypto/rand""encoding/hex""encoding/json""net/http""os")constapi="https://api.example.com/organizations/<org>"// newKey returns a random idempotency key.funcnewKey()string{b:=make([]byte,16)rand.Read(b)returnhex.EncodeToString(b)}// call sends one request with the access token and a JSON body (or none).// An optional idempotency key is sent as the Idempotency-Key header.funccall(method,pathstring,bodyany,idempotencyKey...string)(*http.Response,error){varbufbytes.Bufferifbody!=nil{iferr:=json.NewEncoder(&buf).Encode(body);err!=nil{returnnil,err}}req,err:=http.NewRequest(method,api+path,&buf)iferr!=nil{returnnil,err}req.Header.Set("Authorization","Bearer "+os.Getenv("STREAMTIME_TOKEN"))req.Header.Set("Content-Type","application/json")iflen(idempotencyKey)>0{req.Header.Set("Idempotency-Key",idempotencyKey[0])}returnhttp.DefaultClient.Do(req)}
Saving a ClickHouse resource and provisioning it are separate steps in the API: create or change it, then reconcile its new generation. The reconcile returns 202 with the operation it started; the same Idempotency-Key returns that operation again, and a 409 means the generation is out of date.
Create a ClickHouse cluster
In the sidebar, select ClickHouse, then Create ClickHouse.
Basic Configuration: enter the Identifier, choose the ClickHouse Provider, and set the Retention Days and Expected Ingestion Rate.
Fleet Selection: choose the Target Kubernetes Fleet.
Advanced Configuration: set the Shards and Replicas per shard, and the resources if you need to. The Estimated Additional Monthly Cost updates as you go.
Create it. It shows Pending, then Provisioning, then Healthy.
# 1. Save it. The response includes "generation" and "configuration_state".
curl -X POST "$API/clickhouses/"\-H"Authorization: Bearer $STREAMTIME_TOKEN"\-H"Content-Type: application/json"\-d'{
"identifier": "events",
"provider": "altinity",
"fleet": "<fleet>",
"retention_days": 30,
"advanced_configuration": {"shards": 1, "replicas": 2, "ingestion_rate_mb_per_sec": 10}
}'# 2. Provision it
curl -X POST "$API/clickhouses/events/reconcile/"\-H"Authorization: Bearer $STREAMTIME_TOKEN"\-H"Content-Type: application/json"\-H"Idempotency-Key: $(uuidgen)"\-d'{"generation": 1}'
Only identifier is required to save a draft; it can be provisioned once configuration_state is valid (a fleet is set).
The command also starts provisioning once the settings are complete; otherwise run streamtime clickhouse reconcile events when they are.
Not available in MCP yet. Create the cluster from the UI, API or CLI.
Check status
status is one of Pending, Provisioning, Updating, Healthy, Error or Deleting.
In the sidebar, select ClickHouse. Each entry shows its status.
Open it. Overview shows its status, settings and endpoints.
curl -s"$API/clickhouses/events/"-H"Authorization: Bearer $STREAMTIME_TOKEN"# Collect a fresh status report (waits for the answer)
curl -s-X POST "$API/clickhouses/events/status/"-H"Authorization: Bearer $STREAMTIME_TOKEN"
resp,err:=call("GET","/clickhouses/events/",nil)// Decode "status" from resp.Body.
streamtime clickhouse list
streamtime clickhouse get events
Ask your assistant, for example: “List my ClickHouse clusters” or “Is the events ClickHouse cluster healthy?”
It uses list_clickhouses and get_clickhouse.
Change the configuration or upgrade
Add shards or replicas, change the resources or the retention, or upgrade to a new Version (advanced_configuration.chart_config.main.version). Send the whole advanced_configuration, not just the keys you change.
Open it from ClickHouse and select Configuration (or Edit).
Change the settings, then save. Streamtime applies the change, and the status shows Updating, then Healthy.
# 1. Save the change. The response includes the new "generation".GEN=$(curl -s-X PATCH "$API/clickhouses/events/"\-H"Authorization: Bearer $STREAMTIME_TOKEN"\-H"Content-Type: application/json"\-d'{"advanced_configuration": {"shards": 2, "replicas": 2, "ingestion_rate_mb_per_sec": 10}}' | jq .generation)# 2. Apply it
curl -X POST "$API/clickhouses/events/reconcile/"\-H"Authorization: Bearer $STREAMTIME_TOKEN"\-H"Content-Type: application/json"\-H"Idempotency-Key: $(uuidgen)"\-d"{\"generation\": $GEN}"
The SDK has no typed call for this update yet, so save it with the SDK’s HTTP client, then apply it:
Changing the settings isn’t available in the CLI yet; save them from the UI or API. Then apply the change:
streamtime clickhouse reconcile events
Not available in MCP yet. Change the configuration from the UI or API.
View metrics, logs and alerts
Open it from ClickHouse and select Monitoring for its metrics and logs, and Alert Rules (where shown) for the alerts that watch it. Alerts that fire also appear on the fleet’s Monitoring tab.
Metrics and logs are read through the fleet that runs it: