docs/configuration/v1-guarantees.md
For the v1.0 release, we want to provide the following guarantees:
Upgrading cortex from one minor version to the next should "just work"; that being said, we don't want to bump the major version every time we remove a flag, so we will will keep deprecated flags around for 2 minor release. There is a metric (deprecated_flags_inuse_total) you can alert on to find out if you're using a deprecated flag.
Similarly to flags, minor version upgrades using config files should "just work". If we do need to change config, we will keep the old way working for two minor version. There will be a metric you can alert on for this too.
These guarantees don't apply for experimental features.
The Cortex maintainers commit to ensuring future version of Cortex can read data written by versions up to two years old. In practice we expect to be able to read more, but this is our guarantee.
Cortex strives to be 100% API compatible with Prometheus (under /prometheus/* and /api/prom/*); any deviation from this is considered a bug, except:
/api/push).Cortex is an actively developed project and we want to encourage the introduction of new features and capability. As such, not everything in each release of Cortex is considered "production-ready". We don't provide any backwards compatibility guarantees on these and the config and flags might break.
Currently experimental features are:
-ruler.frontend-address).-ruler.frontend-address is specified, the response format can be specified (via -ruler.query-response-format).-alertmanager.receivers-firewall.*)-ingester.unregister-on-shutdown=false)-distributor.extend-writes=false)-experimental.distributor.ha-tracker.mixed-ha-samples=true)-distributor.remote-writev2-enabled=true)-tenant-federation.regex-matcher-enabled-tenant-federation.user-sync-interval-tenant-federation.allow-partial-data-alertmanager.notification-rate-limit and -alertmanager.notification-rate-limit-per-integration)-alertmanager.max-dispatcher-aggregation-groups)-alertmanager.max-config-size-bytes)-alertmanager.max-templates-count)-alertmanager.max-template-size-bytes)-distributor.ring.heartbeat-timeout=0-ring.heartbeat-timeout=0-ruler.ring.heartbeat-timeout=0-alertmanager.sharding-ring.heartbeat-timeout=0-compactor.ring.heartbeat-timeout=0-store-gateway.sharding-ring.heartbeat-timeout=0-distributor.ring.heartbeat-period=0-ingester.heartbeat-period=0-ruler.ring.heartbeat-period=0-alertmanager.sharding-ring.heartbeat-period=0-compactor.ring.heartbeat-period=0-store-gateway.sharding-ring.heartbeat-period=0-frontend.query-vertical-shard-size (int) CLI flagquery_vertical_shard_size (int) field in runtime config file-blocks-storage.tsdb.memory-snapshot-on-shutdown (boolean) CLI flag-blocks-storage.tsdb.out-of-order-cap-max (int) CLI flag-ingester.out-of-order-time-window (duration) CLI flagout_of_order_time_window (duration) field in runtime config file-store-gateway.sharding-ring.zone-stable-shuffle-sharding CLI flagzone_stable_shuffle_sharding (boolean) field in config file-ruler.ring.final-sleep (duration) CLI flagstore-gateway.sharding-ring.final-sleep (duration) CLI flagalertmanager-sharding-ring.final-sleep (duration) CLI flag-distributor.otlp.allow-delta-temporality=true)-ruler.ring.tokens-file-path (path) CLI flag-blocks-storage.tsdb.enable-native-histograms=true on Ingester.-ingester.labels-string-interning-enabled on Ingester.-frontend.query-rejection.enabled)-api.querier-default-codec)-querier.store-gateway-series-batch-size)querier.max-shards-per-query (int) CLI flagquerier.max-fetched-data-duration-per-query (duration) CLI flag-ingester.query-protection.rejection-store-gateway.query-protection.rejection-distributor.use-stream-push=true on Distributor.__type__ and __unit__ labels to OTLP and remote write v2 requests (-distributor.enable-type-and-unit-labels)-ingester.active-queried-series-metrics-enabled=true-ingester.active-queried-series-metrics-windows=2h. At least 1 time window is required to expose the metric.-ingester.active-queried-series-metrics-update-period metric update interval-ingester.active-queried-series-metrics-window-duration each HyperLogLog time window size-ingester.active-queried-series-metrics-sample-rate query sampling rate-ingester.enable-regex-matcher-limits=true-validation.max-regex-pattern-length (int) - maximum pattern length in bytes-validation.max-label-cardinality-for-unoptimized-regex (int) - maximum label cardinality-validation.max-total-label-value-length-for-unoptimized-regex (int) - maximum total length of all label values in bytes-distributor.ha-tracker.enable-startup-sync (bool) - If enabled, fetches all tracked keys on startup to populate the local cache.