Skip to content

Cluster Lifecycle Events & Prometheus Native Histograms | Greptime Monthly Report - No. 86

Cluster DDL and operational events are now recorded in a system table, so table history is a SQL query rather than a log grep. Prometheus native histogram support advanced across the write path, runtime model, and PromQL functions. Table-aware permissions are now enforced across SQL queries, `remote_write`, and `OpenTelemetry` ingest.
Cluster Lifecycle Events & Prometheus Native Histograms | Greptime Monthly Report - No. 86
On this page

Summary

July 2026 · 2026-07-01 – 2026-07-31

What landed this month:

  • Cluster DDL and operational events are now recorded in the greptime_private.events system table.
  • Prometheus native histogram support advanced across the write path, runtime model, and PromQL functions.
  • Table-aware permissions are now enforced across SQL queries, remote_write, and OpenTelemetry ingest.

GreptimeDB shipped v1.2.0-beta.1 on July 31, the first beta of v1.2.0. The release post walks through it, including the 4 breaking changes to check before upgrading. Patch releases v1.1.4, v1.1.3 and v1.1.2 also went out this month. Still on an older version? Upgrade to the latest release.

Contributors

Over the past month, 20 contributors merged a total of 209 PRs. Among them, 7 individual contributors contributed 10 PRs. Welcome to our new contributors: @yimeng, @divyansh-1009, @srivtx!

Thanks to the community contributors who shipped this month:

Highlights

db#8648 feat(event-recorder): configure lifecycle event recording

Cluster lifecycle events now land in the greptime_private.events system table rather than only the logs. Each row carries the event type, a JSONB payload and a timestamp, with procedure id, state and error columns for procedure-driven events, so "when was this table created, altered or dropped" becomes a SQL query.

Several PRs widened that scope this month: DDL events for databases (db#8623), tables (db#8627), views (db#8626) and flows (db#8632), plus repartition (db#8665), WAL prune (db#8677) and batch GC (db#8673), alongside the region migration events that were already recorded.

Recording is configurable: event_recorder.ttl sets the retention of the events table (90d by default), and event_recorder.event_types narrows which types are recorded — omit it to record everything, set it to an empty array to turn recording off.

db#8382 feat: persist Prometheus remote write v2 native histograms

Prometheus Remote Write v2 native histograms are now decoded and persisted, stored as a single greptime_native_histogram Struct field column in the same metric table as regular samples. Spans, buckets, custom values, and the separate int/float count families all live inside the Struct, where the populated family signals the histogram type.

Three follow-ups pushed the read side forward: db#8656 added a shared runtime model with reconciliation, reset detection, and quantiles; db#8664 built the PromQL function layer; and db#8693 wired up result plumbing so native histogram vectors and matrices serialize over HTTP. The work is tracked as an eight-PR series and is still in progress.

db#8552 fix: enforce table-aware permissions across query and ingest protocols

Table-level authorization gaps in query and ingestion paths are now closed. INSERT INTO dst SELECT * FROM src requires access to both tables, and remote_write, OTLP, InfluxDB, and log requests that span multiple tables authorize every target before the first batch is written.

db#8624 perf(mito2): make compaction picker asynchronous to avoid blocking the region worker

Compaction picking previously ran on the region worker loop, where a slow picker could block writes and DDL. The picker now runs in a background thread, and a new BackgroundNotify::CompactionPickFinished message delivers results back to the worker. This release also fixes a data-visibility bug where a truncate raced a concurrent compaction and left the compaction's output files visible after truncation.

db#8540 feat(json2): support JSON2 nested path fallback reads

Reading a nested path no longer requires the SST to store that exact path. When a query asks for a.b.c but the file only holds a.b as a variant leaf, the reader decodes a.b.c out of the parent instead of returning nothing.

Alongside it, db#8435 switched variant payloads from serde JSON bytes to jsonb binary encoding. Two constraints also landed: JSON2 columns currently accept only JSON objects (db#8381), and tables holding them must be append-only (db#8434).

Ecosystem Updates

.NET Ingester

1 release this month (v0.3.0).

  • GreptimeClientOptions.KeepAlive (KeepAliveOptions) adds configurable HTTP/2 gRPC keepalive to all write paths.
  • Keepalive is enabled by default: PingDelay 30s, PingTimeout 10s, PingWhileIdle true.
  • Idle connections silently reset by load balancers, NAT gateways, or firewalls are now detected via pings rather than surfacing as write errors.

Go Ingester

2 releases this month (v0.7.4, v0.7.3).

  • gRPC keepalive is now enabled by default for all connections
  • Multi-endpoint failover support is added to the client
  • Dependency golang.org/x/net is bumped to v0.55.0
  • github.com/opencontainers/runc is updated to v1.3.6

Dashboard

4 releases this month (v0.13.10, v0.13.9, v0.13.8, v0.13.7).

  • Dashboards can now be saved as snapshots
  • Table column widths are locked only during resize mode, not always
  • All supported Perses plugins are now included in the dashboard
  • Hidden columns now show a tooltip hint in the virtual list logs view
  • PromQL editor query header and Prometheus plugin promql update bugs are fixed

Good First Issues

New to GreptimeDB? These are scoped for a first contribution. Comment on an issue to pick it up.

Issue#7603 Support WITH (timeout/wait) for DDL statements

Only ALTER TABLE repartition accepts WITH (timeout='...', wait=...) today; every other DDL submits its procedure and waits for completion. Extend the parser and the DDL submission paths so CREATE/DROP/TRUNCATE, views and flows take the same options, keeping them separate from table and database options so they are not persisted as table properties. The issue breaks the work down per statement, so it can be picked up one DDL at a time.

Keywords: SQL, DDL, Parser

Difficulty: Medium

Issue#8634 Prometheus remote read does not honor custom timestamp and value column names

Remote write already accepts an existing metric table whose timestamp and value columns use names other than the process-wide defaults, but remote read still looks them up as greptime_timestamp and greptime_value, so the query fails to plan or reports a missing column. Resolve both columns from the table schema, thread the names through query planning and result conversion, and add a remote read regression test.

Keywords: Prometheus, Remote Read, Query Engine

Difficulty: Medium

Get Involved

Questions, bug reports, or feature ideas are all welcome. Open an issue or say hi in the community channel.

Stay in the loop

Join our community