diff --git a/.changeset/alert-note-in-webhooks.md b/.changeset/alert-note-in-webhooks.md deleted file mode 100644 index bc57e623a3..0000000000 --- a/.changeset/alert-note-in-webhooks.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@hyperdx/api': patch ---- - -fix: `{{note}}` in webhook bodies now contains the alert's note when the alert -fires, not only in "Send test" diff --git a/.changeset/mcp-open-world-alert-webhook.md b/.changeset/mcp-open-world-alert-webhook.md deleted file mode 100644 index 7d7092bd77..0000000000 --- a/.changeset/mcp-open-world-alert-webhook.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@hyperdx/api': patch ---- - -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`. diff --git a/.changeset/promql-label-catalog-via-clickhouse-http-api.md b/.changeset/promql-label-catalog-via-clickhouse-http-api.md deleted file mode 100644 index 639e59bf8a..0000000000 --- a/.changeset/promql-label-catalog-via-clickhouse-http-api.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@hyperdx/api': patch ---- - -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`. diff --git a/.changeset/promql-labels-via-clickhouse-http-api.md b/.changeset/promql-labels-via-clickhouse-http-api.md deleted file mode 100644 index 7821da8ad2..0000000000 --- a/.changeset/promql-labels-via-clickhouse-http-api.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -'@hyperdx/api': minor -'@hyperdx/common-utils': minor ---- - -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. diff --git a/.changeset/promql-source-backend.md b/.changeset/promql-source-backend.md deleted file mode 100644 index 41fc3063b3..0000000000 --- a/.changeset/promql-source-backend.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@hyperdx/api': patch -'@hyperdx/app': patch -'@hyperdx/common-utils': patch ---- - -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. diff --git a/.changeset/service-health-no-verdict.md b/.changeset/service-health-no-verdict.md deleted file mode 100644 index 31d1df9e56..0000000000 --- a/.changeset/service-health-no-verdict.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -'@hyperdx/api': patch ---- - -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`. diff --git a/.changeset/service-map-group-by.md b/.changeset/service-map-group-by.md deleted file mode 100644 index 31b522011e..0000000000 --- a/.changeset/service-map-group-by.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@hyperdx/app': minor ---- - -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. diff --git a/.changeset/upgrade-clickhouse-26-10.md b/.changeset/upgrade-clickhouse-26-10.md deleted file mode 100644 index 54b5f8388e..0000000000 --- a/.changeset/upgrade-clickhouse-26-10.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -'@hyperdx/api': minor ---- - -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`. diff --git a/.env b/.env index ea338c9694..0f31ad49af 100644 --- a/.env +++ b/.env @@ -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 diff --git a/CHANGELOG.md b/CHANGELOG.md index e3bce44315..8298c188ce 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 + + + +**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`. + + + +### 📦 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) + + + ## v2.44.0 — 2026-11-11 diff --git a/packages/api/CHANGELOG.md b/packages/api/CHANGELOG.md index 1abe43264a..e7a69fca65 100644 --- a/packages/api/CHANGELOG.md +++ b/packages/api/CHANGELOG.md @@ -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 diff --git a/packages/api/package.json b/packages/api/package.json index 6c73d5c024..eb61ce1296 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -1,6 +1,6 @@ { "name": "@hyperdx/api", - "version": "2.44.0", + "version": "2.45.0", "license": "MIT", "private": true, "engines": { @@ -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", diff --git a/packages/app/CHANGELOG.md b/packages/app/CHANGELOG.md index ae504f5dbf..b6d5cf4632 100644 --- a/packages/app/CHANGELOG.md +++ b/packages/app/CHANGELOG.md @@ -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 diff --git a/packages/app/package.json b/packages/app/package.json index 58b1476859..cd48de6f79 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -1,6 +1,6 @@ { "name": "@hyperdx/app", - "version": "2.44.0", + "version": "2.45.0", "private": true, "license": "MIT", "engines": { @@ -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", diff --git a/packages/cli/package.json b/packages/cli/package.json index e02a32480a..eb29ee6167 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -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", diff --git a/packages/common-utils/CHANGELOG.md b/packages/common-utils/CHANGELOG.md index 655128eaae..433f36567a 100644 --- a/packages/common-utils/CHANGELOG.md +++ b/packages/common-utils/CHANGELOG.md @@ -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 diff --git a/packages/common-utils/package.json b/packages/common-utils/package.json index a7b8cd195d..099f849144 100644 --- a/packages/common-utils/package.json +++ b/packages/common-utils/package.json @@ -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": [ diff --git a/packages/otel-collector/CHANGELOG.md b/packages/otel-collector/CHANGELOG.md index 566e6c9cc3..65087ce7bf 100644 --- a/packages/otel-collector/CHANGELOG.md +++ b/packages/otel-collector/CHANGELOG.md @@ -1,5 +1,7 @@ # @hyperdx/otel-collector +## 2.45.0 + ## 2.44.0 ### Patch Changes diff --git a/packages/otel-collector/package.json b/packages/otel-collector/package.json index 62fcb6d9a0..5c6387e5cc 100644 --- a/packages/otel-collector/package.json +++ b/packages/otel-collector/package.json @@ -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 } diff --git a/yarn.lock b/yarn.lock index 6192fc95b8..7bd91697da 100644 --- a/yarn.lock +++ b/yarn.lock @@ -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" @@ -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" @@ -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" @@ -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: