Выпущен Prometheus 3.15.0
Prometheus 3.15.0 — крупное обновление с новыми возможностями для конфигурации, scraping, TSDB, PromQL и service discovery. В релизе также заметно доработали производительность и исправили ряд ошибок в PromQL, хранилище, remote write, native histograms и интерфейсе.
Новые возможности
- Уровень логирования теперь можно менять через параметр
runtime.log_levelпри перезагрузке конфигурации. Старый флаг--log.levelобъявлен устаревшим. - Добавлен флаг
--auto-gomemlimit.refresh-interval: Prometheus может периодически заново определять лимит памяти контейнера или системы и обновлятьGOMEMLIMITво время работы. - Scraping теперь поддерживает цели, доступные через Unix Domain Sockets.
- Реализована поддержка формата scraping OM 2.0.
Улучшения
- При инициализации TSDB head снижена нагрузка на CPU.
- В Docker service discovery добавлены метки
__meta_docker_container_imageи__meta_docker_container_image_id. - В mixin добавлена панель p95/p99 для задержки отправки пакетов remote write. Эта панель также поддерживает native histograms.
- Флаг
--enable-feature=st-storageтеперь автоматически включает кодирование float-чанков XOR2 и ST-совместимое кодирование histogram-чанков. Отдельно указыватьxor2-encodingиhistograms-st-encodingбольше не нужно. - Для remote write и Alertmanager обновлена поддержка
sigv4: появились поляsession_nameиtagsдля STS AssumeRole, а полеservice_nameтеперь задокументировано. - Scraping научился принимать ответы, сжатые zstd. Возможность включается feature flag
zstd-scrape. - Кодирование float-чанков XOR2 в TSDB стабилизировано. Флаг
--enable-feature=xor2-encodingустарел, вместо него нужно использоватьstorage.tsdb.chunk_encoding.floats: xor2. Перед включением стоит проверить, что сторонние инструменты, читающие TSDB напрямую, например Thanos sidecar, поддерживают XOR2. - Добавлены метрики
prometheus_tsdb_head_appenders_created_totalиprometheus_tsdb_head_series_pending_commit_underflow_total. - В tracing добавлены дополнительные spans для scraping, API-запросов и вычисления правил.
- На страницах Targets и Service Discovery теперь показывается фактически применяемая конфигурация для каждого scrape pool.
- Для series
summary_countиsummary_sumвключён синтез времени старта в scrape appender v2. - При завершении работы scrape pools останавливаются параллельно, поэтому shutdown проходит быстрее.
- В remote storage добавлено диагностическое поле
failed_request_logging, которое помогает логировать запросы remote write v2 при ошибках отправки. - Для XOR-чанков в TSDB добавлен быстрый путь декомпрессии, ускоряющий запросы.
- В интерфейсе улучшено форматирование таблиц native histograms и добавлена фоновая полоса, показывающая количество buckets.
Производительность
- В AWS service discovery метки RDS-кластеров теперь строятся один раз на кластер, а не для каждого инстанса.
- Описание RDS-инстансов из разных кластеров выполняется параллельно с учётом лимита
request_concurrency. - Каждый ресурс ElastiCache теперь запрашивается один раз за обновление, а не дважды.
- В remote read больше не клонируются labels для sampled reads, если не настроены external labels.
- В remote write повторно используется рабочее состояние OTLP-конвертера между запросами.
- При конвертации classic histograms в native histograms время старта разбирается только тогда, когда эта возможность включена.
Исправления
PromQL
- Range query, у которого конец не был выровнен по step, больше не заставляет вложенные subqueries вычисляться за пределами последнего реального шага родительского запроса. Это снижает лишнее потребление
peakSamplesи уменьшает ненужное чтение из хранилища. - Сброс start timestamp больше не регистрируется, если start timestamp не изменился между соседними samples.
- Исправлено обогащение
info()для составных выражений со смешанными ссылками@иoffset, а также для vector-веток без selector. info()корректно работает, когда входные series используют разные подмножества идентифицирующих labels.- При включённом отложенном удалении имён метрик
info()сохраняет ожидаемое удаление metric name. info()теперь применяет модификатор@иoffsetпри вычислении info series, поэтомуinfo(v @ T)обогащает данные относительно времениT.- Исправлено ложное совпадение
FastRegexMatcher, когда capturing group стоит вплотную к литералу. - Устранена паника в range selectors с экспериментальными модификаторами
anchoredилиsmoothed, если выбранная series не содержит samples внутри окна запроса. - Исправлены пустые результаты для subquery с
@, когда она используется как matrix-аргумент функции, которая не является step-invariant. - Сообщение об ошибке many-to-many matching теперь детерминировано: две конфликтующие labels сортируются перед выводом.
- При round-trip через
Expr.String()сохраняются скобки вокруг duration literals. - Duration-expression offsets и
@ start()/@ end()перед range selectors теперь отклоняются так же, как уже отклонялись literal offsets и@ <timestamp>. - В annotations для
histogram_quantileиhistogram_fractionтеперь указывается позиция histogram-аргумента, а не scalar-аргумента.
TSDB и хранение данных
- TSDB больше не теряет samples, если garbage collection удаляет series во время append.
- Series с неподтверждёнными samples сохраняются при compaction выбранных и stale series, включая случаи с пересекающимися appenders.
- После отклонения синтетического zero sample для start timestamp head series больше не удерживается лишний раз.
- Исправлена паника запросов при удалении series после WAL replay.
- Устранён потенциальный deadlock между
mmapSeriesChunksиgcSeries. - Исправлен интервал перезагрузки blocks по умолчанию для пользовательских options.
- Исправлено переполнение ID in-order и out-of-order chunks: значения теперь корректно оборачиваются и не конфликтуют с битом out-of-order.
- Логи WAL и GC теперь выводят длительности в человекочитаемом виде, а не как целые значения в наносекундах.
- В Agent mode исправлена возможная порча WAL после неудачной записи.
- Agent теперь игнорирует неизвестные типы WAL records, что упрощает откат на предыдущую версию.
Service Discovery
- AWS service discovery больше не падает на serverless MSK clusters, MSK clusters без Open Monitoring, standalone ECS tasks с пользовательскими task groups, ElastiCache ARN без resource ID и ECS tasks без необязательных полей.
- Для AWS Lightsail исправлена паника, если у instance отсутствуют необязательные поля вроде availability zone, blueprint, bundle, name, state или support code.
- Для ElastiCache исправлена паника при отсутствии необязательных полей в ответах API.
- Для EC2 исправлена паника, если API не возвращает необязательные поля instance.
- Некорректное значение
request_concurrencyтеперь отклоняется сразу, вместо того чтобы бесконечно подвешивать service discovery. - При удалении конфигурации во время reload теперь удаляется устаревшая series
prometheus_sd_last_update_timestamp_seconds. - В IONOS service discovery исправлены падения при отсутствии server, NIC, volume collections или отдельных свойств server в ответе API.
- В Kubernetes service discovery метка
__meta_kubernetes_service_loadbalancer_ipзаполняется изstatus.loadBalancer.ingress, с fallback на устаревшее полеspec.loadBalancerIP.
Scraping, remote write и OTLP
- Metadata больше не влияет на количество shards в Remote Write v2.
- OTLP ingestion больше не отклоняет весь payload, если у одной метрики нет datapoints.
- Scraping больше не добавляет stale marker для series, которая всё ещё отдаётся target, если storage возвращает для неё новую ссылку.
- JSON-форматтер логов теперь корректно форматирует информацию о scrape target.
- Исправлена data race в
Manager.TargetsDroppedCounts, из-за которой могло неверно считаться количество dropped targets. - Исправлен nil histogram при смешивании native и classic histograms в одном metric family.
Native histograms и promtool
DetectResetбольше не пропускает reset счётчика, когда заполненный bucket за пустым bucket исчезает. Раньше из-за этогоrate()иincrease()могли занижать результат.histogram_stddevиhistogram_stdvarбольше не пропускают buckets.- Исправлена ошибка
Compact, из-за которой buckets могли перемещаться на неверные индексы, а integer histograms получали отрицательные значения bucket counts. promtool tsdb dumpбольше не теряет native histogram samples.
UI, rules и mixins
- В native histogram chart убрана лишняя отметка на оси X при режиме отображения
linear. - Исправлена паника rule manager, созданного без logger, при загрузке rule file с несколькими YAML-документами.
- В mixins исправлены несовпадения labels, из-за которых не срабатывали alerts
PrometheusHAGroupNotIngestingSamplesиPrometheusHAGroupCrashlooping. - HTTP-ответы со сжатием больше не обрезаются, если handler выставил
Content-Length.