Change8

v3.10.0

Breaking Changes
📦 prometheusView on GitHub →
2 breaking7 features🐛 13 fixes🔧 9 symbols

Summary

This release introduces a secure distroless Docker image variant, adds new PromQL fill modifiers, and provides an OpenAPI 3.2 specification for the API. Numerous performance improvements and bug fixes address issues across PromQL, TSDB, and OTLP handling.

⚠️ Breaking Changes

  • Users migrating existing **named** volumes from the busybox image to the distroless variant must manually adjust volume ownership to UID/GID 65532 using `docker run --rm -v <volume_name>:/prometheus alpine chown -R 65532:65532 /prometheus` before starting the container with the distroless image.
  • The distroless Docker image variant removes the VOLUME declaration, which might affect how existing named volumes are mounted or initialized compared to the busybox variant.

Migration Steps

  1. If migrating named volumes from busybox to the distroless image, run: `docker run --rm -v <volume_name>:/prometheus alpine chown -R 65532:65532 /prometheus` to adjust ownership to UID/GID 65532.
  2. When using Docker images, append `-busybox` to the tag if you require the default busybox variant (e.g., `prom/prometheus:latest-busybox`). Use `-distroless` for the new variant.

✨ New Features

  • Introduction of a distroless Docker image variant for enhanced security, available with the `-distroless` tag suffix.
  • Addition of the `alertmanager` dimension to metrics: `prometheus_notifications_dropped_total`, `prometheus_notifications_queue_capacity`, and `prometheus_notifications_queue_length`.
  • AWS SD now supports MSK Role.
  • Addition of `fill()`, `fill_left()`, and `fill_right()` binop modifiers in PromQL for specifying default values for missing series.
  • Addition of OpenAPI 3.2 specification for the HTTP API available at `/api/v1/openapi.yaml`.
  • Addition of on-demand wall time profiling accessible at `<URL>/debug/pprof/fgprof`.
  • Promtool now supports PromQL syntax features `promql-duration-expr` and `promql-extended-range-selectors`.

🐛 Bug Fixes

  • Prevented Prometheus from crashing when query strings contain only UTF-8 continuation bytes.
  • Fixed missing `X-Prometheus-Stopping` header for the `/-/ready` endpoint when Prometheus is in a `NotReady` state.
  • Fixed the PromQL `info()` function returning empty results when filtering by a label that exists on both the input metric and `target_info`.
  • Fixed a bug during exemplar buffer grow/shrink operations that could lead to exemplars being incorrectly discarded.
  • Fixed broken graph display after page reload caused by incorrect Y axis min encoding/decoding in the UI.
  • Fixed memory leaks in TSDB buffer pools by ensuring reference fields (Labels, Histogram pointers, metadata strings) are cleared before returning buffers to pools.
  • Fixed the PromQL info function so that series without identifying labels are now correctly returned.
  • Filtered the `__name__` label from OTLP attributes during conversion to prevent duplicate labels.
  • Fixed division by zero error when computing the stale series ratio if the TSDB head was empty.
  • Fixed potential silent data loss for sum metrics during OTLP processing.
  • Fixed smoothed interpolation calculation across counter resets in PromQL.
  • Fixed a panic occurring with the `@` modifier when applied to empty ranges in PromQL.
  • Fixed incorrect calculation of `avg_over_time` for a single native histogram.

Affected Symbols