Here is a list of features that are disabled by default since they are breaking changes or are considered experimental. Their behaviour can change in future releases which will be communicated via the release changelog.
You can enable them using the
--enable-feature flag with a comma separated list of features.
They may be enabled by default in future versions.
$var in the
values according to the values of the current environment variables. References
to undefined variables are replaced by the empty string.
$ character can be escaped by using
The remote write receiver allows Prometheus to accept remote write requests from other Prometheus servers. More details can be found here.
Activating the remote write receiver via a feature flag is deprecated. Use
--web.enable-remote-write-receiver instead. This feature flag will be ignored in future versions of Prometheus.
OpenMetrics introduces the ability for scrape targets to add exemplars to certain metrics. Exemplars are references to data outside of the MetricSet. A common use case are IDs of program traces.
Exemplar storage is implemented as a fixed size circular buffer that stores exemplars in memory for all series. Enabling this feature will enable the storage of exemplars scraped by Prometheus. The config file block storage/exemplars can be used to control the size of circular buffer by # of exemplars. An exemplar with just a
traceID=<jaeger-trace-id> uses roughly 100 bytes of memory via the in-memory exemplar storage. If the exemplar storage is enabled, we will also append the exemplars to WAL for local persistence (for WAL duration).
This takes the snapshot of the chunks that are in memory along with the series information when shutting down and stores it on disk. This will reduce the startup time since the memory state can be restored with this snapshot and m-mapped chunks without the need of WAL replay.
When enabled, for each instance scrape, Prometheus stores a sample in the following additional time series:
scrape_timeout_seconds. The configured
scrape_timeoutfor a target. This allows you to measure each target to find out how close they are to timing out with
scrape_duration_seconds / scrape_timeout_seconds.
scrape_sample_limit. The configured
sample_limitfor a target. This allows you to measure each target to find out how close they are to reaching the limit with
scrape_samples_post_metric_relabeling / scrape_sample_limit. Note that
scrape_sample_limitcan be zero if there is no limit configured, which means that the query above can return
+Inffor targets with no limit (as we divide by zero). If you want to query only for targets that do have a sample limit use this query:
scrape_samples_post_metric_relabeling / (scrape_sample_limit > 0).
scrape_body_size_bytes. The uncompressed size of the most recent scrape response, if successful. Scrapes failing because
body_size_limitis exceeded report
-1, other scrape failures report
When enabled, Prometheus uses a new service discovery manager that does not restart unchanged discoveries upon reloading. This makes reloads faster and reduces pressure on service discoveries' sources.
Users are encouraged to test the new service discovery manager and report any issues upstream.
In future releases, this new service discovery manager will become the default and this feature flag will be ignored.
When enabled, Prometheus runs in agent mode. The agent mode is limited to discovery, scrape and remote write.
This is useful when you do not need to query the Prometheus data locally, but only from a central remote endpoint.
When enabled, passing
stats=all in a query request returns per-step
statistics. Currently this is limited to totalQueryableSamples.
When disabled in either the engine or the query, per-step statistics are not computed at all.
When enabled, GOMAXPROCS variable is automatically set to match Linux container CPU quota.
When enabled, the default ports for HTTP (
:80) or HTTPS (
:443) will not be added to
the address used to scrape a target (the value of the
__address_ label), contrary to the default behavior.
In addition, if a default HTTP or HTTPS port has already been added either in a static configuration or
by a service discovery mechanism and the respective scheme is specified (
https), that port will be removed.
When enabled, Prometheus will ingest native histograms (formerly also known as sparse histograms or high-res histograms). Native histograms are still highly experimental. Expect breaking changes to happen (including those rendering the TSDB unreadable).
Native histograms are currently only supported in the traditional Prometheus
protobuf exposition format. This feature flag therefore also enables a new (and
also experimental) protobuf parser, through which all metrics are ingested
(i.e. not only native histograms). Prometheus will try to negotiate the
protobuf format first. The instrumented target needs to support the protobuf
format, too, and it needs to expose native histograms. The protobuf format
allows to expose conventional and native histograms side by side. With this
feature flag disabled, Prometheus will continue to parse the conventional
histogram (albeit via the text format). With this flag enabled, Prometheus will
still ingest those conventional histograms that do not come with a
corresponding native histogram. However, if a native histogram is present,
Prometheus will ignore the corresponding conventional histogram, with the
notable exception of exemplars, which are always ingested. To keep the
conventional histograms as well, enable
scrape_classic_histograms in the
Note about the format of
quantile label values:
In certain situations, the protobuf parsing changes the number formatting of
le labels of conventional histograms and the
quantile labels of
summaries. Typically, this happens if the scraped target is instrumented with
client_golang provided that
is set to
false. In such a case, integer label values are represented in the
text format as such, e.g.
le="2". However, the protobuf parsing
changes the representation to float-like (following the OpenMetrics
specification), so the examples above become
ingestion into Prometheus, which changes the identity of the metric compared to
what was ingested before via the text format.
The effect of this change is that alerts, recording rules and dashboards that
directly reference label values as whole numbers such as
le="1" will stop
Aggregation by the
quantile labels for vectors that contain the old and
new formatting will lead to unexpected results, and range vectors that span the
transition between the different formatting will contain additional series.
The most common use case for both is the quantile calculation via
histogram_quantile(0.95, sum by (le) (rate(histogram_bucket[10m]))).
histogram_quantile function already tries to mitigate the effects to some
extent, but there will be inaccuracies, in particular for shorter ranges that
cover only a few samples.
Ways to deal with this change either globally or on a per metric basis:
quantilelabel values, but otherwise do nothing and accept that some queries that span the transition time will produce inaccurate or unexpected results. This is the recommended solution, to get consistently normalized label values. Also Prometheus 3.0 is expected to enforce normalization of these label values.
metric_relabel_configto retain the old labels when scraping targets. This should only be applied to metrics that currently produce such labels.
metric_relabel_configs: - source_labels: - quantile target_label: quantile regex: (\d+)\.0+ - source_labels: - le - __name__ target_label: le regex: (\d+)\.0+;.*_bucket
The OTLP receiver allows Prometheus to accept OpenTelemetry metrics writes.
Prometheus is best used as a Pull based system, and staleness,
up metric, and other Pull enabled features
won't work when you push OTLP metrics.
This documentation is open-source. Please help improve it by filing issues or pull requests.