Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 0 additions & 6 deletions .changeset/alert-note-in-webhooks.md

This file was deleted.

7 changes: 0 additions & 7 deletions .changeset/mcp-open-world-alert-webhook.md

This file was deleted.

7 changes: 0 additions & 7 deletions .changeset/promql-label-catalog-via-clickhouse-http-api.md

This file was deleted.

8 changes: 0 additions & 8 deletions .changeset/promql-labels-via-clickhouse-http-api.md

This file was deleted.

7 changes: 0 additions & 7 deletions .changeset/promql-source-backend.md

This file was deleted.

13 changes: 0 additions & 13 deletions .changeset/service-health-no-verdict.md

This file was deleted.

7 changes: 0 additions & 7 deletions .changeset/service-map-group-by.md

This file was deleted.

11 changes: 0 additions & 11 deletions .changeset/upgrade-clickhouse-26-10.md

This file was deleted.

4 changes: 2 additions & 2 deletions .env
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ NEXT_ALL_IN_ONE_IMAGE_NAME_DOCKERHUB=clickhouse/clickstack-all-in-one
ALL_IN_ONE_IMAGE_NAME_DOCKERHUB=hyperdx/hyperdx-all-in-one
NEXT_OTEL_COLLECTOR_IMAGE_NAME_DOCKERHUB=clickhouse/clickstack-otel-collector
OTEL_COLLECTOR_IMAGE_NAME_DOCKERHUB=hyperdx/hyperdx-otel-collector
CODE_VERSION=2.44.0
IMAGE_VERSION_SUB_TAG=.44.0
CODE_VERSION=2.45.0
IMAGE_VERSION_SUB_TAG=.45.0
IMAGE_VERSION=2
IMAGE_NIGHTLY_TAG=2-nightly
IMAGE_LATEST_TAG=latest
Expand Down
103 changes: 103 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,109 @@ PR — keep the `hyperdx-release-notes` comment marker intact when editing so yo
edits survive regeneration. Per-package detail lives in each
`packages/*/CHANGELOG.md`.

## v2.45.0 — 2026-11-13

<!-- hyperdx-release-notes version=2.45.0 inputs=8861d0a1698f -->

**PromQL evaluation choice and ClickHouse 26.10**

You can now choose how a PromQL source on ClickHouse is evaluated — through the
Prometheus HTTP API or the `prometheusQuery` table functions — instead of
leaving HyperDX to probe the server on every query. The service map can also now
be split by up to three extra group-by expressions, so a single slow or failing
pod no longer disappears into its service average. This release also moves the
all-in-one image and the Docker Compose files to ClickHouse 26.10.3.7. Two
things change underneath you: TimeSeries tables created from now on default to
schema version 8, which keeps each series' time range in a separate inner table,
and ClickHouse's own `system.metric_log` switches to the bucketed schema. Your
existing TimeSeries tables keep the layout they already have, but metric_log
rows written before the upgrade are left behind in `system.metric_log_0`, so
check anything that reads that table before you upgrade.

### 💥 Breaking Changes

- **`system.metric_log` moves to the bucketed schema**: ClickHouse now writes
`system.metric_log` in its bucketed form, and the rows recorded before the
upgrade move to `system.metric_log_0`. A dashboard, alert or saved query
reading ClickHouse's own metrics from `system.metric_log` will see only
post-upgrade rows until you point it at both tables.
- **New TimeSeries tables default to schema version 8**: TimeSeries tables
created after the upgrade keep each series' time range in a separate inner
table. Existing tables are untouched and keep their current layout, so a table
created after the upgrade no longer matches the shape of one created before
it.
- **`clickstack_service_health` no longer returns a verdict**: the MCP tool has
stopped labelling services critical, degraded or healthy, and no longer tells
an agent a service needs "no action" — each service keeps its threshold flags,
score and a factual summary, so agents reason from the numbers rather than a
verdict that service-wide totals can get wrong. `summary.statusCounts` is
replaced by `summary.servicesFlagged`, and the span attributes
`mcp.service_health.critical_count` and `mcp.service_health.degraded_count`
are replaced by `mcp.service_health.flagged_count`, so update anything that
reads those fields.

### ✨ New Features

