github hyperdxio/hyperdx @hyperdx/app@2.38.0

Minor Changes

  • 503aac8: Show GPU utilization and GPU memory utilization charts in the log/span side
    panel Infrastructure section when hw.gpu.* metrics (OTel hardware semconv)
    exist for the correlated host/node. Multiple GPUs on a host render as separate
    series grouped by hw.id, and utilization is split per GPU engine by
    hw.gpu.task (general/encoder/decoder) so a node saturated on video encode is
    still visible; a missing task is reported as general. The section is fully
    hidden when no GPU metrics are present and partially rendered when only one
    metric is available.

    The Infrastructure tab now also treats a Kubernetes resource attribute that is
    present but empty (for example k8s.node.name: "") as absent. Such rows
    previously surfaced an Infrastructure tab that could render nothing.

    Fix GPU chart availability leaking across rows: switching the side panel to a
    row on a different host briefly rendered the previous host's set of GPU
    charts, because the availability query keeps the prior result readable while
    the new one runs.

  • 38e99a3: Add a read-time, schema-agnostic LLM observability dashboard at /llm (beta, linked from the dashboards list) — no ingestion changes required, and it works retroactively on already-ingested telemetry. Traces instrumented with the OTel GenAI semantic conventions, OpenLLMetry, OpenInference, or the Vercel AI SDK are interpreted at query time to chart traffic, token split (uncached/cached/cache-write/output/reasoning), estimated cost by model (bundled price catalog with cache-read discounts and cache-write premiums; an instrumentation-provided cost attribute always wins), latency/TTFT, tool analytics, per-session timelines with lazy-loaded conversation views, and side-by-side LLM span/log search. Aggregations elect an app's own cost-reporting spans as the authoritative per-call reporters so apps emitting several instrumentation dialects in parallel (e.g. opencode emitting OpenInference and Vercel AI spans for each call) are counted once — verified to match opencode's self-reported session cost exactly.

Patch Changes

  • 3f7934a: chore: Add isSourceAllowed prop to SourceSelectControlledComponent

  • b917308: fix: metric names in the chart editor are now listed deterministically instead of sampled. The dropdown discovered names with groupUniqArray(3000)(MetricName), which keeps an arbitrary subset once a metrics table holds more than 3000 distinct names — the survivors follow hash order, not name order — so metrics that exist and are actively reporting could be unselectable, with no warning and no way to search for what had been dropped. Names are now fetched with an ordered, paginated query and matched server-side, ranked so an exact match is always on the first page, and the dropdown says when the list is incomplete. Also fixes the metric list ignoring the chart's selected time range, which pinned it to the last 24 hours.

  • bf4443d: feat: Support autocomplete for PromQL label filters

  • 55db91f: feat: Support static filters in MCP

  • 89a897e: Fixed single-series histogram charts failing with "Unknown expression or function identifier" when sorted by a group-by column or expression. The histogram translation packs group values into a single group Array, so the table default ORDER BY (the raw group-by text) referenced source columns that no longer exist in scope; matched sort items now address the packed array positionally.

  • fbb1e20: Preserve conditional color rules for SQL and PromQl chart configs

  • 020e85f: Fix two problems with the chart editor's metric name picker. The truncation and load-failure notices now render below the input instead of above it, so they no longer push the field down out of alignment with the browse-metrics button beside it, and both were shortened to fit the tile editor's column without wrapping. A search that matches nothing now says so rather than silently hiding the dropdown, and offers the searched name as a selectable option — the catalog only covers the most recent three days of the chart's time range, so a metric that stopped reporting was previously impossible to chart by name.

  • f1062a7: Fixed multi-series metric charts failing with "Unknown expression or function identifier" when sorted by an expression group-by (e.g. ResourceAttributes['service.name']). Table tiles default their ORDER BY to the group-by text, so any multi-series metric table grouped by a resource/attribute-derived expression failed to render. Such sort expressions are now evaluated inside each per-series branch through internal companion columns instead of being re-evaluated in the composed outer query, where the source columns no longer exist.

  • cdcb023: fix: Reliably show service name and level in pattern sample drawer

  • 0ebb689: fix: De-dupe PromQL labels and values to prevent Mantine crash

  • 4184a89: feat: Support dashboard filters based on Prometheus label values

  • 2736003: feat: Support series filter (matcher) in PromQL label dashboard filters

  • bcf0257: feat: Accept optional time bounds on Prometheus label values endpoint

  • c796592: feat: Support a custom template for PromQL series legends

  • 83c1b57: feat: Display static value filters

  • 66f6cf0: Add a window.hdx browser-console debug handle and a "Copy debug info" action in the Help menu, so you can confirm which build is deployed and grab the context worth attaching when filing an issue. window.hdx.report() (and the Help menu action) produces a pasteable summary: frontend version (from package.json), backend/API version (from /api/health — the two deploy separately), deployment mode, user/team ids, enabled env-configurable feature flags, current URL, screen/viewport/OS/browser info, and the RUM session id. The handle is installed once and reads its async fields (server version, identity, features, session id) live via getters.

  • cff6388: feat: Add static filters to schemas and APIs

  • 53336f7: fix(charts): show decimals on Y-axis ticks under 10 in magnitude

    The Y-axis of a time series chart (and the CLI's termchart equivalent)
    always rounded tick labels to 0 decimal places, regardless of the chart's
    Number Format settings. Charts whose values live under 1 (fractional
    gauges, ratios, sub-1 rates) rendered every axis tick as 0 even though
    the tooltip and legend showed the correct value.

    A tick under 10 in magnitude (as displayed - a percent tick's magnitude is
    checked against its ×100 value, not its raw 0-1 ratio) now honors the
    chart's configured decimals, capped at 2 to keep the label within the
    axis's fixed width. A tick of 10 or more, and a tick of exactly 0, stay
    integers exactly as before, whatever the chart's Number Format configures

    • so ordinary counts and the byte/percent tiles in the bundled dashboard
      templates are unaffected.
  • 25a3b01: List every supported template variable in the webhook form, including the
    enriched set added to Generic and incident.io bodies ({{alertId}},
    {{status}}, {{alertType}}, {{comparator}}, {{threshold}},
    {{thresholdMax}}, {{value}}, {{groupKey}}, {{sourceQuery}},
    {{teamId}}, {{note}} and ISO-8601 {{startTimeISO}} / {{endTimeISO}}).
    Each variable now carries a one-line description, so a webhook body can be
    written without leaving the form.

  • 0a18745: feat: Allow creation and editing of static list filters in the UI

  • Updated dependencies [74c28e7]

  • Updated dependencies [25a3b01]

  • Updated dependencies [9c4f94f]

  • Updated dependencies [808b345]

  • Updated dependencies [b917308]

  • Updated dependencies [bf4443d]

  • Updated dependencies [55db91f]

  • Updated dependencies [89a897e]

  • Updated dependencies [f0d1cef]

  • Updated dependencies [f1062a7]

  • Updated dependencies [4184a89]

  • Updated dependencies [2736003]

  • Updated dependencies [7ed8dc8]

  • Updated dependencies [bcf0257]

  • Updated dependencies [c796592]

  • Updated dependencies [d9c5c45]

  • Updated dependencies [cff6388]

    • @hyperdx/api@2.38.0
    • @hyperdx/common-utils@0.28.1

Don't miss a new hyperdx release

NewReleases is sending notifications on new releases.