Prometheus is now built and supporting Go 1.16 ([#8544](https://github.com/prometheus/prometheus/pull/8544)). This reverts the memory release pattern added in Go 1.12. This makes common RSS usage metrics showing more accurate number for actual memory used by Prometheus. You can read more details [here](https://www.bwplotka.dev/2019/golang-memory-monitoring/).
* [CHANGE] Alerting: Using Alertmanager v2 API by default. [#8626](https://github.com/prometheus/prometheus/pull/8626)
* [CHANGE] Prometheus/Promtool: As agreed on dev summit, binaries are now printing help and usage to stdout instead of stderr. [#8542](https://github.com/prometheus/prometheus/pull/8542)
* [FEATURE] Remote: Add support for AWS SigV4 auth method for remote_write. [#8509](https://github.com/prometheus/prometheus/pull/8509)
* [FEATURE] Scaleway Discovery: Add Scaleway Service Discovery. [#8555](https://github.com/prometheus/prometheus/pull/8555)
* [ENHANCEMENT] Scrape: Add support for specifying type of Authorization header credentials with Bearer by default. [#8512](https://github.com/prometheus/prometheus/pull/8512)
* [ENHANCEMENT] Scrape: Add `follow_redirects` option to scrape configuration. [#8546](https://github.com/prometheus/prometheus/pull/8546)
* [ENHANCEMENT] Remote: Allow retries on HTTP 429 response code for remote_write. Disabled by default. See [configuration docs](https://prometheus.io/docs/prometheus/latest/configuration/configuration/remote_write) for details. [#8237](https://github.com/prometheus/prometheus/pull/#8237) [#8477](https://github.com/prometheus/prometheus/pull/8477)
* [ENHANCEMENT] Remote: Allow configuring custom headers for remote_read. See [configuration docs](https://prometheus.io/docs/prometheus/latest/configuration/configuration/remote_read) for details. [#8516](https://github.com/prometheus/prometheus/pull/#8516)
* [ENHANCEMENT] UI: Hitting Enter now triggers new query. [#8581](https://github.com/prometheus/prometheus/pull/8581)
* [ENHANCEMENT] UI: Better handling of long rule and names on the `/rules` and `/targets` pages. [#8608](https://github.com/prometheus/prometheus/pull/8608) [#8609](https://github.com/prometheus/prometheus/pull/8609)
* [ENHANCEMENT] UI: Add collapse/expand all button on the `/targets` page. [#8486](https://github.com/prometheus/prometheus/pull/8486)
* [BUGFIX] TSDB: Eager deletion of removable blocks on every compaction, saving disk peak space usage. [#8007](https://github.com/prometheus/prometheus/pull/8007)
* [BUGFIX] PromQL: Fix parser support for special characters like`炬`. [#8517](https://github.com/prometheus/prometheus/pull/8517)
* [BUGFIX] Rules: Update rule health for append/commit fails. [#8619](https://github.com/prometheus/prometheus/pull/8619)
* [ENHANCEMENT] UI: Expose total number of label pairs in head in TSDB stats page. [#8343](https://github.com/prometheus/prometheus/pull/8343)
* [ENHANCEMENT] TSDB: Reload blocks every minute, to detect new blocks and enforce retention more often. [#8343](https://github.com/prometheus/prometheus/pull/8343)
* [BUGFIX] API: Fix global URL when external address has no port. [#8359](https://github.com/prometheus/prometheus/pull/8359)
* [BUGFIX] Backfill: Fix error message handling. [#8432](https://github.com/prometheus/prometheus/pull/8432)
* [BUGFIX] Backfill: Fix "add sample: out of bounds" error when series span an entire block. [#8476](https://github.com/prometheus/prometheus/pull/8476)
* [BUGFIX] Deprecate unused flag --alertmanager.timeout. [#8407](https://github.com/prometheus/prometheus/pull/8407)
* [BUGFIX] Mixins: Support remote-write metrics renamed in v2.23 in alerts. [#8423](https://github.com/prometheus/prometheus/pull/8423)
* [BUGFIX] Remote: Fix garbage collection of dropped series in remote write. [#8387](https://github.com/prometheus/prometheus/pull/8387)
* [ENHANCEMENT] Cache basic authentication results to significantly improve performance of HTTP endpoints (via an update of prometheus/exporter-toolkit).
* [BUGFIX] Prevent user enumeration by timing requests sent to authenticated HTTP endpoints (via an update of prometheus/exporter-toolkit).
* [FEATURE] Add TLS and basic authentication to HTTP endpoints. [#8316](https://github.com/prometheus/prometheus/pull/8316)
* [FEATURE] promtool: Add `check web-config` subcommand to check web config files. [#8319](https://github.com/prometheus/prometheus/pull/8319)
* [FEATURE] promtool: Add `tsdb create-blocks-from openmetrics` subcommand to backfill metrics data from an OpenMetrics file. [#8084](https://github.com/prometheus/prometheus/pull/8084)
* [ENHANCEMENT] HTTP API: Fast-fail queries with only empty matchers. [#8288](https://github.com/prometheus/prometheus/pull/8288)
* [ENHANCEMENT] HTTP API: Support matchers for labels API. [#8301](https://github.com/prometheus/prometheus/pull/8301)
* [ENHANCEMENT] promtool: Improve checking of URLs passed on the command line. [#7956](https://github.com/prometheus/prometheus/pull/7956)
* [ENHANCEMENT] SD: Expose IPv6 as a label in EC2 SD. [#7086](https://github.com/prometheus/prometheus/pull/7086)
* [ENHANCEMENT] SD: Reuse EC2 client, reducing frequency of requesting credentials. [#8311](https://github.com/prometheus/prometheus/pull/8311)
* [ENHANCEMENT] TSDB: Add logging when compaction takes more than the block time range. [#8151](https://github.com/prometheus/prometheus/pull/8151)
* [ENHANCEMENT] TSDB: Avoid unnecessary GC runs after compaction. [#8276](https://github.com/prometheus/prometheus/pull/8276)
* [BUGFIX] HTTP API: Avoid double-closing of channel when quitting multiple times via HTTP. [#8242](https://github.com/prometheus/prometheus/pull/8242)
* [BUGFIX] SD: Ignore CNAME records in DNS SD to avoid spurious `Invalid SRV record` warnings. [#8216](https://github.com/prometheus/prometheus/pull/8216)
* [BUGFIX] SD: Avoid config error triggered by valid label selectors in Kubernetes SD. [#8285](https://github.com/prometheus/prometheus/pull/8285)
-`prometheus_remote_storage_succeeded_samples_total` was removed and `prometheus_remote_storage_samples_total` was introduced for all the samples attempted to send.
-`prometheus_remote_storage_sent_bytes_total` was removed and replaced with `prometheus_remote_storage_samples_bytes_total` and `prometheus_remote_storage_metadata_bytes_total`.
* [CHANGE] Remote: Do not collect non-initialized timestamp metrics. [#8060](https://github.com/prometheus/prometheus/pull/8060)
* [FEATURE] [EXPERIMENTAL] Remote write: Allow metric metadata to be propagated via remote write. The following new metrics were introduced: `prometheus_remote_storage_metadata_total`, `prometheus_remote_storage_metadata_failed_total`, `prometheus_remote_storage_metadata_retried_total`, `prometheus_remote_storage_metadata_bytes_total`. [#6815](https://github.com/prometheus/prometheus/pull/6815)
* [ENHANCEMENT] Remote write: Added a metric `prometheus_remote_storage_max_samples_per_send` for remote write. [#8102](https://github.com/prometheus/prometheus/pull/8102)
* [ENHANCEMENT] TSDB: Make the snapshot directory name always the same length. [#8138](https://github.com/prometheus/prometheus/pull/8138)
* [ENHANCEMENT] TSDB: Create a checkpoint only once at the end of all head compactions. [#8067](https://github.com/prometheus/prometheus/pull/8067)
* [ENHANCEMENT] TSDB: Avoid Series API from hitting the chunks. [#8050](https://github.com/prometheus/prometheus/pull/8050)
* [ENHANCEMENT] TSDB: Cache label name and last value when adding series during compactions making compactions faster. [#8192](https://github.com/prometheus/prometheus/pull/8192)
* [ENHANCEMENT] PromQL: Improved performance of Hash method making queries a bit faster. [#8025](https://github.com/prometheus/prometheus/pull/8025)
* [ENHANCEMENT] promtool: `tsdb list` now prints block sizes. [#7993](https://github.com/prometheus/prometheus/pull/7993)
* [ENHANCEMENT] promtool: Calculate mint and maxt per test avoiding unnecessary calculations. [#8096](https://github.com/prometheus/prometheus/pull/8096)
* [ENHANCEMENT] SD: Add filtering of services to Docker Swarm SD. [#8074](https://github.com/prometheus/prometheus/pull/8074)
* [BUGFIX] React UI: Fix button display when there are no panels. [#8155](https://github.com/prometheus/prometheus/pull/8155)
* [BUGFIX] PromQL: Don't include rendered expression on PromQL parse errors. [#8177](https://github.com/prometheus/prometheus/pull/8177)
* [BUGFIX] web: Fix panic with double close() of channel on calling `/-/quit/`. [#8166](https://github.com/prometheus/prometheus/pull/8166)
* [BUGFIX] TSDB: Fixed WAL corruption on partial writes within a page causing `invalid checksum` error on WAL replay. [#8125](https://github.com/prometheus/prometheus/pull/8125)
* [BUGFIX] Update config metrics `prometheus_config_last_reload_successful` and `prometheus_config_last_reload_success_timestamp_seconds` right after initial validation before starting TSDB.
* [BUGFIX] promtool: Correctly detect duplicate label names in exposition.
* [BUGFIX] Fix potential "mmap: invalid argument" errors in loading the head chunks, after an unclean shutdown, by performing read repairs. [#8061](https://github.com/prometheus/prometheus/pull/8061)
* [BUGFIX] Fix serving metrics and API when reloading scrape config. [#8104](https://github.com/prometheus/prometheus/pull/8104)
* [BUGFIX] Fix head chunk size calculation for size based retention. [#8139](https://github.com/prometheus/prometheus/pull/8139)
* [ENHANCEMENT] Gracefully handle unknown WAL record types. [#8004](https://github.com/prometheus/prometheus/pull/8004)
* [ENHANCEMENT] Issue a warning for 64 bit systems running 32 bit binaries. [#8012](https://github.com/prometheus/prometheus/pull/8012)
* [BUGFIX] Adjust scrape timestamps to align them to the intended schedule, effectively reducing block size. Workaround for a regression in go1.14+. [#7976](https://github.com/prometheus/prometheus/pull/7976)
* [BUGFIX] promtool: Ensure alert rules are marked as restored in unit tests. [#7661](https://github.com/prometheus/prometheus/pull/7661)
* [BUGFIX] Eureka: Fix service discovery when compiled in 32-bit. [#7964](https://github.com/prometheus/prometheus/pull/7964)
* [BUGFIX] Don't do literal regex matching optimisation when case insensitive. [#8013](https://github.com/prometheus/prometheus/pull/8013)
* [BUGFIX] Fix classic UI sometimes running queries for instant query when in range query mode. [#7984](https://github.com/prometheus/prometheus/pull/7984)
* [CHANGE] Disable HTTP/2 because of concerns with the Go HTTP/2 client. [#7588](https://github.com/prometheus/prometheus/pull/7588) [#7701](https://github.com/prometheus/prometheus/pull/7701)
* [ENHANCEMENT] Support composite durations in PromQL, config and UI, e.g. 1h30m. [#7713](https://github.com/prometheus/prometheus/pull/7713) [#7833](https://github.com/prometheus/prometheus/pull/7833)
* [ENHANCEMENT] DNS SD: Add SRV record target and port meta labels. [#7678](https://github.com/prometheus/prometheus/pull/7678)
* [ENHANCEMENT] Docker Swarm SD: Support tasks and service without published ports. [#7686](https://github.com/prometheus/prometheus/pull/7686)
* [ENHANCEMENT] PromQL: Reduce the amount of data queried by remote read when a subquery has an offset. [#7667](https://github.com/prometheus/prometheus/pull/7667)
* [ENHANCEMENT] UI: Respect the `--web.page-title` parameter in the React UI. [#7607](https://github.com/prometheus/prometheus/pull/7607)
* [ENHANCEMENT] UI: Add duration, labels, annotations to alerts page in the React UI. [#7605](https://github.com/prometheus/prometheus/pull/7605)
* [ENHANCEMENT] UI: Add duration on the React UI rules page, hide annotation and labels if empty. [#7606](https://github.com/prometheus/prometheus/pull/7606)
* [BUGFIX] API: Deduplicate series in /api/v1/series. [#7862](https://github.com/prometheus/prometheus/pull/7862)
* [BUGFIX] PromQL: Drop metric name in bool comparison between two instant vectors. [#7819](https://github.com/prometheus/prometheus/pull/7819)
* [BUGFIX] PromQL: Exit with an error when time parameters can't be parsed. [#7505](https://github.com/prometheus/prometheus/pull/7505)
* [BUGFIX] Rules: Detect extra fields in rule files. [#7767](https://github.com/prometheus/prometheus/pull/7767)
* [BUGFIX] Rules: Disallow overwriting the metric name in the `labels` section of recording rules. [#7787](https://github.com/prometheus/prometheus/pull/7787)
* [BUGFIX] Rules: Keep evaluation timestamp across reloads. [#7775](https://github.com/prometheus/prometheus/pull/7775)
* [BUGFIX] Scrape: Do not stop scrapes in progress during reload. [#7752](https://github.com/prometheus/prometheus/pull/7752)
* [BUGFIX] TSDB: Fix `chunks.HeadReadWriter: maxt of the files are not set` error. [#7856](https://github.com/prometheus/prometheus/pull/7856)
* [BUGFIX] TSDB: Delete blocks atomically to prevent corruption when there is a panic/crash during deletion. [#7772](https://github.com/prometheus/prometheus/pull/7772)
* [BUGFIX] Triton SD: Fix a panic when triton_sd_config is nil. [#7671](https://github.com/prometheus/prometheus/pull/7671)
* [BUGFIX] UI: Fix react UI bug with series going on and off. [#7804](https://github.com/prometheus/prometheus/pull/7804)
* [BUGFIX] UI: Fix styling bug for target labels with special names in React UI. [#7902](https://github.com/prometheus/prometheus/pull/7902)
* [BUGFIX] Web: Stop CMUX and GRPC servers even with stale connections, preventing the server to stop on SIGTERM. [#7810](https://github.com/prometheus/prometheus/pull/7810)
* [BUGFIX] SD: Reduce the Consul watch timeout to 2m and adjust the request timeout accordingly. [#7724](https://github.com/prometheus/prometheus/pull/7724)
This release changes WAL compression from opt-in to default. WAL compression will prevent a downgrade to v2.10 or earlier without deleting the WAL. Disable WAL compression explicitly by setting the command line flag `--no-storage.tsdb.wal-compression` if you require downgrading to v2.10 or earlier.
* [CHANGE] promtool: Changed rule numbering from 0-based to 1-based when reporting rule errors. [#7495](https://github.com/prometheus/prometheus/pull/7495)
* [FEATURE] SD: Added Openstack config option to query alternative endpoints. [#7494](https://github.com/prometheus/prometheus/pull/7494)
* [ENHANCEMENT] Configuration: Exit early on invalid config file and signal it with exit code 2. [#7399](https://github.com/prometheus/prometheus/pull/7399)
* [ENHANCEMENT] PromQL: `without` is now a valid metric identifier. [#7533](https://github.com/prometheus/prometheus/pull/7533)
* [ENHANCEMENT] PromQL: Optimized regex label matching for literals within the pattern or as prefix/suffix. [#7453](https://github.com/prometheus/prometheus/pull/7453) [#7503](https://github.com/prometheus/prometheus/pull/7503)
* [ENHANCEMENT] promtool: Added time range parameters for labels API in promtool. [#7463](https://github.com/prometheus/prometheus/pull/7463)
* [ENHANCEMENT] Remote write: Include samples waiting in channel in pending samples metric. Log number of dropped samples on hard shutdown. [#7335](https://github.com/prometheus/prometheus/pull/7335)
* [ENHANCEMENT] Scrape: Ingest synthetic scrape report metrics atomically with the corresponding scraped metrics. [#7562](https://github.com/prometheus/prometheus/pull/7562)
* [ENHANCEMENT] SD: Reduce timeouts for Openstack SD. [#7507](https://github.com/prometheus/prometheus/pull/7507)
* [ENHANCEMENT] SD: Use 10m timeout for Consul watches. [#7423](https://github.com/prometheus/prometheus/pull/7423)
* [ENHANCEMENT] SD: Added AMI meta label for EC2 SD. [#7386](https://github.com/prometheus/prometheus/pull/7386)
* [ENHANCEMENT] TSDB: Increment WAL corruption metric also on WAL corruption during checkpointing. [#7491](https://github.com/prometheus/prometheus/pull/7491)
* [ENHANCEMENT] TSDB: Improved query performance for high-cardinality labels. [#7448](https://github.com/prometheus/prometheus/pull/7448)
* [ENHANCEMENT] UI: Display dates as well as timestamps in status page. [#7544](https://github.com/prometheus/prometheus/pull/7544)
* [ENHANCEMENT] UI: Improved scrolling when following hash-fragment links. [#7456](https://github.com/prometheus/prometheus/pull/7456)
* [ENHANCEMENT] UI: React UI renders numbers in alerts in a more human-readable way. [#7426](https://github.com/prometheus/prometheus/pull/7426)
* [BUGFIX] API: Fixed error status code in the query API. [#7435](https://github.com/prometheus/prometheus/pull/7435)
* [BUGFIX] PromQL: Fixed `avg` and `avg_over_time` for NaN, Inf, and float64 overflows. [#7346](https://github.com/prometheus/prometheus/pull/7346)
* [BUGFIX] PromQL: Fixed off-by-one error in `histogram_quantile`. [#7393](https://github.com/prometheus/prometheus/pull/7393)
* [BUGFIX] promtool: Support extended durations in rules unit tests. [#6297](https://github.com/prometheus/prometheus/pull/6297)
* [BUGFIX] Scrape: Fix undercounting for `scrape_samples_post_metric_relabeling` in case of errors. [#7342](https://github.com/prometheus/prometheus/pull/7342)
* [BUGFIX] TSDB: Don't panic on WAL corruptions. [#7550](https://github.com/prometheus/prometheus/pull/7550)
* [BUGFIX] TSDB: Fixed race between compact (gc, populate) and head append causing unknown symbol error. [#7560](https://github.com/prometheus/prometheus/pull/7560)
* [BUGFIX] TSDB: Fixed unknown symbol error during head compaction. [#7526](https://github.com/prometheus/prometheus/pull/7526)
* [BUGFIX] TSDB: Fixed panic during TSDB metric registration. [#7501](https://github.com/prometheus/prometheus/pull/7501)
* [BUGFIX] TSDB: Fixed `--limit` command line flag in `tsdb` tool. [#7430](https://github.com/prometheus/prometheus/pull/7430)
* [FEATURE] TSDB: Memory-map full chunks of Head (in-memory) block from disk. This reduces memory footprint and makes restarts faster. [#6679](https://github.com/prometheus/prometheus/pull/6679)
* [ENHANCEMENT] Discovery: Added discovery support for Triton global zones. [#7250](https://github.com/prometheus/prometheus/pull/7250)
* [ENHANCEMENT] Increased alert resend delay to be more tolerant towards failures. [#7228](https://github.com/prometheus/prometheus/pull/7228)
* [ENHANCEMENT] Remote Read: Added `prometheus_remote_storage_remote_read_queries_total` counter to count total number of remote read queries. [#7328](https://github.com/prometheus/prometheus/pull/7328)
* [ENHANCEMEMT] Added time range parameters for label names and label values API. [#7288](https://github.com/prometheus/prometheus/pull/7288)
* [ENHANCEMENT] TSDB: Reduced contention in isolation for high load. [#7332](https://github.com/prometheus/prometheus/pull/7332)
* [BUGFIX] PromQL: Eliminated collision while checking for duplicate labels. [#7058](https://github.com/prometheus/prometheus/pull/7058)
* [BUGFIX] React UI: Don't null out data when clicking on the current tab. [#7243](https://github.com/prometheus/prometheus/pull/7243)
* [BUGFIX] PromQL: Correctly track number of samples for a query. [#7307](https://github.com/prometheus/prometheus/pull/7307)
* [BUGFIX] PromQL: Return NaN when histogram buckets have 0 observations. [#7318](https://github.com/prometheus/prometheus/pull/7318)
* [BUGFIX] TSDB: Fix incorrect query results when using Prometheus with remote reads configured [#7361](https://github.com/prometheus/prometheus/pull/7361)
* [CHANGE] Federation: Only use local TSDB for federation (ignore remote read). [#7096](https://github.com/prometheus/prometheus/pull/7096)
* [CHANGE] Rules: `rule_evaluations_total` and `rule_evaluation_failures_total` have a `rule_group` label now. [#7094](https://github.com/prometheus/prometheus/pull/7094)
* [FEATURE] Tracing: Added experimental Jaeger support [#7148](https://github.com/prometheus/prometheus/pull/7148)
* [ENHANCEMENT] TSDB: Significantly reduce WAL size kept around after a block cut. [#7098](https://github.com/prometheus/prometheus/pull/7098)
* [ENHANCEMENT] Discovery: Add `architecture` meta label for EC2. [#7000](https://github.com/prometheus/prometheus/pull/7000)
* [BUGFIX] UI: Fixed wrong MinTime reported by /status. [#7182](https://github.com/prometheus/prometheus/pull/7182)
* [BUGFIX] React UI: Fixed multiselect legend on OSX. [#6880](https://github.com/prometheus/prometheus/pull/6880)
* [BUGFIX] TSDB: Make isolation more robust to panics in web handlers [#7129](https://github.com/prometheus/prometheus/pull/7129) [#7136](https://github.com/prometheus/prometheus/pull/7136)
* [BUGFIX] PromQL: Do not escape HTML-like chars in query log [#6834](https://github.com/prometheus/prometheus/pull/6834) [#6795](https://github.com/prometheus/prometheus/pull/6795)
* [BUGFIX] Remote write: Register WAL watcher and live reader metrics for all remotes, not just the first one [#6998](https://github.com/prometheus/prometheus/pull/6998)
* [BUGFIX] Scrape: Prevent removal of metric names upon relabeling [#6891](https://github.com/prometheus/prometheus/pull/6891)
* [BUGFIX] Scrape: Fix 'superfluous response.WriteHeader call' errors when scrape fails under some circonstances [#6986](https://github.com/prometheus/prometheus/pull/6986)
* [BUGFIX] Scrape: Fix crash when reloads are separated by two scrape intervals [#7011](https://github.com/prometheus/prometheus/pull/7011)
* [ENHANCEMENT] TSDB: Export metric for WAL write errors [#6647](https://github.com/prometheus/prometheus/pull/6647)
* [ENHANCEMENT] TSDB: Improve query performance for queries that only touch the most recent 2h of data. [#6651](https://github.com/prometheus/prometheus/pull/6651)
* [ENHANCEMENT] PromQL: Refactoring in parser errors to improve error messages [#6634](https://github.com/prometheus/prometheus/pull/6634)
* [ENHANCEMENT] PromQL: Support trailing commas in grouping opts [#6480](https://github.com/prometheus/prometheus/pull/6480)
* [ENHANCEMENT] Scrape: Reduce memory usage on reloads by reusing scrape cache [#6670](https://github.com/prometheus/prometheus/pull/6670)
* [ENHANCEMENT] Scrape: Add metrics to track bytes and entries in the metadata cache [#6675](https://github.com/prometheus/prometheus/pull/6675)
* [ENHANCEMENT] promtool: Add support for line-column numbers for invalid rules output [#6533](https://github.com/prometheus/prometheus/pull/6533)
* [ENHANCEMENT] Avoid restarting rule groups when it is unnecessary [#6450](https://github.com/prometheus/prometheus/pull/6450)
* [BUGFIX] React UI: Send cookies on fetch() on older browsers [#6553](https://github.com/prometheus/prometheus/pull/6553)
* [BUFGIX] React UI: broken graph page browser history so that back button works as expected [#6659](https://github.com/prometheus/prometheus/pull/6659)
* [BUGFIX] TSDB: ensure compactionsSkipped metric is registered, and log proper error if one is returned from head.Init [#6616](https://github.com/prometheus/prometheus/pull/6616)
* [BUGFIX] TSDB: return an error on ingesting series with duplicate labels [#6664](https://github.com/prometheus/prometheus/pull/6664)
* [BUGFIX] PromQL: Respect query.timeout even when we reach query.max-concurrency [#6712](https://github.com/prometheus/prometheus/pull/6712)
* [BUGFIX] PromQL: Fix string and parentheses handling in engine, which affected React UI [#6612](https://github.com/prometheus/prometheus/pull/6612)
* [BUGFIX] PromQL: Remove output labels returned by absent() if they are produced by multiple identical label matchers [#6493](https://github.com/prometheus/prometheus/pull/6493)
* [BUGFIX] Scrape: Validate that OpenMetrics input ends with `# EOF` [#6505](https://github.com/prometheus/prometheus/pull/6505)
* [BUGFIX] Remote read: return the correct error if configs can't be marshal'd to JSON [#6622](https://github.com/prometheus/prometheus/pull/6622)
* [BUGFIX] Remote write: Make remote client `Store` use passed context, which can affect shutdown timing [#6673](https://github.com/prometheus/prometheus/pull/6673)
* [BUGFIX] Remote write: Improve sharding calculation in cases where we would always be consistently behind by tracking pendingSamples [#6511](https://github.com/prometheus/prometheus/pull/6511)
* [BUGFIX] Ensure prometheus_rule_group metrics are deleted when a rule group is removed [#6693](https://github.com/prometheus/prometheus/pull/6693)
* [CHANGE] Discovery: Removed `prometheus_sd_kubernetes_cache_*` metrics. Additionally `prometheus_sd_kubernetes_workqueue_latency_seconds` and `prometheus_sd_kubernetes_workqueue_work_duration_seconds` metrics now show correct values in seconds. [#6393](https://github.com/prometheus/prometheus/pull/6393)
* [CHANGE] Remote write: Changed `query` label on `prometheus_remote_storage_*` metrics to `remote_name` and `url`. [#6043](https://github.com/prometheus/prometheus/pull/6043)
* [FEATURE] API: Added new endpoint for exposing per metric metadata `/metadata`. [#6420](https://github.com/prometheus/prometheus/pull/6420) [#6442](https://github.com/prometheus/prometheus/pull/6442)
* [ENHANCEMENT] TSDB: Significantly optimized what we buffer during compaction which should result in lower memory footprint during compaction. [#6422](https://github.com/prometheus/prometheus/pull/6422) [#6452](https://github.com/prometheus/prometheus/pull/6452) [#6468](https://github.com/prometheus/prometheus/pull/6468) #6475
* [ENHANCEMENT] TSDB: WAL size is now used for size based retention calculation. [#5886](https://github.com/prometheus/prometheus/pull/5886)
* [ENHANCEMENT] Remote read: Added query grouping and range hints to the remote read request [#6401](https://github.com/prometheus/prometheus/pull/6401)
* [ENHANCEMENT] Remote write: Added `prometheus_remote_storage_sent_bytes_total` counter per queue. [#6344](https://github.com/prometheus/prometheus/pull/6344)
* [ENHANCEMENT] React UI: Implemented missing pages like `/targets` [#6276](https://github.com/prometheus/prometheus/pull/6276), TSDB status page [#6281](https://github.com/prometheus/prometheus/pull/6281) [#6267](https://github.com/prometheus/prometheus/pull/6267) and many other fixes and performance improvements.
* [ENHANCEMENT] promql: Prometheus now accepts spaces between time range and square bracket. e.g `[ 5m]` [#6065](https://github.com/prometheus/prometheus/pull/6065)
* [BUGFIX] Config: Fixed alertmanager configuration to not miss targets when configurations are similar. [#6455](https://github.com/prometheus/prometheus/pull/6455)
* [BUGFIX] Remote write: Value of `prometheus_remote_storage_shards_desired` gauge shows raw value of desired shards and it's updated correctly. [#6378](https://github.com/prometheus/prometheus/pull/6378)
* [BUGFIX] Rules: Prometheus now fails the evaluation of rules and alerts where metric results collide with labels specified in `labels` field. [#6469](https://github.com/prometheus/prometheus/pull/6469)
* [BUGFIX] API: Targets Metadata API `/targets/metadata` now accepts empty `match_targets` parameter as in the spec. [#6303](https://github.com/prometheus/prometheus/pull/6303)
* [SECURITY/BUGFIX] UI: Ensure warnings from the API are escaped. [#6279](https://github.com/prometheus/prometheus/pull/6279)
* [FEATURE] API: `/api/v1/status/runtimeinfo` and `/api/v1/status/buildinfo` endpoints added for use by the React UI. [#6243](https://github.com/prometheus/prometheus/pull/6243)
* [FEATURE] React UI: implement the new experimental React based UI. [#5694](https://github.com/prometheus/prometheus/pull/5694) and many more
* [BUGFIX] Service discovery: errors are no longer logged on context cancellation. [#6116](https://github.com/prometheus/prometheus/pull/6116), [#6133](https://github.com/prometheus/prometheus/pull/6133)
* [SECURITY/BUGFIX] UI: Fix a Stored DOM XSS vulnerability with query history [CVE-2019-10215](http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-10215). [#6098](https://github.com/prometheus/prometheus/pull/6098)
* [CHANGE] Metrics: renamed prometheus_sd_configs_failed_total to prometheus_sd_failed_configs and changed to Gauge [#5254](https://github.com/prometheus/prometheus/pull/5254)
* [ENHANCEMENT] Include the tsdb tool in builds. [#6089](https://github.com/prometheus/prometheus/pull/6089)
* [ENHANCEMENT] Service discovery: add new node address types for kubernetes. [#5902](https://github.com/prometheus/prometheus/pull/5902)
* [ENHANCEMENT] UI: show warnings if query have returned some warnings. [#5964](https://github.com/prometheus/prometheus/pull/5964)
* [ENHANCEMENT] Remote write: reduce memory usage of the series cache. [#5849](https://github.com/prometheus/prometheus/pull/5849)
* [ENHANCEMENT] Remote read: use remote read streaming to reduce memory usage. [#5703](https://github.com/prometheus/prometheus/pull/5703)
* [ENHANCEMENT] Metrics: added metrics for remote write max/min/desired shards to queue manager. [#5787](https://github.com/prometheus/prometheus/pull/5787)
* [ENHANCEMENT] Promtool: show the warnings during label query. [#5924](https://github.com/prometheus/prometheus/pull/5924)
* [ENHANCEMENT] Promtool: improve error messages when parsing bad rules. [#5965](https://github.com/prometheus/prometheus/pull/5965)
* [ENHANCEMENT] Promtool: more promlint rules. [#5515](https://github.com/prometheus/prometheus/pull/5515)
* [BUGFIX] Promtool: fix recording inconsistency due to duplicate labels. [#6026](https://github.com/prometheus/prometheus/pull/6026)
* [BUGFIX] UI: fixes service-discovery view when accessed from unhealthy targets. [#5915](https://github.com/prometheus/prometheus/pull/5915)
* [BUGFIX] Metrics format: OpenMetrics parser crashes on short input. [#5939](https://github.com/prometheus/prometheus/pull/5939)
* [CHANGE] Remove `max_retries` from queue_config (it has been unused since rewriting remote-write to utilize the write-ahead-log). [#5649](https://github.com/prometheus/prometheus/pull/5649)
* [CHANGE] The meta file `BlockStats` no longer holds size information. This is now dynamically calculated and kept in memory. It also includes the meta file size which was not included before. tsdb#637
* [CHANGE] Renamed metric from `prometheus_tsdb_wal_reader_corruption_errors` to `prometheus_tsdb_wal_reader_corruption_errors_total`. tsdb#622
* [ENHANCEMENT] Query performance improvement: Efficient iteration and search in HashForLabels and HashWithoutLabels. [#5707](https://github.com/prometheus/prometheus/pull/5707)
* [ENHANCEMENT] Allow injection of arbitrary headers in promtool. [#4389](https://github.com/prometheus/prometheus/pull/4389)
* [ENHANCEMENT] Allow passing `external_labels` in alert unit tests groups. [#5608](https://github.com/prometheus/prometheus/pull/5608)
* [ENHANCEMENT] Allows globs for rules when unit testing. [#5595](https://github.com/prometheus/prometheus/pull/5595)
* [CHANGE/BUGFIX] API: Encode alert values as string to correctly represent Inf/NaN. [#5582](https://github.com/prometheus/prometheus/pull/5582)
* [FEATURE] Template expansion: Make external labels available as `$externalLabels` in alert and console template expansion. [#5463](https://github.com/prometheus/prometheus/pull/5463)
* [BUGFIX] Storage/remote: Remove queue-manager specific metrics if queue no longer exists. [#5445](https://github.com/prometheus/prometheus/pull/5445) [#5485](https://github.com/prometheus/prometheus/pull/5485) [#5555](https://github.com/prometheus/prometheus/pull/5555)
* [BUGFIX] Discovery/kubernetes: Use `service` rather than `ingress` as the name for the service workqueue. [#5520](https://github.com/prometheus/prometheus/pull/5520)
* [BUGFIX] Discovery/azure: Don't panic on a VM with a public IP. [#5587](https://github.com/prometheus/prometheus/pull/5587)
* [BUGFIX] Discovery/triton: Always read HTTP body to completion. [#5596](https://github.com/prometheus/prometheus/pull/5596)
* [BUGFIX] Web: Fixed Content-Type for js and css instead of using `/etc/mime.types`. [#5551](https://github.com/prometheus/prometheus/pull/5551)
* [ENHANCEMENT] Add GODEBUG and retention to the runtime page. [#5324](https://github.com/prometheus/prometheus/pull/5324) [#5322](https://github.com/prometheus/prometheus/pull/5322)
This release uses Write-Ahead Logging (WAL) for the remote_write API. This currently causes a slight increase in memory usage, which will be addressed in future releases.
* [CHANGE] Default time retention is used only when no size based retention is specified. These are flags where time retention is specified by the flag `--storage.tsdb.retention` and size retention by `--storage.tsdb.retention.size`. [#5216](https://github.com/prometheus/prometheus/pull/5216)
* [CHANGE] `prometheus_tsdb_storage_blocks_bytes_total` is now `prometheus_tsdb_storage_blocks_bytes`. prometheus/tsdb#506
* [FEATURE] [EXPERIMENTAL] Time overlapping blocks are now allowed; vertical compaction and vertical query merge. It is an optional feature which is controlled by the `--storage.tsdb.allow-overlapping-blocks` flag, disabled by default. prometheus/tsdb#370
* [ENHANCEMENT] UI enhancements with upgrade to Bootstrap 4. [#5226](https://github.com/prometheus/prometheus/pull/5226)
* [ENHANCEMENT] Reduce time that Alertmanagers are in flux when reloaded. [#5126](https://github.com/prometheus/prometheus/pull/5126)
* [ENHANCEMENT] Limit number of metrics displayed on UI to 10000. [#5139](https://github.com/prometheus/prometheus/pull/5139)
* [ENHANCEMENT] (1) Remember All/Unhealthy choice on target-overview when reloading page. (2) Resize text-input area on Graph page on mouseclick. [#5201](https://github.com/prometheus/prometheus/pull/5201)
* [ENHANCEMENT] In `histogram_quantile` merge buckets with equivalent le values. [#5158](https://github.com/prometheus/prometheus/pull/5158).
* [ENHANCEMENT] Show list of offending labels in the error message in many-to-many scenarios. [#5189](https://github.com/prometheus/prometheus/pull/5189)
* [ENHANCEMENT] Show `Storage Retention` criteria in effect on `/status` page. [#5322](https://github.com/prometheus/prometheus/pull/5322)
* [BUGFIX] Fix sorting of rule groups. [#5260](https://github.com/prometheus/prometheus/pull/5260)
* [BUGFIX] Fix support for password_file and bearer_token_file in Kubernetes SD. [#5211](https://github.com/prometheus/prometheus/pull/5211)
* [BUGFIX] Scrape: catch errors when creating HTTP clients [#5182](https://github.com/prometheus/prometheus/pull/5182). Adds new metrics:
* [BUGFIX] `prometheus_rule_group_last_evaluation_timestamp_seconds` is now a unix timestamp. [#5186](https://github.com/prometheus/prometheus/pull/5186)
This release has a fix for a Stored DOM XSS vulnerability that can be triggered when using the query history functionality. Thanks to Dor Tumarkin from Checkmarx for reporting it.
* [BUGFIX/SECURITY] Fix a Stored DOM XSS vulnerability with query history. [#5163](https://github.com/prometheus/prometheus/pull/5163)
* [BUGFIX] `prometheus_rule_group_last_duration_seconds` now reports seconds instead of nanoseconds. [#5153](https://github.com/prometheus/prometheus/pull/5153)
* [BUGFIX] Make sure the targets are consistently sorted in the targets page. [#5161](https://github.com/prometheus/prometheus/pull/5161)
We're rolling back the Dockerfile changes introduced in 2.6.0. If you made changes to your docker deployment in 2.6.0, you will need to roll them back. This release also adds experimental support for disk size based retention. To accommodate that we are deprecating the flag `storage.tsdb.retention` in favour of `storage.tsdb.retention.time`. We print a warning if the flag is in use, but it will function without breaking until Prometheus 3.0.
* [CHANGE] Rollback Dockerfile to version at 2.5.0. Rollback of the breaking change introduced in 2.6.0. [#5122](https://github.com/prometheus/prometheus/pull/5122)
* [FEATURE] Add subqueries to PromQL. [#4831](https://github.com/prometheus/prometheus/pull/4831)
* [FEATURE] [EXPERIMENTAL] Add support for disk size based retention. Note that we don't consider the WAL size which could be significant and the time based retention policy also applies. [#5109](https://github.com/prometheus/prometheus/pull/5109) prometheus/tsdb#343
* [FEATURE] Add CORS origin flag. [#5011](https://github.com/prometheus/prometheus/pull/5011)
* [ENHANCEMENT] Consul SD: Add tagged address to the discovery metadata. [#5001](https://github.com/prometheus/prometheus/pull/5001)
* [ENHANCEMENT] Kubernetes SD: Add service external IP and external name to the discovery metadata. [#4940](https://github.com/prometheus/prometheus/pull/4940)
* [ENHANCEMENT] Azure SD: Add support for Managed Identity authentication. [#4590](https://github.com/prometheus/prometheus/pull/4590)
* [ENHANCEMENT] Azure SD: Add tenant and subscription IDs to the discovery metadata. [#4969](https://github.com/prometheus/prometheus/pull/4969)
* [ENHANCEMENT] OpenStack SD: Add support for application credentials based authentication. [#4968](https://github.com/prometheus/prometheus/pull/4968)
* [ENHANCEMENT] Add metric for number of rule groups loaded. [#5090](https://github.com/prometheus/prometheus/pull/5090)
* [BUGFIX] Avoid duplicate tests for alert unit tests. [#4964](https://github.com/prometheus/prometheus/pull/4964)
* [BUGFIX] Don't depend on given order when comparing samples in alert unit testing. [#5049](https://github.com/prometheus/prometheus/pull/5049)
* [BUGFIX] Make sure the retention period doesn't overflow. [#5112](https://github.com/prometheus/prometheus/pull/5112)
* [BUGFIX] Make sure the blocks don't get very large. [#5112](https://github.com/prometheus/prometheus/pull/5112)
* [CHANGE] Remove default flags from the container's entrypoint, run Prometheus from `/etc/prometheus` and symlink the storage directory to `/etc/prometheus/data`. [#4976](https://github.com/prometheus/prometheus/pull/4976)
* [CHANGE] Promtool: Remove the `update` command. [#3839](https://github.com/prometheus/prometheus/pull/3839)
* [FEATURE] Add JSON log format via the `--log.format` flag. [#4876](https://github.com/prometheus/prometheus/pull/4876)
* [FEATURE] API: Add /api/v1/labels endpoint to get all label names. [#4835](https://github.com/prometheus/prometheus/pull/4835)
* [FEATURE] Web: Allow setting the page's title via the `--web.ui-title` flag. [#4841](https://github.com/prometheus/prometheus/pull/4841)
* [ENHANCEMENT] Add `prometheus_tsdb_lowest_timestamp_seconds`, `prometheus_tsdb_head_min_time_seconds` and `prometheus_tsdb_head_max_time_seconds` metrics. [#4888](https://github.com/prometheus/prometheus/pull/4888)
* [ENHANCEMENT] Add `prometheus_template_text_expansion_failures_total` and `prometheus_template_text_expansions_total` metrics. [#4747](https://github.com/prometheus/prometheus/pull/4747)
* [ENHANCEMENT] Set consistent User-Agent header in outgoing requests. [#4891](https://github.com/prometheus/prometheus/pull/4891)
* [ENHANCEMENT] Azure SD: Error out at load time when authentication parameters are missing. [#4907](https://github.com/prometheus/prometheus/pull/4907)
* [ENHANCEMENT] EC2 SD: Add the machine's private DNS name to the discovery metadata. [#4693](https://github.com/prometheus/prometheus/pull/4693)
* [ENHANCEMENT] EC2 SD: Add the operating system's platform to the discovery metadata. [#4663](https://github.com/prometheus/prometheus/pull/4663)
* [ENHANCEMENT] Kubernetes SD: Add the pod's phase to the discovery metadata. [#4824](https://github.com/prometheus/prometheus/pull/4824)
* [ENHANCEMENT] Remote Write: Add min_shards parameter to set the minimum number of shards. [#4924](https://github.com/prometheus/prometheus/pull/4924)
* [ENHANCEMENT] Web UI: group targets by job then instance. [#4898](https://github.com/prometheus/prometheus/pull/4898) [#4806](https://github.com/prometheus/prometheus/pull/4806)
* [BUGFIX] Marathon SD: Use 'hostPort' member of portMapping to construct target endpoints. [#4887](https://github.com/prometheus/prometheus/pull/4887)
* [BUGFIX] PromQL: Fix a goroutine leak in the lexer/parser. [#4858](https://github.com/prometheus/prometheus/pull/4858)
* [BUGFIX] Scrape: Pass through content-type for non-compressed output. [#4912](https://github.com/prometheus/prometheus/pull/4912)
* [BUGFIX] Scrape: Fix deadlock in the scrape's manager. [#4894](https://github.com/prometheus/prometheus/pull/4894)
* [BUGFIX] Scrape: Scrape targets at fixed intervals even after Prometheus restarts. [#4926](https://github.com/prometheus/prometheus/pull/4926)
* [BUGFIX] TSDB: Support restored snapshots including the head properly. [#4953](https://github.com/prometheus/prometheus/pull/4953)
* [BUGFIX] TSDB: Repair WAL when the last record in a segment is torn. [#4953](https://github.com/prometheus/prometheus/pull/4953)
* [BUGFIX] TSDB: Fix unclosed file readers on Windows systems. [#4997](https://github.com/prometheus/prometheus/pull/4997)
* [BUGFIX] Web: Avoid proxy to connect to the local gRPC server. [#4572](https://github.com/prometheus/prometheus/pull/4572)
* [CHANGE] Group targets by scrape config instead of job name. [#4806](https://github.com/prometheus/prometheus/pull/4806) [#4526](https://github.com/prometheus/prometheus/pull/4526)
* [CHANGE] Marathon SD: Various changes to adapt to Marathon 1.5+. [#4499](https://github.com/prometheus/prometheus/pull/4499)
* [CHANGE] Discovery: Split `prometheus_sd_discovered_targets` metric by scrape and notify (Alertmanager SD) as well as by section in the respective configuration. [#4753](https://github.com/prometheus/prometheus/pull/4753)
* [FEATURE] Add OpenMetrics support for scraping (EXPERIMENTAL). [#4700](https://github.com/prometheus/prometheus/pull/4700)
* [FEATURE] Add unit testing for rules. [#4350](https://github.com/prometheus/prometheus/pull/4350)
* [FEATURE] Make maximum number of samples per query configurable via `--query.max-samples` flag. [#4513](https://github.com/prometheus/prometheus/pull/4513)
* [FEATURE] Make maximum number of concurrent remote reads configurable via `--storage.remote.read-concurrent-limit` flag. [#4656](https://github.com/prometheus/prometheus/pull/4656)
* [ENHANCEMENT] Support s390x platform for Linux. [#4605](https://github.com/prometheus/prometheus/pull/4605)
* [ENHANCEMENT] API: Add `prometheus_api_remote_read_queries` metric tracking currently executed or waiting remote read API requests. [#4699](https://github.com/prometheus/prometheus/pull/4699)
* [ENHANCEMENT] Discovery: Add `prometheus_sd_discovered_targets`, `prometheus_sd_received_updates_total`, `prometheus_sd_updates_delayed_total`, and `prometheus_sd_updates_total` metrics for discovery subsystem. [#4667](https://github.com/prometheus/prometheus/pull/4667)
* [ENHANCEMENT] Discovery: Improve performance of previously slow updates of changes of targets. [#4526](https://github.com/prometheus/prometheus/pull/4526)
* [ENHANCEMENT] OpenStack SD: Support discovering instances from all projects. [#4682](https://github.com/prometheus/prometheus/pull/4682)
* [ENHANCEMENT] OpenStack SD: Discover all interfaces. [#4649](https://github.com/prometheus/prometheus/pull/4649)
* [ENHANCEMENT] OpenStack SD: Support `tls_config` for the used HTTP client. [#4654](https://github.com/prometheus/prometheus/pull/4654)
* [ENHANCEMENT] Triton SD: Add ability to filter triton_sd targets by pre-defined groups. [#4701](https://github.com/prometheus/prometheus/pull/4701)
* [ENHANCEMENT] Web UI: Avoid browser spell-checking in expression field. [#4728](https://github.com/prometheus/prometheus/pull/4728)
* [ENHANCEMENT] Web UI: Add scrape duration and last evaluation time in targets and rules pages. [#4722](https://github.com/prometheus/prometheus/pull/4722)
* [ENHANCEMENT] Web UI: Improve rule view by wrapping lines. [#4702](https://github.com/prometheus/prometheus/pull/4702)
* [ENHANCEMENT] Rules: Error out at load time for invalid templates, rather than at evaluation time. [#4537](https://github.com/prometheus/prometheus/pull/4537)
* [ENHANCEMENT] TSDB: Add metrics for WAL operations. [#4692](https://github.com/prometheus/prometheus/pull/4692)
* [BUGFIX] Change max/min over_time to handle NaNs properly. [#4386](https://github.com/prometheus/prometheus/pull/4386)
* [BUGFIX] Check label name for `count_values` PromQL function. [#4585](https://github.com/prometheus/prometheus/pull/4585)
* [BUGFIX] Ensure that vectors and matrices do not contain identical label-sets. [#4589](https://github.com/prometheus/prometheus/pull/4589)
This release includes multiple bugfixes and features. Further, the WAL implementation has been re-written so the storage is not forward compatible. Prometheus 2.3 storage will work on 2.4 but not vice-versa.
* [ENHANCEMENT] `promtool`: Add new commands for debugging and querying [#4247](https://github.com/prometheus/prometheus/pull/4247) [#4308](https://github.com/prometheus/prometheus/pull/4308) [#4346](https://github.com/prometheus/prometheus/pull/4346) #4454
* [ENHANCEMENT] `azure_sd`: Add support for VMSS discovery and multiple environments [#4202](https://github.com/prometheus/prometheus/pull/4202) [#4569](https://github.com/prometheus/prometheus/pull/4569)
* [CHANGE] `marathon_sd`: use `auth_token` and `auth_token_file` for token-based authentication instead of `bearer_token` and `bearer_token_file` respectively.
* [CHANGE] Metric names for HTTP server metrics changed
* [ENHANCEMENT] `marathon_sd`: adds support for basic and bearer authentication, plus all other common HTTP client options (TLS config, proxy URL, etc.)
* [CHANGE] Completely rewritten storage layer, with WAL. This is not backwards compatible with 1.x storage, and many flags have changed/disappeared.
* [CHANGE] New staleness behavior. Series now marked stale after target scrapes no longer return them, and soon after targets disappear from service discovery.
* [CHANGE] Rules files use YAML syntax now. Conversion tool added to promtool.
* [CHANGE] Removed `count_scalar`, `drop_common_labels` functions and `keep_common` modifier from PromQL.
* [CHANGE] Rewritten exposition format parser with much higher performance. The Protobuf exposition format is no longer supported.
* [CHANGE] Example console templates updated for new storage and metrics names. Examples other than node exporter and Prometheus removed.