- **Choose how a PromQL source is evaluated**: a PromQL source on ClickHouse can
now be set to use either the Prometheus HTTP API or the `prometheusQuery`
table functions, rather than having HyperDX work it out for itself. A source
pinned to the HTTP API against a server that does not serve it now fails with
a clear error instead of an obscure one, and onboarding pins a PromQL source
it detects to the HTTP API when the server serves it.
- **Split the service map by extra dimensions**: you can now add up to three
extra group-by SQL expressions to the service map — for example
`ResourceAttributes['k8s.pod.name']` — so a node becomes a service plus those
values and a slow or failing pod stands on its own instead of being averaged
into its service.

### 🔧 Improvements

- **PromQL label lookups go through ClickHouse's Prometheus HTTP API**: on
ClickHouse 26.9+ with the `prometheus_api_v1` handler, label and label-value
lookups for a ClickHouse-backed PromQL source now proxy to the handler instead
of querying the TimeSeries tags table with SQL. Older servers, servers without
the handler, and sources set to `table-function` keep the SQL path, so a
source that runs queries over HTTP on 26.6-26.8 still gets label
autocomplete.
- **The MCP `describe_source` tool reads its label catalogue the same way**:
asked about a ClickHouse-backed PromQL source, `describe_source` now lists
label and metric names through the `prometheus_api_v1` handler on ClickHouse
26.9+, so an agent sees the same catalogue the app does. It falls back to SQL
on older servers, servers without the handler, and sources set to
`table-function`.
- **Fewer probes for sources without an explicit choice**: a PromQL source that
does not say how it should be evaluated is still probed, but the answer is now
kept for 5 minutes instead of being worked out again on every query.

### 🐛 Bug Fixes

- **`{{note}}` is filled in when an alert actually fires**: a webhook body using
`{{note}}` now carries the alert's note on real alert notifications, not only
on "Send test", so the context you wrote on the alert reaches the people
paged by it.
- **MCP webhook and alert tools are declared open-world**: saving a webhook or
an alert sends HTTP requests to third-party endpoints, so
`clickstack_save_webhook` and `clickstack_save_alert` now carry
`openWorldHint: true`. MCP clients that treat open-world tools differently —
by asking you to confirm before they run, for instance — will now do so for
these two.

### 📦 Build / Packaging

- **Bundled ClickHouse is now 26.10.3.7**: the all-in-one image and the Docker
Compose files use `clickhouse/clickhouse-server:26.10.3.7-alpine`.

<!-- hyperdx-package-list -->

### 📦 Package changelogs

- `@hyperdx/api` 2.44.0 → 2.45.0 — [changelog](https://github.com/ClickHouse/ClickStack/blob/main/packages/api/CHANGELOG.md#2450)
- `@hyperdx/app` 2.44.0 → 2.45.0 — [changelog](https://github.com/ClickHouse/ClickStack/blob/main/packages/app/CHANGELOG.md#2450)
- `@hyperdx/common-utils` 0.34.0 → 0.35.0 — [changelog](https://github.com/ClickHouse/ClickStack/blob/main/packages/common-utils/CHANGELOG.md#0350)
- `@hyperdx/otel-collector` 2.44.0 → 2.45.0 — [changelog](https://github.com/ClickHouse/ClickStack/blob/main/packages/otel-collector/CHANGELOG.md#2450)

<!-- /hyperdx-package-list -->

## v2.44.0 — 2026-11-11

<!-- hyperdx-release-notes version=2.44.0 inputs=99e8264954db -->
Expand Down
43 changes: 43 additions & 0 deletions packages/api/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,48 @@
# @hyperdx/api

## 2.45.0

### Minor Changes

- 2d17de5d7: feat: serve PromQL label lookups from ClickHouse's Prometheus HTTP API

On ClickHouse 26.9+ with the `prometheus_api_v1` handler, `/labels` and `/label/:name/values` for a ClickHouse-backed PromQL source now proxy to the handler instead of querying the TimeSeries tags table with SQL. Older servers, servers without the handler, and sources set to `table-function` keep the SQL path, so a source that runs queries over HTTP on 26.6-26.8 still gets label autocomplete.

- db4e7ba67: chore: upgrade bundled ClickHouse to 26.10.3.7

The all-in-one image and the Docker Compose files now use
`clickhouse/clickhouse-server:26.10.3.7-alpine`. New TimeSeries tables default
to schema version 8, which keeps each series' time range in a separate inner
table; existing tables keep their layout. `system.metric_log` switches to the
bucketed schema, and rows from before the upgrade move to `system.metric_log_0`.

### Patch Changes

- c17fc16a2: fix: `{{note}}` in webhook bodies now contains the alert's note when the alert
fires, not only in "Send test"
- 1fba1c381: fix: mark the MCP `clickstack_save_webhook` and `clickstack_save_alert` tools as open-world

Saved webhooks and alerts send HTTP requests to third-party endpoints, so both tools now declare `openWorldHint: true`.

- 7b03880eb: feat: read the MCP PromQL label catalog from ClickHouse's Prometheus HTTP API

`describe_source` on a ClickHouse-backed PromQL source now lists label and metric names through the `prometheus_api_v1` handler on ClickHouse 26.9+, and falls back to SQL on older servers, servers without the handler, and sources set to `table-function`.

- ac913ceb3: feat: Choose how a PromQL source on ClickHouse is evaluated (the Prometheus HTTP API or the `prometheusQuery` table functions) instead of probing the server on every query. Without a choice the server is still probed, but the answer is now kept for 5 minutes. A source set to the HTTP API against a server that does not serve it fails with a clear error. Onboarding pins a PromQL source it detects to the HTTP API when the server serves it.
- 7cfd333ea: fix(mcp): drop the health verdict from clickstack_service_health

The tool no longer labels services critical, degraded or healthy, and no longer
tells agents a service needs "no action". Each service keeps its threshold
flags, score and a factual summary, so agents reason from the numbers instead of
a verdict that service-wide totals can get wrong. `summary.statusCounts` is
replaced by `summary.servicesFlagged`, and the span attributes
`mcp.service_health.critical_count` and `mcp.service_health.degraded_count` are
replaced by `mcp.service_health.flagged_count`.

- Updated dependencies [2d17de5d7]
- Updated dependencies [ac913ceb3]
- @hyperdx/common-utils@0.35.0

## 2.44.0

### Minor Changes
Expand Down
4 changes: 2 additions & 2 deletions packages/api/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@hyperdx/api",
"version": "2.44.0",
"version": "2.45.0",
"license": "MIT",
"private": true,
"engines": {
Expand All @@ -23,7 +23,7 @@
"@clickhouse/clickstack-node": "^1.0.2",
"@clickhouse/client-common": "1.23.0-head.fae5998.1",
"@esm2cjs/p-queue": "^7.3.0",
"@hyperdx/common-utils": "^0.34.0",
"@hyperdx/common-utils": "^0.35.0",
"@hyperdx/passport-local-mongoose": "^9.0.1",
"@modelcontextprotocol/sdk": "^1.27.1",
"@opentelemetry/api": "~1.9.1",
Expand Down
21 changes: 21 additions & 0 deletions packages/app/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,26 @@
# @hyperdx/app

## 2.45.0

### Minor Changes

- b3cbd0260: feat: split the service map by up to 3 extra group-by SQL expressions (for
example `ResourceAttributes['k8s.pod.name']`), so a node is a service plus
those values and a slow or failing pod is no longer averaged into its service.

### Patch Changes

- ac913ceb3: feat: Choose how a PromQL source on ClickHouse is evaluated (the Prometheus HTTP API or the `prometheusQuery` table functions) instead of probing the server on every query. Without a choice the server is still probed, but the answer is now kept for 5 minutes. A source set to the HTTP API against a server that does not serve it fails with a clear error. Onboarding pins a PromQL source it detects to the HTTP API when the server serves it.
- Updated dependencies [c17fc16a2]
- Updated dependencies [1fba1c381]
- Updated dependencies [7b03880eb]
- Updated dependencies [2d17de5d7]
- Updated dependencies [ac913ceb3]
- Updated dependencies [7cfd333ea]
- Updated dependencies [db4e7ba67]
- @hyperdx/api@2.45.0
- @hyperdx/common-utils@0.35.0

## 2.44.0

### Minor Changes
Expand Down
4 changes: 2 additions & 2 deletions packages/app/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@hyperdx/app",
"version": "2.44.0",
"version": "2.45.0",
"private": true,
"license": "MIT",
"engines": {
Expand Down Expand Up @@ -40,7 +40,7 @@
"@dnd-kit/utilities": "^3.2.2",
"@hookform/resolvers": "^3.9.0",
"@hyperdx/api": "workspace:*",
"@hyperdx/common-utils": "^0.34.0",
"@hyperdx/common-utils": "^0.35.0",
"@mantine/core": "^9.0.0",
"@mantine/dates": "^9.0.0",
"@mantine/dropzone": "^9.0.0",
Expand Down
2 changes: 1 addition & 1 deletion packages/cli/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@
},
"devDependencies": {
"@clickhouse/client": "1.23.0-head.fae5998.1",
"@hyperdx/common-utils": "^0.34.0",
"@hyperdx/common-utils": "^0.35.0",
"@jest/globals": "^30.2.0",
"@types/crypto-js": "^4.2.2",
"@types/jest": "^29.5.14",
Expand Down
12 changes: 12 additions & 0 deletions packages/common-utils/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,17 @@
# @hyperdx/common-utils

## 0.35.0

### Minor Changes

- 2d17de5d7: feat: serve PromQL label lookups from ClickHouse's Prometheus HTTP API

On ClickHouse 26.9+ with the `prometheus_api_v1` handler, `/labels` and `/label/:name/values` for a ClickHouse-backed PromQL source now proxy to the handler instead of querying the TimeSeries tags table with SQL. Older servers, servers without the handler, and sources set to `table-function` keep the SQL path, so a source that runs queries over HTTP on 26.6-26.8 still gets label autocomplete.

### Patch Changes

- ac913ceb3: feat: Choose how a PromQL source on ClickHouse is evaluated (the Prometheus HTTP API or the `prometheusQuery` table functions) instead of probing the server on every query. Without a choice the server is still probed, but the answer is now kept for 5 minutes. A source set to the HTTP API against a server that does not serve it fails with a clear error. Onboarding pins a PromQL source it detects to the HTTP API when the server serves it.

## 0.34.0

### Minor Changes
Expand Down
2 changes: 1 addition & 1 deletion packages/common-utils/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@hyperdx/common-utils",
"description": "Common utilities for HyperDX application",
"version": "0.34.0",
"version": "0.35.0",
"license": "MIT",
"private": true,
"files": [
Expand Down
2 changes: 2 additions & 0 deletions packages/otel-collector/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# @hyperdx/otel-collector

## 2.45.0

## 2.44.0

### Patch Changes
Expand Down
2 changes: 1 addition & 1 deletion packages/otel-collector/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@hyperdx/otel-collector",
"description": "HyperDX OpenTelemetry Collector configuration and Docker image",
"version": "2.44.0",
"version": "2.45.0",
"license": "MIT",
"private": true
}
8 changes: 4 additions & 4 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -4772,7 +4772,7 @@ __metadata:
"@clickhouse/clickstack-node": "npm:^1.0.2"
"@clickhouse/client-common": "npm:1.23.0-head.fae5998.1"
"@esm2cjs/p-queue": "npm:^7.3.0"
"@hyperdx/common-utils": "npm:^0.34.0"
"@hyperdx/common-utils": "npm:^0.35.0"
"@hyperdx/passport-local-mongoose": "npm:^9.0.1"
"@modelcontextprotocol/sdk": "npm:^1.27.1"
"@opentelemetry/api": "npm:~1.9.1"
Expand Down Expand Up @@ -4870,7 +4870,7 @@ __metadata:
"@eslint/compat": "npm:^2.0.0"
"@hookform/resolvers": "npm:^3.9.0"
"@hyperdx/api": "workspace:*"
"@hyperdx/common-utils": "npm:^0.34.0"
"@hyperdx/common-utils": "npm:^0.35.0"
"@mantine/core": "npm:^9.0.0"
"@mantine/dates": "npm:^9.0.0"
"@mantine/dropzone": "npm:^9.0.0"
Expand Down Expand Up @@ -4988,7 +4988,7 @@ __metadata:
resolution: "@hyperdx/cli@workspace:packages/cli"
dependencies:
"@clickhouse/client": "npm:1.23.0-head.fae5998.1"
"@hyperdx/common-utils": "npm:^0.34.0"
"@hyperdx/common-utils": "npm:^0.35.0"
"@jest/globals": "npm:^30.2.0"
"@types/crypto-js": "npm:^4.2.2"
"@types/jest": "npm:^29.5.14"
Expand All @@ -5015,7 +5015,7 @@ __metadata:
languageName: unknown
linkType: soft

"@hyperdx/common-utils@npm:^0.34.0, @hyperdx/common-utils@workspace:packages/common-utils":
"@hyperdx/common-utils@npm:^0.35.0, @hyperdx/common-utils@workspace:packages/common-utils":
version: 0.0.0-use.local
resolution: "@hyperdx/common-utils@workspace:packages/common-utils"
dependencies:
Expand Down