From b9aefcb5225e47af667d135445c9e56d6296822f Mon Sep 17 00:00:00 2001 From: Nikos Angelopoulos Date: Wed, 20 Nov 2024 15:42:45 +0100 Subject: [PATCH 1/4] chore: bump dskit vendor to include latest changes related with StoreConfig memberlistKVConfig options --- go.mod | 2 +- go.sum | 4 ++-- vendor/github.com/grafana/dskit/kv/client.go | 8 +++++--- vendor/modules.txt | 2 +- 4 files changed, 9 insertions(+), 7 deletions(-) diff --git a/go.mod b/go.mod index 33478718e47..45cee6dc9f9 100644 --- a/go.mod +++ b/go.mod @@ -22,7 +22,7 @@ require ( github.com/golang/snappy v0.0.4 github.com/google/gopacket v1.1.19 github.com/gorilla/mux v1.8.1 - github.com/grafana/dskit v0.0.0-20241115082728-f2a7eb3aa0e9 + github.com/grafana/dskit v0.0.0-20241120124643-f9da7284b699 github.com/grafana/e2e v0.1.2-0.20240118170847-db90b84177fc github.com/hashicorp/golang-lru v1.0.2 // indirect github.com/json-iterator/go v1.1.12 diff --git a/go.sum b/go.sum index ffed0275ef0..99223cf2eaf 100644 --- a/go.sum +++ b/go.sum @@ -1264,8 +1264,8 @@ github.com/grafana-tools/sdk v0.0.0-20220919052116-6562121319fc h1:PXZQA2WCxe85T github.com/grafana-tools/sdk v0.0.0-20220919052116-6562121319fc/go.mod h1:AHHlOEv1+GGQ3ktHMlhuTUwo3zljV3QJbC0+8o2kn+4= github.com/grafana/alerting v0.0.0-20241021123319-be61d61f71e7 h1:lsM/QscEX+ZDIJm48ynQscH+msETyGYV6ug8L4f2DtM= github.com/grafana/alerting v0.0.0-20241021123319-be61d61f71e7/go.mod h1:QsnoKX/iYZxA4Cv+H+wC7uxutBD8qi8ZW5UJvD2TYmU= -github.com/grafana/dskit v0.0.0-20241115082728-f2a7eb3aa0e9 h1:Dx7+6aU/fhwD2vkMr0PUcyxGat1sjUssHAKQKaS7sDM= -github.com/grafana/dskit v0.0.0-20241115082728-f2a7eb3aa0e9/go.mod h1:SPLNCARd4xdjCkue0O6hvuoveuS1dGJjDnfxYe405YQ= +github.com/grafana/dskit v0.0.0-20241120124643-f9da7284b699 h1:4omYHnhrWZWKnDoBGlzK5aAe3tZA7C4ObZZltBcGCgc= +github.com/grafana/dskit v0.0.0-20241120124643-f9da7284b699/go.mod h1:SPLNCARd4xdjCkue0O6hvuoveuS1dGJjDnfxYe405YQ= github.com/grafana/e2e v0.1.2-0.20240118170847-db90b84177fc h1:BW+LjKJDz0So5LI8UZfW5neWeKpSkWqhmGjQFzcFfLM= github.com/grafana/e2e v0.1.2-0.20240118170847-db90b84177fc/go.mod h1:JVmqPBe8A/pZWwRoJW5ZjyALeY5OXMzPl7LrVXOdZAI= github.com/grafana/franz-go v0.0.0-20241009100846-782ba1442937 h1:fwwnG/NcygoS6XbAaEyK2QzMXI/BZIEJvQ3CD+7XZm8= diff --git a/vendor/github.com/grafana/dskit/kv/client.go b/vendor/github.com/grafana/dskit/kv/client.go index 0599f670213..a61f5670805 100644 --- a/vendor/github.com/grafana/dskit/kv/client.go +++ b/vendor/github.com/grafana/dskit/kv/client.go @@ -42,9 +42,10 @@ var ( // Consul, Etcd, Memberlist or MultiClient. It was extracted from Config to keep // single-client config separate from final client-config (with all the wrappers) type StoreConfig struct { - Consul consul.Config `yaml:"consul"` - Etcd etcd.Config `yaml:"etcd"` - Multi MultiConfig `yaml:"multi"` + Consul consul.Config `yaml:"consul"` + Etcd etcd.Config `yaml:"etcd"` + MemberlistKVConfig memberlist.KVConfig `yaml:"memberlist"` + Multi MultiConfig `yaml:"multi"` // Function that returns memberlist.KV store to use. By using a function, we can delay // initialization of memberlist.KV until it is actually required. @@ -74,6 +75,7 @@ func (cfg *Config) RegisterFlagsWithPrefix(flagsPrefix, defaultPrefix string, f cfg.Consul.RegisterFlags(f, flagsPrefix) cfg.Etcd.RegisterFlagsWithPrefix(f, flagsPrefix) cfg.Multi.RegisterFlagsWithPrefix(f, flagsPrefix) + cfg.MemberlistKVConfig.RegisterFlagsWithPrefix(f, flagsPrefix) if flagsPrefix == "" { flagsPrefix = "ring." diff --git a/vendor/modules.txt b/vendor/modules.txt index 7ece36c7821..0f4886d6636 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -620,7 +620,7 @@ github.com/grafana/alerting/receivers/webex github.com/grafana/alerting/receivers/webhook github.com/grafana/alerting/receivers/wecom github.com/grafana/alerting/templates -# github.com/grafana/dskit v0.0.0-20241115082728-f2a7eb3aa0e9 +# github.com/grafana/dskit v0.0.0-20241120124643-f9da7284b699 ## explicit; go 1.21 github.com/grafana/dskit/backoff github.com/grafana/dskit/ballast From a7033665699178bda5e5267819bdbf32890e51a7 Mon Sep 17 00:00:00 2001 From: Nikos Angelopoulos Date: Wed, 20 Nov 2024 16:38:57 +0100 Subject: [PATCH 2/4] test: add ha_tracker test for configuring memberlist options --- pkg/distributor/ha_tracker_test.go | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/pkg/distributor/ha_tracker_test.go b/pkg/distributor/ha_tracker_test.go index 839ff6827c5..c8b2c20869c 100644 --- a/pkg/distributor/ha_tracker_test.go +++ b/pkg/distributor/ha_tracker_test.go @@ -28,6 +28,7 @@ import ( "github.com/prometheus/prometheus/model/timestamp" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "gopkg.in/yaml.v3" "github.com/grafana/mimir/pkg/mimirpb" utiltest "github.com/grafana/mimir/pkg/util/test" @@ -132,6 +133,26 @@ func TestHATrackerCacheSyncOnStart(t *testing.T) { assert.ErrorIs(t, err, replicasDidNotMatchError{replica: "r2", elected: "r1"}) } +func TestHATrackerConfig_RegisterFlags_memberlist(t *testing.T) { + cfg := ` +enable_ha_tracker: false +ha_tracker_update_timeout: 2s +ha_tracker_update_timeout_jitter_max: 2s +kvstore: + store: memberlist + memberlist: + node_name: testNode + randomize_node_name: true + stream_timeout: 2s +` + config := HATrackerConfig{} + err := yaml.Unmarshal([]byte(cfg), &config) + assert.NoError(t, err) + assert.Equal(t, "testNode", config.KVStore.MemberlistKVConfig.NodeName) + assert.Equal(t, true, config.KVStore.MemberlistKVConfig.RandomizeNodeName) + assert.Equal(t, 2*time.Second, config.KVStore.MemberlistKVConfig.StreamTimeout) +} + func TestHATrackerConfig_Validate(t *testing.T) { t.Parallel() From 66314857077be59844f54e739a217d97728f288e Mon Sep 17 00:00:00 2001 From: Nikos Angelopoulos Date: Wed, 20 Nov 2024 17:35:35 +0100 Subject: [PATCH 3/4] chore: update config-descriptor and help.* templates --- cmd/mimir/config-descriptor.json | 9404 ++++++++++++++++++++-------- cmd/mimir/help-all.txt.tmpl | 800 +++ cmd/mimir/help.txt.tmpl | 120 + pkg/distributor/ha_tracker_test.go | 21 - 4 files changed, 7787 insertions(+), 2558 deletions(-) diff --git a/cmd/mimir/config-descriptor.json b/cmd/mimir/config-descriptor.json index 8aa0f702ec2..fab637b70b2 100644 --- a/cmd/mimir/config-descriptor.json +++ b/cmd/mimir/config-descriptor.json @@ -1126,374 +1126,432 @@ }, { "kind": "block", - "name": "multi", + "name": "memberlist", "required": false, "desc": "", "blockEntries": [ { "kind": "field", - "name": "primary", + "name": "node_name", "required": false, - "desc": "Primary backend storage used by multi-client.", + "desc": "Name of the node in memberlist cluster. Defaults to hostname.", "fieldValue": null, "fieldDefaultValue": "", - "fieldFlag": "distributor.ha-tracker.multi.primary", + "fieldFlag": "distributor.ha-tracker.memberlist.nodename", "fieldType": "string", "fieldCategory": "advanced" }, { "kind": "field", - "name": "secondary", + "name": "randomize_node_name", "required": false, - "desc": "Secondary backend storage used by multi-client.", + "desc": "Add random suffix to the node name.", "fieldValue": null, - "fieldDefaultValue": "", - "fieldFlag": "distributor.ha-tracker.multi.secondary", - "fieldType": "string", + "fieldDefaultValue": true, + "fieldFlag": "distributor.ha-tracker.memberlist.randomize-node-name", + "fieldType": "boolean", "fieldCategory": "advanced" }, { "kind": "field", - "name": "mirror_enabled", + "name": "stream_timeout", "required": false, - "desc": "Mirror writes to secondary store.", + "desc": "The timeout for establishing a connection with a remote node, and for read/write operations.", "fieldValue": null, - "fieldDefaultValue": false, - "fieldFlag": "distributor.ha-tracker.multi.mirror-enabled", - "fieldType": "boolean", + "fieldDefaultValue": 2000000000, + "fieldFlag": "distributor.ha-tracker.memberlist.stream-timeout", + "fieldType": "duration", "fieldCategory": "advanced" }, { "kind": "field", - "name": "mirror_timeout", + "name": "retransmit_factor", "required": false, - "desc": "Timeout for storing value to secondary store.", + "desc": "Multiplication factor used when sending out messages (factor * log(N+1)).", "fieldValue": null, - "fieldDefaultValue": 2000000000, - "fieldFlag": "distributor.ha-tracker.multi.mirror-timeout", - "fieldType": "duration", + "fieldDefaultValue": 4, + "fieldFlag": "distributor.ha-tracker.memberlist.retransmit-factor", + "fieldType": "int", "fieldCategory": "advanced" - } - ], - "fieldValue": null, - "fieldDefaultValue": null - } - ], - "fieldValue": null, - "fieldDefaultValue": null - } - ], - "fieldValue": null, - "fieldDefaultValue": null - }, - { - "kind": "field", - "name": "max_recv_msg_size", - "required": false, - "desc": "Max message size in bytes that the distributors will accept for incoming push requests to the remote write API. If exceeded, the request will be rejected.", - "fieldValue": null, - "fieldDefaultValue": 104857600, - "fieldFlag": "distributor.max-recv-msg-size", - "fieldType": "int", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "max_otlp_request_size", - "required": false, - "desc": "Maximum OTLP request size in bytes that the distributors accept. Requests exceeding this limit are rejected.", - "fieldValue": null, - "fieldDefaultValue": 104857600, - "fieldFlag": "distributor.max-otlp-request-size", - "fieldType": "int", - "fieldCategory": "experimental" - }, - { - "kind": "field", - "name": "max_request_pool_buffer_size", - "required": false, - "desc": "Max size of the pooled buffers used for marshaling write requests. If 0, no max size is enforced.", - "fieldValue": null, - "fieldDefaultValue": 0, - "fieldFlag": "distributor.max-request-pool-buffer-size", - "fieldType": "int", - "fieldCategory": "experimental" - }, - { - "kind": "field", - "name": "remote_timeout", - "required": false, - "desc": "Timeout for downstream ingesters.", - "fieldValue": null, - "fieldDefaultValue": 2000000000, - "fieldFlag": "distributor.remote-timeout", - "fieldType": "duration", - "fieldCategory": "advanced" - }, - { - "kind": "block", - "name": "ring", - "required": false, - "desc": "", - "blockEntries": [ - { - "kind": "block", - "name": "kvstore", - "required": false, - "desc": "", - "blockEntries": [ - { - "kind": "field", - "name": "store", - "required": false, - "desc": "Backend storage to use for the ring. Supported values are: consul, etcd, inmemory, memberlist, multi.", - "fieldValue": null, - "fieldDefaultValue": "memberlist", - "fieldFlag": "distributor.ring.store", - "fieldType": "string" - }, - { - "kind": "field", - "name": "prefix", - "required": false, - "desc": "The prefix for the keys in the store. Should end with a /.", - "fieldValue": null, - "fieldDefaultValue": "collectors/", - "fieldFlag": "distributor.ring.prefix", - "fieldType": "string", - "fieldCategory": "advanced" - }, - { - "kind": "block", - "name": "consul", - "required": false, - "desc": "", - "blockEntries": [ + }, { "kind": "field", - "name": "host", + "name": "pull_push_interval", "required": false, - "desc": "Hostname and port of Consul.", + "desc": "How often to use pull/push sync.", "fieldValue": null, - "fieldDefaultValue": "localhost:8500", - "fieldFlag": "distributor.ring.consul.hostname", - "fieldType": "string" + "fieldDefaultValue": 30000000000, + "fieldFlag": "distributor.ha-tracker.memberlist.pullpush-interval", + "fieldType": "duration", + "fieldCategory": "advanced" }, { "kind": "field", - "name": "acl_token", + "name": "gossip_interval", "required": false, - "desc": "ACL Token used to interact with Consul.", + "desc": "How often to gossip.", "fieldValue": null, - "fieldDefaultValue": "", - "fieldFlag": "distributor.ring.consul.acl-token", - "fieldType": "string", + "fieldDefaultValue": 200000000, + "fieldFlag": "distributor.ha-tracker.memberlist.gossip-interval", + "fieldType": "duration", "fieldCategory": "advanced" }, { "kind": "field", - "name": "http_client_timeout", + "name": "gossip_nodes", "required": false, - "desc": "HTTP timeout when talking to Consul", + "desc": "How many nodes to gossip to.", "fieldValue": null, - "fieldDefaultValue": 20000000000, - "fieldFlag": "distributor.ring.consul.client-timeout", - "fieldType": "duration", + "fieldDefaultValue": 3, + "fieldFlag": "distributor.ha-tracker.memberlist.gossip-nodes", + "fieldType": "int", "fieldCategory": "advanced" }, { "kind": "field", - "name": "consistent_reads", + "name": "gossip_to_dead_nodes_time", "required": false, - "desc": "Enable consistent reads to Consul.", + "desc": "How long to keep gossiping to dead nodes, to give them chance to refute their death.", "fieldValue": null, - "fieldDefaultValue": false, - "fieldFlag": "distributor.ring.consul.consistent-reads", - "fieldType": "boolean", + "fieldDefaultValue": 30000000000, + "fieldFlag": "distributor.ha-tracker.memberlist.gossip-to-dead-nodes-time", + "fieldType": "duration", "fieldCategory": "advanced" }, { "kind": "field", - "name": "watch_rate_limit", + "name": "dead_node_reclaim_time", "required": false, - "desc": "Rate limit when watching key or prefix in Consul, in requests per second. 0 disables the rate limit.", + "desc": "How soon can dead node's name be reclaimed with new address. 0 to disable.", "fieldValue": null, - "fieldDefaultValue": 1, - "fieldFlag": "distributor.ring.consul.watch-rate-limit", - "fieldType": "float", + "fieldDefaultValue": 0, + "fieldFlag": "distributor.ha-tracker.memberlist.dead-node-reclaim-time", + "fieldType": "duration", "fieldCategory": "advanced" }, { "kind": "field", - "name": "watch_burst_size", + "name": "compression_enabled", "required": false, - "desc": "Burst size used in rate limit. Values less than 1 are treated as 1.", + "desc": "Enable message compression. This can be used to reduce bandwidth usage at the cost of slightly more CPU utilization.", "fieldValue": null, - "fieldDefaultValue": 1, - "fieldFlag": "distributor.ring.consul.watch-burst-size", - "fieldType": "int", + "fieldDefaultValue": true, + "fieldFlag": "distributor.ha-tracker.memberlist.compression-enabled", + "fieldType": "boolean", "fieldCategory": "advanced" }, { "kind": "field", - "name": "cas_retry_delay", + "name": "notify_interval", "required": false, - "desc": "Maximum duration to wait before retrying a Compare And Swap (CAS) operation.", + "desc": "How frequently to notify watchers when a key changes. Can reduce CPU activity in large memberlist deployments. 0 to notify without delay.", "fieldValue": null, - "fieldDefaultValue": 1000000000, - "fieldFlag": "distributor.ring.consul.cas-retry-delay", + "fieldDefaultValue": 0, + "fieldFlag": "distributor.ha-tracker.memberlist.notify-interval", "fieldType": "duration", "fieldCategory": "advanced" - } - ], - "fieldValue": null, - "fieldDefaultValue": null - }, - { - "kind": "block", - "name": "etcd", - "required": false, - "desc": "", - "blockEntries": [ + }, { "kind": "field", - "name": "endpoints", + "name": "advertise_addr", "required": false, - "desc": "The etcd endpoints to connect to.", + "desc": "Gossip address to advertise to other members in the cluster. Used for NAT traversal.", "fieldValue": null, - "fieldDefaultValue": [], - "fieldFlag": "distributor.ring.etcd.endpoints", - "fieldType": "list of strings" + "fieldDefaultValue": "", + "fieldFlag": "distributor.ha-tracker.memberlist.advertise-addr", + "fieldType": "string" }, { "kind": "field", - "name": "dial_timeout", + "name": "advertise_port", "required": false, - "desc": "The dial timeout for the etcd connection.", + "desc": "Gossip port to advertise to other members in the cluster. Used for NAT traversal.", "fieldValue": null, - "fieldDefaultValue": 10000000000, - "fieldFlag": "distributor.ring.etcd.dial-timeout", - "fieldType": "duration", - "fieldCategory": "advanced" + "fieldDefaultValue": 7946, + "fieldFlag": "distributor.ha-tracker.memberlist.advertise-port", + "fieldType": "int" }, { "kind": "field", - "name": "max_retries", + "name": "cluster_label", "required": false, - "desc": "The maximum number of retries to do for failed ops.", + "desc": "The cluster label is an optional string to include in outbound packets and gossip streams. Other members in the memberlist cluster will discard any message whose label doesn't match the configured one, unless the 'cluster-label-verification-disabled' configuration option is set to true.", "fieldValue": null, - "fieldDefaultValue": 10, - "fieldFlag": "distributor.ring.etcd.max-retries", - "fieldType": "int", + "fieldDefaultValue": "", + "fieldFlag": "distributor.ha-tracker.memberlist.cluster-label", + "fieldType": "string", "fieldCategory": "advanced" }, { "kind": "field", - "name": "tls_enabled", + "name": "cluster_label_verification_disabled", "required": false, - "desc": "Enable TLS.", + "desc": "When true, memberlist doesn't verify that inbound packets and gossip streams have the cluster label matching the configured one. This verification should be disabled while rolling out the change to the configured cluster label in a live memberlist cluster.", "fieldValue": null, "fieldDefaultValue": false, - "fieldFlag": "distributor.ring.etcd.tls-enabled", + "fieldFlag": "distributor.ha-tracker.memberlist.cluster-label-verification-disabled", "fieldType": "boolean", "fieldCategory": "advanced" }, { "kind": "field", - "name": "tls_cert_path", + "name": "join_members", "required": false, - "desc": "Path to the client certificate, which will be used for authenticating with the server. Also requires the key path to be configured.", + "desc": "Other cluster members to join. Can be specified multiple times. It can be an IP, hostname or an entry specified in the DNS Service Discovery format.", "fieldValue": null, - "fieldDefaultValue": "", - "fieldFlag": "distributor.ring.etcd.tls-cert-path", - "fieldType": "string", - "fieldCategory": "advanced" + "fieldDefaultValue": [], + "fieldFlag": "distributor.ha-tracker.memberlist.join", + "fieldType": "list of strings" }, { "kind": "field", - "name": "tls_key_path", + "name": "min_join_backoff", "required": false, - "desc": "Path to the key for the client certificate. Also requires the client certificate to be configured.", + "desc": "Min backoff duration to join other cluster members.", "fieldValue": null, - "fieldDefaultValue": "", - "fieldFlag": "distributor.ring.etcd.tls-key-path", - "fieldType": "string", + "fieldDefaultValue": 1000000000, + "fieldFlag": "distributor.ha-tracker.memberlist.min-join-backoff", + "fieldType": "duration", "fieldCategory": "advanced" }, { "kind": "field", - "name": "tls_ca_path", + "name": "max_join_backoff", "required": false, - "desc": "Path to the CA certificates to validate server certificate against. If not set, the host's root CA certificates are used.", + "desc": "Max backoff duration to join other cluster members.", "fieldValue": null, - "fieldDefaultValue": "", - "fieldFlag": "distributor.ring.etcd.tls-ca-path", - "fieldType": "string", + "fieldDefaultValue": 60000000000, + "fieldFlag": "distributor.ha-tracker.memberlist.max-join-backoff", + "fieldType": "duration", "fieldCategory": "advanced" }, { "kind": "field", - "name": "tls_server_name", + "name": "max_join_retries", "required": false, - "desc": "Override the expected name on the server certificate.", + "desc": "Max number of retries to join other cluster members.", "fieldValue": null, - "fieldDefaultValue": "", - "fieldFlag": "distributor.ring.etcd.tls-server-name", - "fieldType": "string", + "fieldDefaultValue": 10, + "fieldFlag": "distributor.ha-tracker.memberlist.max-join-retries", + "fieldType": "int", "fieldCategory": "advanced" }, { "kind": "field", - "name": "tls_insecure_skip_verify", + "name": "abort_if_cluster_join_fails", "required": false, - "desc": "Skip validating server certificate.", + "desc": "If this node fails to join memberlist cluster, abort.", "fieldValue": null, "fieldDefaultValue": false, - "fieldFlag": "distributor.ring.etcd.tls-insecure-skip-verify", - "fieldType": "boolean", - "fieldCategory": "advanced" + "fieldFlag": "distributor.ha-tracker.memberlist.abort-if-join-fails", + "fieldType": "boolean" }, { "kind": "field", - "name": "tls_cipher_suites", + "name": "rejoin_interval", "required": false, - "desc": "Override the default cipher suite list (separated by commas). Allowed values:\n\nSecure Ciphers:\n- TLS_AES_128_GCM_SHA256\n- TLS_AES_256_GCM_SHA384\n- TLS_CHACHA20_POLY1305_SHA256\n- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA\n- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA\n- TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256\n- TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256\n- TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256\n- TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256\n\nInsecure Ciphers:\n- TLS_RSA_WITH_RC4_128_SHA\n- TLS_RSA_WITH_3DES_EDE_CBC_SHA\n- TLS_RSA_WITH_AES_128_CBC_SHA\n- TLS_RSA_WITH_AES_256_CBC_SHA\n- TLS_RSA_WITH_AES_128_CBC_SHA256\n- TLS_RSA_WITH_AES_128_GCM_SHA256\n- TLS_RSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_ECDSA_WITH_RC4_128_SHA\n- TLS_ECDHE_RSA_WITH_RC4_128_SHA\n- TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256\n- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256\n", + "desc": "If not 0, how often to rejoin the cluster. Occasional rejoin can help to fix the cluster split issue, and is harmless otherwise. For example when using only few components as a seed nodes (via -memberlist.join), then it's recommended to use rejoin. If -memberlist.join points to dynamic service that resolves to all gossiping nodes (eg. Kubernetes headless service), then rejoin is not needed.", "fieldValue": null, - "fieldDefaultValue": "", - "fieldFlag": "distributor.ring.etcd.tls-cipher-suites", - "fieldType": "string", + "fieldDefaultValue": 0, + "fieldFlag": "distributor.ha-tracker.memberlist.rejoin-interval", + "fieldType": "duration", "fieldCategory": "advanced" }, { "kind": "field", - "name": "tls_min_version", + "name": "left_ingesters_timeout", "required": false, - "desc": "Override the default minimum TLS version. Allowed values: VersionTLS10, VersionTLS11, VersionTLS12, VersionTLS13", + "desc": "How long to keep LEFT ingesters in the ring.", "fieldValue": null, - "fieldDefaultValue": "", - "fieldFlag": "distributor.ring.etcd.tls-min-version", - "fieldType": "string", + "fieldDefaultValue": 300000000000, + "fieldFlag": "distributor.ha-tracker.memberlist.left-ingesters-timeout", + "fieldType": "duration", "fieldCategory": "advanced" }, { "kind": "field", - "name": "username", + "name": "leave_timeout", "required": false, - "desc": "Etcd username.", + "desc": "Timeout for leaving memberlist cluster.", "fieldValue": null, - "fieldDefaultValue": "", - "fieldFlag": "distributor.ring.etcd.username", - "fieldType": "string" + "fieldDefaultValue": 20000000000, + "fieldFlag": "distributor.ha-tracker.memberlist.leave-timeout", + "fieldType": "duration", + "fieldCategory": "advanced" }, { "kind": "field", - "name": "password", + "name": "broadcast_timeout_for_local_updates_on_shutdown", "required": false, - "desc": "Etcd password.", + "desc": "Timeout for broadcasting all remaining locally-generated updates to other nodes when shutting down. Only used if there are nodes left in the memberlist cluster, and only applies to locally-generated updates, not to broadcast messages that are result of incoming gossip updates. 0 = no timeout, wait until all locally-generated updates are sent.", + "fieldValue": null, + "fieldDefaultValue": 10000000000, + "fieldFlag": "distributor.ha-tracker.memberlist.broadcast-timeout-for-local-updates-on-shutdown", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "message_history_buffer_bytes", + "required": false, + "desc": "How much space to use for keeping received and sent messages in memory for troubleshooting (two buffers). 0 to disable.", + "fieldValue": null, + "fieldDefaultValue": 0, + "fieldFlag": "distributor.ha-tracker.memberlist.message-history-buffer-bytes", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "bind_addr", + "required": false, + "desc": "IP address to listen on for gossip messages. Multiple addresses may be specified. Defaults to 0.0.0.0", + "fieldValue": null, + "fieldDefaultValue": [], + "fieldFlag": "distributor.ha-tracker.memberlist.bind-addr", + "fieldType": "list of strings" + }, + { + "kind": "field", + "name": "bind_port", + "required": false, + "desc": "Port to listen on for gossip messages.", + "fieldValue": null, + "fieldDefaultValue": 7946, + "fieldFlag": "distributor.ha-tracker.memberlist.bind-port", + "fieldType": "int" + }, + { + "kind": "field", + "name": "packet_dial_timeout", + "required": false, + "desc": "Timeout used when connecting to other nodes to send packet.", + "fieldValue": null, + "fieldDefaultValue": 2000000000, + "fieldFlag": "distributor.ha-tracker.memberlist.packet-dial-timeout", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "packet_write_timeout", + "required": false, + "desc": "Timeout for writing 'packet' data.", + "fieldValue": null, + "fieldDefaultValue": 5000000000, + "fieldFlag": "distributor.ha-tracker.memberlist.packet-write-timeout", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "max_concurrent_writes", + "required": false, + "desc": "Maximum number of concurrent writes to other nodes.", + "fieldValue": null, + "fieldDefaultValue": 3, + "fieldFlag": "distributor.ha-tracker.memberlist.max-concurrent-writes", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "acquire_writer_timeout", + "required": false, + "desc": "Timeout for acquiring one of the concurrent write slots. After this time, the message will be dropped.", + "fieldValue": null, + "fieldDefaultValue": 250000000, + "fieldFlag": "distributor.ha-tracker.memberlist.acquire-writer-timeout", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_enabled", + "required": false, + "desc": "Enable TLS on the memberlist transport layer.", + "fieldValue": null, + "fieldDefaultValue": false, + "fieldFlag": "distributor.ha-tracker.memberlist.tls-enabled", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_cert_path", + "required": false, + "desc": "Path to the client certificate, which will be used for authenticating with the server. Also requires the key path to be configured.", "fieldValue": null, "fieldDefaultValue": "", - "fieldFlag": "distributor.ring.etcd.password", - "fieldType": "string" + "fieldFlag": "distributor.ha-tracker.memberlist.tls-cert-path", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_key_path", + "required": false, + "desc": "Path to the key for the client certificate. Also requires the client certificate to be configured.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "distributor.ha-tracker.memberlist.tls-key-path", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_ca_path", + "required": false, + "desc": "Path to the CA certificates to validate server certificate against. If not set, the host's root CA certificates are used.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "distributor.ha-tracker.memberlist.tls-ca-path", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_server_name", + "required": false, + "desc": "Override the expected name on the server certificate.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "distributor.ha-tracker.memberlist.tls-server-name", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_insecure_skip_verify", + "required": false, + "desc": "Skip validating server certificate.", + "fieldValue": null, + "fieldDefaultValue": false, + "fieldFlag": "distributor.ha-tracker.memberlist.tls-insecure-skip-verify", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_cipher_suites", + "required": false, + "desc": "Override the default cipher suite list (separated by commas). Allowed values:\n\nSecure Ciphers:\n- TLS_AES_128_GCM_SHA256\n- TLS_AES_256_GCM_SHA384\n- TLS_CHACHA20_POLY1305_SHA256\n- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA\n- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA\n- TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256\n- TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256\n- TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256\n- TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256\n\nInsecure Ciphers:\n- TLS_RSA_WITH_RC4_128_SHA\n- TLS_RSA_WITH_3DES_EDE_CBC_SHA\n- TLS_RSA_WITH_AES_128_CBC_SHA\n- TLS_RSA_WITH_AES_256_CBC_SHA\n- TLS_RSA_WITH_AES_128_CBC_SHA256\n- TLS_RSA_WITH_AES_128_GCM_SHA256\n- TLS_RSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_ECDSA_WITH_RC4_128_SHA\n- TLS_ECDHE_RSA_WITH_RC4_128_SHA\n- TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256\n- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256\n", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "distributor.ha-tracker.memberlist.tls-cipher-suites", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_min_version", + "required": false, + "desc": "Override the default minimum TLS version. Allowed values: VersionTLS10, VersionTLS11, VersionTLS12, VersionTLS13", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "distributor.ha-tracker.memberlist.tls-min-version", + "fieldType": "string", + "fieldCategory": "advanced" } ], "fieldValue": null, @@ -1512,7 +1570,7 @@ "desc": "Primary backend storage used by multi-client.", "fieldValue": null, "fieldDefaultValue": "", - "fieldFlag": "distributor.ring.multi.primary", + "fieldFlag": "distributor.ha-tracker.multi.primary", "fieldType": "string", "fieldCategory": "advanced" }, @@ -1523,7 +1581,7 @@ "desc": "Secondary backend storage used by multi-client.", "fieldValue": null, "fieldDefaultValue": "", - "fieldFlag": "distributor.ring.multi.secondary", + "fieldFlag": "distributor.ha-tracker.multi.secondary", "fieldType": "string", "fieldCategory": "advanced" }, @@ -1534,7 +1592,7 @@ "desc": "Mirror writes to secondary store.", "fieldValue": null, "fieldDefaultValue": false, - "fieldFlag": "distributor.ring.multi.mirror-enabled", + "fieldFlag": "distributor.ha-tracker.multi.mirror-enabled", "fieldType": "boolean", "fieldCategory": "advanced" }, @@ -1545,7 +1603,7 @@ "desc": "Timeout for storing value to secondary store.", "fieldValue": null, "fieldDefaultValue": 2000000000, - "fieldFlag": "distributor.ring.multi.mirror-timeout", + "fieldFlag": "distributor.ha-tracker.multi.mirror-timeout", "fieldType": "duration", "fieldCategory": "advanced" } @@ -1556,816 +1614,91 @@ ], "fieldValue": null, "fieldDefaultValue": null - }, - { - "kind": "field", - "name": "heartbeat_period", - "required": false, - "desc": "Period at which to heartbeat to the ring. 0 = disabled.", - "fieldValue": null, - "fieldDefaultValue": 15000000000, - "fieldFlag": "distributor.ring.heartbeat-period", - "fieldType": "duration", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "heartbeat_timeout", - "required": false, - "desc": "The heartbeat timeout after which distributors are considered unhealthy within the ring. 0 = never (timeout disabled).", - "fieldValue": null, - "fieldDefaultValue": 60000000000, - "fieldFlag": "distributor.ring.heartbeat-timeout", - "fieldType": "duration", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "instance_id", - "required": false, - "desc": "Instance ID to register in the ring.", - "fieldValue": null, - "fieldDefaultValue": "\u003chostname\u003e", - "fieldFlag": "distributor.ring.instance-id", - "fieldType": "string", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "instance_interface_names", - "required": false, - "desc": "List of network interface names to look up when finding the instance IP address.", - "fieldValue": null, - "fieldDefaultValue": [], - "fieldFlag": "distributor.ring.instance-interface-names", - "fieldType": "list of strings" - }, - { - "kind": "field", - "name": "instance_port", - "required": false, - "desc": "Port to advertise in the ring (defaults to -server.grpc-listen-port).", - "fieldValue": null, - "fieldDefaultValue": 0, - "fieldFlag": "distributor.ring.instance-port", - "fieldType": "int", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "instance_addr", - "required": false, - "desc": "IP address to advertise in the ring. Default is auto-detected.", - "fieldValue": null, - "fieldDefaultValue": "", - "fieldFlag": "distributor.ring.instance-addr", - "fieldType": "string", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "instance_enable_ipv6", - "required": false, - "desc": "Enable using a IPv6 instance address. (default false)", - "fieldValue": null, - "fieldDefaultValue": false, - "fieldFlag": "distributor.ring.instance-enable-ipv6", - "fieldType": "boolean", - "fieldCategory": "advanced" } ], "fieldValue": null, "fieldDefaultValue": null }, { - "kind": "block", - "name": "instance_limits", + "kind": "field", + "name": "max_recv_msg_size", "required": false, - "desc": "", - "blockEntries": [ - { - "kind": "field", - "name": "max_ingestion_rate", - "required": false, - "desc": "Max ingestion rate (samples/sec) that this distributor will accept. This limit is per-distributor, not per-tenant. Additional push requests will be rejected. Current ingestion rate is computed as exponentially weighted moving average, updated every second. 0 = unlimited.", - "fieldValue": null, - "fieldDefaultValue": 0, - "fieldFlag": "distributor.instance-limits.max-ingestion-rate", - "fieldType": "float", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "max_inflight_push_requests", - "required": false, - "desc": "Max inflight push requests that this distributor can handle. This limit is per-distributor, not per-tenant. Additional requests will be rejected. 0 = unlimited.", - "fieldValue": null, - "fieldDefaultValue": 2000, - "fieldFlag": "distributor.instance-limits.max-inflight-push-requests", - "fieldType": "int", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "max_inflight_push_requests_bytes", - "required": false, - "desc": "The sum of the request sizes in bytes of inflight push requests that this distributor can handle. This limit is per-distributor, not per-tenant. Additional requests will be rejected. 0 = unlimited.", - "fieldValue": null, - "fieldDefaultValue": 0, - "fieldFlag": "distributor.instance-limits.max-inflight-push-requests-bytes", - "fieldType": "int", - "fieldCategory": "advanced" - } - ], + "desc": "Max message size in bytes that the distributors will accept for incoming push requests to the remote write API. If exceeded, the request will be rejected.", "fieldValue": null, - "fieldDefaultValue": null + "fieldDefaultValue": 104857600, + "fieldFlag": "distributor.max-recv-msg-size", + "fieldType": "int", + "fieldCategory": "advanced" }, { "kind": "field", - "name": "write_requests_buffer_pooling_enabled", + "name": "max_otlp_request_size", "required": false, - "desc": "Enable pooling of buffers used for marshaling write requests.", + "desc": "Maximum OTLP request size in bytes that the distributors accept. Requests exceeding this limit are rejected.", "fieldValue": null, - "fieldDefaultValue": true, - "fieldFlag": "distributor.write-requests-buffer-pooling-enabled", - "fieldType": "boolean", + "fieldDefaultValue": 104857600, + "fieldFlag": "distributor.max-otlp-request-size", + "fieldType": "int", "fieldCategory": "experimental" }, { "kind": "field", - "name": "reusable_ingester_push_workers", + "name": "max_request_pool_buffer_size", "required": false, - "desc": "Number of pre-allocated workers used to forward push requests to the ingesters. If 0, no workers will be used and a new goroutine will be spawned for each ingester push request. If not enough workers available, new goroutine will be spawned. (Note: this is a performance optimization, not a limiting feature.)", + "desc": "Max size of the pooled buffers used for marshaling write requests. If 0, no max size is enforced.", "fieldValue": null, - "fieldDefaultValue": 2000, - "fieldFlag": "distributor.reusable-ingester-push-workers", + "fieldDefaultValue": 0, + "fieldFlag": "distributor.max-request-pool-buffer-size", "fieldType": "int", - "fieldCategory": "advanced" - } - ], - "fieldValue": null, - "fieldDefaultValue": null - }, - { - "kind": "block", - "name": "querier", - "required": false, - "desc": "", - "blockEntries": [ + "fieldCategory": "experimental" + }, { "kind": "field", - "name": "query_store_after", + "name": "remote_timeout", "required": false, - "desc": "The time after which a metric should be queried from storage and not just ingesters. 0 means all queries are sent to store. If this option is enabled, the time range of the query sent to the store-gateway will be manipulated to ensure the query end is not more recent than 'now - query-store-after'.", + "desc": "Timeout for downstream ingesters.", "fieldValue": null, - "fieldDefaultValue": 43200000000000, - "fieldFlag": "querier.query-store-after", + "fieldDefaultValue": 2000000000, + "fieldFlag": "distributor.remote-timeout", "fieldType": "duration", "fieldCategory": "advanced" }, { "kind": "block", - "name": "store_gateway_client", + "name": "ring", "required": false, "desc": "", "blockEntries": [ { - "kind": "field", - "name": "tls_enabled", - "required": false, - "desc": "Enable TLS for gRPC client connecting to store-gateway.", - "fieldValue": null, - "fieldDefaultValue": false, - "fieldFlag": "querier.store-gateway-client.tls-enabled", - "fieldType": "boolean", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "tls_cert_path", - "required": false, - "desc": "Path to the client certificate, which will be used for authenticating with the server. Also requires the key path to be configured.", - "fieldValue": null, - "fieldDefaultValue": "", - "fieldFlag": "querier.store-gateway-client.tls-cert-path", - "fieldType": "string", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "tls_key_path", - "required": false, - "desc": "Path to the key for the client certificate. Also requires the client certificate to be configured.", - "fieldValue": null, - "fieldDefaultValue": "", - "fieldFlag": "querier.store-gateway-client.tls-key-path", - "fieldType": "string", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "tls_ca_path", - "required": false, - "desc": "Path to the CA certificates to validate server certificate against. If not set, the host's root CA certificates are used.", - "fieldValue": null, - "fieldDefaultValue": "", - "fieldFlag": "querier.store-gateway-client.tls-ca-path", - "fieldType": "string", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "tls_server_name", - "required": false, - "desc": "Override the expected name on the server certificate.", - "fieldValue": null, - "fieldDefaultValue": "", - "fieldFlag": "querier.store-gateway-client.tls-server-name", - "fieldType": "string", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "tls_insecure_skip_verify", - "required": false, - "desc": "Skip validating server certificate.", - "fieldValue": null, - "fieldDefaultValue": false, - "fieldFlag": "querier.store-gateway-client.tls-insecure-skip-verify", - "fieldType": "boolean", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "tls_cipher_suites", - "required": false, - "desc": "Override the default cipher suite list (separated by commas). Allowed values:\n\nSecure Ciphers:\n- TLS_AES_128_GCM_SHA256\n- TLS_AES_256_GCM_SHA384\n- TLS_CHACHA20_POLY1305_SHA256\n- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA\n- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA\n- TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256\n- TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256\n- TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256\n- TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256\n\nInsecure Ciphers:\n- TLS_RSA_WITH_RC4_128_SHA\n- TLS_RSA_WITH_3DES_EDE_CBC_SHA\n- TLS_RSA_WITH_AES_128_CBC_SHA\n- TLS_RSA_WITH_AES_256_CBC_SHA\n- TLS_RSA_WITH_AES_128_CBC_SHA256\n- TLS_RSA_WITH_AES_128_GCM_SHA256\n- TLS_RSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_ECDSA_WITH_RC4_128_SHA\n- TLS_ECDHE_RSA_WITH_RC4_128_SHA\n- TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256\n- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256\n", - "fieldValue": null, - "fieldDefaultValue": "", - "fieldFlag": "querier.store-gateway-client.tls-cipher-suites", - "fieldType": "string", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "tls_min_version", - "required": false, - "desc": "Override the default minimum TLS version. Allowed values: VersionTLS10, VersionTLS11, VersionTLS12, VersionTLS13", - "fieldValue": null, - "fieldDefaultValue": "", - "fieldFlag": "querier.store-gateway-client.tls-min-version", - "fieldType": "string", - "fieldCategory": "advanced" - } - ], - "fieldValue": null, - "fieldDefaultValue": null - }, - { - "kind": "field", - "name": "shuffle_sharding_ingesters_enabled", - "required": false, - "desc": "Fetch in-memory series from the minimum set of required ingesters, selecting only ingesters which may have received series since -querier.query-ingesters-within. If this setting is false or -querier.query-ingesters-within is '0', queriers always query all ingesters (ingesters shuffle sharding on read path is disabled).", - "fieldValue": null, - "fieldDefaultValue": true, - "fieldFlag": "querier.shuffle-sharding-ingesters-enabled", - "fieldType": "boolean", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "streaming_chunks_per_ingester_series_buffer_size", - "required": false, - "desc": "Number of series to buffer per ingester when streaming chunks from ingesters.", - "fieldValue": null, - "fieldDefaultValue": 256, - "fieldFlag": "querier.streaming-chunks-per-ingester-buffer-size", - "fieldType": "int", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "streaming_chunks_per_store_gateway_series_buffer_size", - "required": false, - "desc": "Number of series to buffer per store-gateway when streaming chunks from store-gateways.", - "fieldValue": null, - "fieldDefaultValue": 256, - "fieldFlag": "querier.streaming-chunks-per-store-gateway-buffer-size", - "fieldType": "int", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "minimize_ingester_requests", - "required": false, - "desc": "If true, when querying ingesters, only the minimum required ingesters required to reach quorum will be queried initially, with other ingesters queried only if needed due to failures from the initial set of ingesters. Enabling this option reduces resource consumption for the happy path at the cost of increased latency for the unhappy path.", - "fieldValue": null, - "fieldDefaultValue": true, - "fieldFlag": "querier.minimize-ingester-requests", - "fieldType": "boolean", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "minimize_ingester_requests_hedging_delay", - "required": false, - "desc": "Delay before initiating requests to further ingesters when request minimization is enabled and the initially selected set of ingesters have not all responded. Ignored if -querier.minimize-ingester-requests is not enabled.", - "fieldValue": null, - "fieldDefaultValue": 3000000000, - "fieldFlag": "querier.minimize-ingester-requests-hedging-delay", - "fieldType": "duration", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "query_engine", - "required": false, - "desc": "Query engine to use, either 'prometheus' or 'mimir'", - "fieldValue": null, - "fieldDefaultValue": "prometheus", - "fieldFlag": "querier.query-engine", - "fieldType": "string", - "fieldCategory": "experimental" - }, - { - "kind": "field", - "name": "enable_query_engine_fallback", - "required": false, - "desc": "If set to true and the Mimir query engine is in use, fall back to using the Prometheus query engine for any queries not supported by the Mimir query engine.", - "fieldValue": null, - "fieldDefaultValue": true, - "fieldFlag": "querier.enable-query-engine-fallback", - "fieldType": "boolean", - "fieldCategory": "experimental" - }, - { - "kind": "field", - "name": "max_concurrent", - "required": false, - "desc": "The number of workers running in each querier process. This setting limits the maximum number of concurrent queries in each querier. The minimum value is four; lower values are ignored and set to the minimum", - "fieldValue": null, - "fieldDefaultValue": 20, - "fieldFlag": "querier.max-concurrent", - "fieldType": "int" - }, - { - "kind": "field", - "name": "timeout", - "required": false, - "desc": "The timeout for a query. This config option should be set on query-frontend too when query sharding is enabled. This also applies to queries evaluated by the ruler (internally or remotely).", - "fieldValue": null, - "fieldDefaultValue": 120000000000, - "fieldFlag": "querier.timeout", - "fieldType": "duration" - }, - { - "kind": "field", - "name": "max_samples", - "required": false, - "desc": "Maximum number of samples a single query can load into memory. This config option should be set on query-frontend too when query sharding is enabled.", - "fieldValue": null, - "fieldDefaultValue": 50000000, - "fieldFlag": "querier.max-samples", - "fieldType": "int" - }, - { - "kind": "field", - "name": "default_evaluation_interval", - "required": false, - "desc": "The default evaluation interval or step size for subqueries. This config option should be set on query-frontend too when query sharding is enabled.", - "fieldValue": null, - "fieldDefaultValue": 60000000000, - "fieldFlag": "querier.default-evaluation-interval", - "fieldType": "duration", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "lookback_delta", - "required": false, - "desc": "Time since the last sample after which a time series is considered stale and ignored by expression evaluations. This config option should be set on query-frontend too when query sharding is enabled.", - "fieldValue": null, - "fieldDefaultValue": 300000000000, - "fieldFlag": "querier.lookback-delta", - "fieldType": "duration", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "promql_experimental_functions_enabled", - "required": false, - "desc": "Enable experimental PromQL functions. This config option should be set on query-frontend too when query sharding is enabled.", - "fieldValue": null, - "fieldDefaultValue": false, - "fieldFlag": "querier.promql-experimental-functions-enabled", - "fieldType": "boolean", - "fieldCategory": "experimental" - }, - { - "kind": "block", - "name": "mimir_query_engine", - "required": false, - "desc": "", - "blockEntries": [ - { - "kind": "field", - "name": "enable_aggregation_operations", - "required": false, - "desc": "Enable support for aggregation operations in Mimir's query engine. Only applies if the Mimir query engine is in use.", - "fieldValue": null, - "fieldDefaultValue": true, - "fieldFlag": "querier.mimir-query-engine.enable-aggregation-operations", - "fieldType": "boolean", - "fieldCategory": "experimental" - }, - { - "kind": "field", - "name": "enable_vector_vector_binary_comparison_operations", - "required": false, - "desc": "Enable support for binary comparison operations between two vectors in Mimir's query engine. Only applies if the Mimir query engine is in use.", - "fieldValue": null, - "fieldDefaultValue": true, - "fieldFlag": "querier.mimir-query-engine.enable-vector-vector-binary-comparison-operations", - "fieldType": "boolean", - "fieldCategory": "experimental" - }, - { - "kind": "field", - "name": "enable_vector_scalar_binary_comparison_operations", - "required": false, - "desc": "Enable support for binary comparison operations between a vector and a scalar in Mimir's query engine. Only applies if the Mimir query engine is in use.", - "fieldValue": null, - "fieldDefaultValue": true, - "fieldFlag": "querier.mimir-query-engine.enable-vector-scalar-binary-comparison-operations", - "fieldType": "boolean", - "fieldCategory": "experimental" - }, - { - "kind": "field", - "name": "enable_scalar_scalar_binary_comparison_operations", - "required": false, - "desc": "Enable support for binary comparison operations between two scalars in Mimir's query engine. Only applies if the Mimir query engine is in use.", - "fieldValue": null, - "fieldDefaultValue": true, - "fieldFlag": "querier.mimir-query-engine.enable-scalar-scalar-binary-comparison-operations", - "fieldType": "boolean", - "fieldCategory": "experimental" - }, - { - "kind": "field", - "name": "enable_binary_logical_operations", - "required": false, - "desc": "Enable support for binary logical operations in Mimir's query engine. Only applies if the Mimir query engine is in use.", - "fieldValue": null, - "fieldDefaultValue": true, - "fieldFlag": "querier.mimir-query-engine.enable-binary-logical-operations", - "fieldType": "boolean", - "fieldCategory": "experimental" - }, - { - "kind": "field", - "name": "enable_scalars", - "required": false, - "desc": "Enable support for scalars in Mimir's query engine. Only applies if the Mimir query engine is in use.", - "fieldValue": null, - "fieldDefaultValue": true, - "fieldFlag": "querier.mimir-query-engine.enable-scalars", - "fieldType": "boolean", - "fieldCategory": "experimental" - }, - { - "kind": "field", - "name": "enable_subqueries", - "required": false, - "desc": "Enable support for subqueries in Mimir's query engine. Only applies if the Mimir query engine is in use.", - "fieldValue": null, - "fieldDefaultValue": true, - "fieldFlag": "querier.mimir-query-engine.enable-subqueries", - "fieldType": "boolean", - "fieldCategory": "experimental" - } - ], - "fieldValue": null, - "fieldDefaultValue": null - } - ], - "fieldValue": null, - "fieldDefaultValue": null - }, - { - "kind": "block", - "name": "ingester_client", - "required": false, - "desc": "", - "blockEntries": [ - { - "kind": "block", - "name": "grpc_client_config", - "required": false, - "desc": "", - "blockEntries": [ - { - "kind": "field", - "name": "max_recv_msg_size", - "required": false, - "desc": "gRPC client max receive message size (bytes).", - "fieldValue": null, - "fieldDefaultValue": 104857600, - "fieldFlag": "ingester.client.grpc-max-recv-msg-size", - "fieldType": "int", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "max_send_msg_size", - "required": false, - "desc": "gRPC client max send message size (bytes).", - "fieldValue": null, - "fieldDefaultValue": 104857600, - "fieldFlag": "ingester.client.grpc-max-send-msg-size", - "fieldType": "int", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "grpc_compression", - "required": false, - "desc": "Use compression when sending messages. Supported values are: 'gzip', 'snappy', 's2' and '' (disable compression)", - "fieldValue": null, - "fieldDefaultValue": "", - "fieldFlag": "ingester.client.grpc-compression", - "fieldType": "string", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "rate_limit", - "required": false, - "desc": "Rate limit for gRPC client; 0 means disabled.", - "fieldValue": null, - "fieldDefaultValue": 0, - "fieldFlag": "ingester.client.grpc-client-rate-limit", - "fieldType": "float", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "rate_limit_burst", - "required": false, - "desc": "Rate limit burst for gRPC client.", - "fieldValue": null, - "fieldDefaultValue": 0, - "fieldFlag": "ingester.client.grpc-client-rate-limit-burst", - "fieldType": "int", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "backoff_on_ratelimits", - "required": false, - "desc": "Enable backoff and retry when we hit rate limits.", - "fieldValue": null, - "fieldDefaultValue": false, - "fieldFlag": "ingester.client.backoff-on-ratelimits", - "fieldType": "boolean", - "fieldCategory": "advanced" - }, - { - "kind": "block", - "name": "backoff_config", + "kind": "block", + "name": "kvstore", "required": false, "desc": "", "blockEntries": [ { "kind": "field", - "name": "min_period", + "name": "store", "required": false, - "desc": "Minimum delay when backing off.", + "desc": "Backend storage to use for the ring. Supported values are: consul, etcd, inmemory, memberlist, multi.", "fieldValue": null, - "fieldDefaultValue": 100000000, - "fieldFlag": "ingester.client.backoff-min-period", - "fieldType": "duration", - "fieldCategory": "advanced" + "fieldDefaultValue": "memberlist", + "fieldFlag": "distributor.ring.store", + "fieldType": "string" }, { "kind": "field", - "name": "max_period", + "name": "prefix", "required": false, - "desc": "Maximum delay when backing off.", + "desc": "The prefix for the keys in the store. Should end with a /.", "fieldValue": null, - "fieldDefaultValue": 10000000000, - "fieldFlag": "ingester.client.backoff-max-period", - "fieldType": "duration", + "fieldDefaultValue": "collectors/", + "fieldFlag": "distributor.ring.prefix", + "fieldType": "string", "fieldCategory": "advanced" }, { - "kind": "field", - "name": "max_retries", - "required": false, - "desc": "Number of times to backoff and retry before failing.", - "fieldValue": null, - "fieldDefaultValue": 10, - "fieldFlag": "ingester.client.backoff-retries", - "fieldType": "int", - "fieldCategory": "advanced" - } - ], - "fieldValue": null, - "fieldDefaultValue": null - }, - { - "kind": "field", - "name": "initial_stream_window_size", - "required": false, - "desc": "Initial stream window size. Values less than the default are not supported and are ignored. Setting this to a value other than the default disables the BDP estimator.", - "fieldValue": null, - "fieldDefaultValue": null, - "fieldFlag": "ingester.client.initial-stream-window-size", - "fieldType": "int", - "fieldCategory": "experimental" - }, - { - "kind": "field", - "name": "initial_connection_window_size", - "required": false, - "desc": "Initial connection window size. Values less than the default are not supported and are ignored. Setting this to a value other than the default disables the BDP estimator.", - "fieldValue": null, - "fieldDefaultValue": null, - "fieldFlag": "ingester.client.initial-connection-window-size", - "fieldType": "int", - "fieldCategory": "experimental" - }, - { - "kind": "field", - "name": "tls_enabled", - "required": false, - "desc": "Enable TLS in the gRPC client. This flag needs to be enabled when any other TLS flag is set. If set to false, insecure connection to gRPC server will be used.", - "fieldValue": null, - "fieldDefaultValue": false, - "fieldFlag": "ingester.client.tls-enabled", - "fieldType": "boolean", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "tls_cert_path", - "required": false, - "desc": "Path to the client certificate, which will be used for authenticating with the server. Also requires the key path to be configured.", - "fieldValue": null, - "fieldDefaultValue": "", - "fieldFlag": "ingester.client.tls-cert-path", - "fieldType": "string", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "tls_key_path", - "required": false, - "desc": "Path to the key for the client certificate. Also requires the client certificate to be configured.", - "fieldValue": null, - "fieldDefaultValue": "", - "fieldFlag": "ingester.client.tls-key-path", - "fieldType": "string", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "tls_ca_path", - "required": false, - "desc": "Path to the CA certificates to validate server certificate against. If not set, the host's root CA certificates are used.", - "fieldValue": null, - "fieldDefaultValue": "", - "fieldFlag": "ingester.client.tls-ca-path", - "fieldType": "string", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "tls_server_name", - "required": false, - "desc": "Override the expected name on the server certificate.", - "fieldValue": null, - "fieldDefaultValue": "", - "fieldFlag": "ingester.client.tls-server-name", - "fieldType": "string", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "tls_insecure_skip_verify", - "required": false, - "desc": "Skip validating server certificate.", - "fieldValue": null, - "fieldDefaultValue": false, - "fieldFlag": "ingester.client.tls-insecure-skip-verify", - "fieldType": "boolean", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "tls_cipher_suites", - "required": false, - "desc": "Override the default cipher suite list (separated by commas). Allowed values:\n\nSecure Ciphers:\n- TLS_AES_128_GCM_SHA256\n- TLS_AES_256_GCM_SHA384\n- TLS_CHACHA20_POLY1305_SHA256\n- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA\n- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA\n- TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256\n- TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256\n- TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256\n- TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256\n\nInsecure Ciphers:\n- TLS_RSA_WITH_RC4_128_SHA\n- TLS_RSA_WITH_3DES_EDE_CBC_SHA\n- TLS_RSA_WITH_AES_128_CBC_SHA\n- TLS_RSA_WITH_AES_256_CBC_SHA\n- TLS_RSA_WITH_AES_128_CBC_SHA256\n- TLS_RSA_WITH_AES_128_GCM_SHA256\n- TLS_RSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_ECDSA_WITH_RC4_128_SHA\n- TLS_ECDHE_RSA_WITH_RC4_128_SHA\n- TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256\n- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256\n", - "fieldValue": null, - "fieldDefaultValue": "", - "fieldFlag": "ingester.client.tls-cipher-suites", - "fieldType": "string", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "tls_min_version", - "required": false, - "desc": "Override the default minimum TLS version. Allowed values: VersionTLS10, VersionTLS11, VersionTLS12, VersionTLS13", - "fieldValue": null, - "fieldDefaultValue": "", - "fieldFlag": "ingester.client.tls-min-version", - "fieldType": "string", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "connect_timeout", - "required": false, - "desc": "The maximum amount of time to establish a connection. A value of 0 means default gRPC client connect timeout and backoff.", - "fieldValue": null, - "fieldDefaultValue": 5000000000, - "fieldFlag": "ingester.client.connect-timeout", - "fieldType": "duration", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "connect_backoff_base_delay", - "required": false, - "desc": "Initial backoff delay after first connection failure. Only relevant if ConnectTimeout \u003e 0.", - "fieldValue": null, - "fieldDefaultValue": 1000000000, - "fieldFlag": "ingester.client.connect-backoff-base-delay", - "fieldType": "duration", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "connect_backoff_max_delay", - "required": false, - "desc": "Maximum backoff delay when establishing a connection. Only relevant if ConnectTimeout \u003e 0.", - "fieldValue": null, - "fieldDefaultValue": 5000000000, - "fieldFlag": "ingester.client.connect-backoff-max-delay", - "fieldType": "duration", - "fieldCategory": "advanced" - } - ], - "fieldValue": null, - "fieldDefaultValue": null - } - ], - "fieldValue": null, - "fieldDefaultValue": null - }, - { - "kind": "block", - "name": "ingester", - "required": false, - "desc": "", - "blockEntries": [ - { - "kind": "block", - "name": "ring", - "required": false, - "desc": "", - "blockEntries": [ - { - "kind": "block", - "name": "kvstore", - "required": false, - "desc": "", - "blockEntries": [ - { - "kind": "field", - "name": "store", - "required": false, - "desc": "Backend storage to use for the ring. Supported values are: consul, etcd, inmemory, memberlist, multi.", - "fieldValue": null, - "fieldDefaultValue": "memberlist", - "fieldFlag": "ingester.ring.store", - "fieldType": "string" - }, - { - "kind": "field", - "name": "prefix", - "required": false, - "desc": "The prefix for the keys in the store. Should end with a /.", - "fieldValue": null, - "fieldDefaultValue": "collectors/", - "fieldFlag": "ingester.ring.prefix", - "fieldType": "string", - "fieldCategory": "advanced" - }, - { - "kind": "block", - "name": "consul", + "kind": "block", + "name": "consul", "required": false, "desc": "", "blockEntries": [ @@ -2376,7 +1709,7 @@ "desc": "Hostname and port of Consul.", "fieldValue": null, "fieldDefaultValue": "localhost:8500", - "fieldFlag": "ingester.ring.consul.hostname", + "fieldFlag": "distributor.ring.consul.hostname", "fieldType": "string" }, { @@ -2386,7 +1719,7 @@ "desc": "ACL Token used to interact with Consul.", "fieldValue": null, "fieldDefaultValue": "", - "fieldFlag": "ingester.ring.consul.acl-token", + "fieldFlag": "distributor.ring.consul.acl-token", "fieldType": "string", "fieldCategory": "advanced" }, @@ -2397,7 +1730,7 @@ "desc": "HTTP timeout when talking to Consul", "fieldValue": null, "fieldDefaultValue": 20000000000, - "fieldFlag": "ingester.ring.consul.client-timeout", + "fieldFlag": "distributor.ring.consul.client-timeout", "fieldType": "duration", "fieldCategory": "advanced" }, @@ -2408,7 +1741,7 @@ "desc": "Enable consistent reads to Consul.", "fieldValue": null, "fieldDefaultValue": false, - "fieldFlag": "ingester.ring.consul.consistent-reads", + "fieldFlag": "distributor.ring.consul.consistent-reads", "fieldType": "boolean", "fieldCategory": "advanced" }, @@ -2419,7 +1752,7 @@ "desc": "Rate limit when watching key or prefix in Consul, in requests per second. 0 disables the rate limit.", "fieldValue": null, "fieldDefaultValue": 1, - "fieldFlag": "ingester.ring.consul.watch-rate-limit", + "fieldFlag": "distributor.ring.consul.watch-rate-limit", "fieldType": "float", "fieldCategory": "advanced" }, @@ -2430,7 +1763,7 @@ "desc": "Burst size used in rate limit. Values less than 1 are treated as 1.", "fieldValue": null, "fieldDefaultValue": 1, - "fieldFlag": "ingester.ring.consul.watch-burst-size", + "fieldFlag": "distributor.ring.consul.watch-burst-size", "fieldType": "int", "fieldCategory": "advanced" }, @@ -2441,7 +1774,7 @@ "desc": "Maximum duration to wait before retrying a Compare And Swap (CAS) operation.", "fieldValue": null, "fieldDefaultValue": 1000000000, - "fieldFlag": "ingester.ring.consul.cas-retry-delay", + "fieldFlag": "distributor.ring.consul.cas-retry-delay", "fieldType": "duration", "fieldCategory": "advanced" } @@ -2462,7 +1795,7 @@ "desc": "The etcd endpoints to connect to.", "fieldValue": null, "fieldDefaultValue": [], - "fieldFlag": "ingester.ring.etcd.endpoints", + "fieldFlag": "distributor.ring.etcd.endpoints", "fieldType": "list of strings" }, { @@ -2472,7 +1805,7 @@ "desc": "The dial timeout for the etcd connection.", "fieldValue": null, "fieldDefaultValue": 10000000000, - "fieldFlag": "ingester.ring.etcd.dial-timeout", + "fieldFlag": "distributor.ring.etcd.dial-timeout", "fieldType": "duration", "fieldCategory": "advanced" }, @@ -2483,7 +1816,7 @@ "desc": "The maximum number of retries to do for failed ops.", "fieldValue": null, "fieldDefaultValue": 10, - "fieldFlag": "ingester.ring.etcd.max-retries", + "fieldFlag": "distributor.ring.etcd.max-retries", "fieldType": "int", "fieldCategory": "advanced" }, @@ -2494,7 +1827,7 @@ "desc": "Enable TLS.", "fieldValue": null, "fieldDefaultValue": false, - "fieldFlag": "ingester.ring.etcd.tls-enabled", + "fieldFlag": "distributor.ring.etcd.tls-enabled", "fieldType": "boolean", "fieldCategory": "advanced" }, @@ -2505,7 +1838,7 @@ "desc": "Path to the client certificate, which will be used for authenticating with the server. Also requires the key path to be configured.", "fieldValue": null, "fieldDefaultValue": "", - "fieldFlag": "ingester.ring.etcd.tls-cert-path", + "fieldFlag": "distributor.ring.etcd.tls-cert-path", "fieldType": "string", "fieldCategory": "advanced" }, @@ -2516,7 +1849,7 @@ "desc": "Path to the key for the client certificate. Also requires the client certificate to be configured.", "fieldValue": null, "fieldDefaultValue": "", - "fieldFlag": "ingester.ring.etcd.tls-key-path", + "fieldFlag": "distributor.ring.etcd.tls-key-path", "fieldType": "string", "fieldCategory": "advanced" }, @@ -2527,7 +1860,7 @@ "desc": "Path to the CA certificates to validate server certificate against. If not set, the host's root CA certificates are used.", "fieldValue": null, "fieldDefaultValue": "", - "fieldFlag": "ingester.ring.etcd.tls-ca-path", + "fieldFlag": "distributor.ring.etcd.tls-ca-path", "fieldType": "string", "fieldCategory": "advanced" }, @@ -2538,7 +1871,7 @@ "desc": "Override the expected name on the server certificate.", "fieldValue": null, "fieldDefaultValue": "", - "fieldFlag": "ingester.ring.etcd.tls-server-name", + "fieldFlag": "distributor.ring.etcd.tls-server-name", "fieldType": "string", "fieldCategory": "advanced" }, @@ -2549,7 +1882,7 @@ "desc": "Skip validating server certificate.", "fieldValue": null, "fieldDefaultValue": false, - "fieldFlag": "ingester.ring.etcd.tls-insecure-skip-verify", + "fieldFlag": "distributor.ring.etcd.tls-insecure-skip-verify", "fieldType": "boolean", "fieldCategory": "advanced" }, @@ -2560,7 +1893,7 @@ "desc": "Override the default cipher suite list (separated by commas). Allowed values:\n\nSecure Ciphers:\n- TLS_AES_128_GCM_SHA256\n- TLS_AES_256_GCM_SHA384\n- TLS_CHACHA20_POLY1305_SHA256\n- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA\n- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA\n- TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256\n- TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256\n- TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256\n- TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256\n\nInsecure Ciphers:\n- TLS_RSA_WITH_RC4_128_SHA\n- TLS_RSA_WITH_3DES_EDE_CBC_SHA\n- TLS_RSA_WITH_AES_128_CBC_SHA\n- TLS_RSA_WITH_AES_256_CBC_SHA\n- TLS_RSA_WITH_AES_128_CBC_SHA256\n- TLS_RSA_WITH_AES_128_GCM_SHA256\n- TLS_RSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_ECDSA_WITH_RC4_128_SHA\n- TLS_ECDHE_RSA_WITH_RC4_128_SHA\n- TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256\n- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256\n", "fieldValue": null, "fieldDefaultValue": "", - "fieldFlag": "ingester.ring.etcd.tls-cipher-suites", + "fieldFlag": "distributor.ring.etcd.tls-cipher-suites", "fieldType": "string", "fieldCategory": "advanced" }, @@ -2571,7 +1904,7 @@ "desc": "Override the default minimum TLS version. Allowed values: VersionTLS10, VersionTLS11, VersionTLS12, VersionTLS13", "fieldValue": null, "fieldDefaultValue": "", - "fieldFlag": "ingester.ring.etcd.tls-min-version", + "fieldFlag": "distributor.ring.etcd.tls-min-version", "fieldType": "string", "fieldCategory": "advanced" }, @@ -2582,7 +1915,7 @@ "desc": "Etcd username.", "fieldValue": null, "fieldDefaultValue": "", - "fieldFlag": "ingester.ring.etcd.username", + "fieldFlag": "distributor.ring.etcd.username", "fieldType": "string" }, { @@ -2592,7 +1925,7 @@ "desc": "Etcd password.", "fieldValue": null, "fieldDefaultValue": "", - "fieldFlag": "ingester.ring.etcd.password", + "fieldFlag": "distributor.ring.etcd.password", "fieldType": "string" } ], @@ -2601,67 +1934,2033 @@ }, { "kind": "block", - "name": "multi", + "name": "memberlist", "required": false, "desc": "", "blockEntries": [ { "kind": "field", - "name": "primary", + "name": "node_name", "required": false, - "desc": "Primary backend storage used by multi-client.", + "desc": "Name of the node in memberlist cluster. Defaults to hostname.", "fieldValue": null, "fieldDefaultValue": "", - "fieldFlag": "ingester.ring.multi.primary", + "fieldFlag": "distributor.ring.memberlist.nodename", "fieldType": "string", "fieldCategory": "advanced" }, { "kind": "field", - "name": "secondary", + "name": "randomize_node_name", "required": false, - "desc": "Secondary backend storage used by multi-client.", + "desc": "Add random suffix to the node name.", "fieldValue": null, - "fieldDefaultValue": "", - "fieldFlag": "ingester.ring.multi.secondary", - "fieldType": "string", + "fieldDefaultValue": true, + "fieldFlag": "distributor.ring.memberlist.randomize-node-name", + "fieldType": "boolean", "fieldCategory": "advanced" }, { "kind": "field", - "name": "mirror_enabled", + "name": "stream_timeout", "required": false, - "desc": "Mirror writes to secondary store.", + "desc": "The timeout for establishing a connection with a remote node, and for read/write operations.", "fieldValue": null, - "fieldDefaultValue": false, - "fieldFlag": "ingester.ring.multi.mirror-enabled", - "fieldType": "boolean", + "fieldDefaultValue": 2000000000, + "fieldFlag": "distributor.ring.memberlist.stream-timeout", + "fieldType": "duration", "fieldCategory": "advanced" }, { "kind": "field", - "name": "mirror_timeout", + "name": "retransmit_factor", "required": false, - "desc": "Timeout for storing value to secondary store.", + "desc": "Multiplication factor used when sending out messages (factor * log(N+1)).", "fieldValue": null, - "fieldDefaultValue": 2000000000, - "fieldFlag": "ingester.ring.multi.mirror-timeout", + "fieldDefaultValue": 4, + "fieldFlag": "distributor.ring.memberlist.retransmit-factor", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "pull_push_interval", + "required": false, + "desc": "How often to use pull/push sync.", + "fieldValue": null, + "fieldDefaultValue": 30000000000, + "fieldFlag": "distributor.ring.memberlist.pullpush-interval", "fieldType": "duration", "fieldCategory": "advanced" - } - ], - "fieldValue": null, - "fieldDefaultValue": null - } - ], - "fieldValue": null, - "fieldDefaultValue": null - }, - { - "kind": "field", - "name": "heartbeat_period", - "required": false, - "desc": "Period at which to heartbeat to the ring. 0 = disabled.", + }, + { + "kind": "field", + "name": "gossip_interval", + "required": false, + "desc": "How often to gossip.", + "fieldValue": null, + "fieldDefaultValue": 200000000, + "fieldFlag": "distributor.ring.memberlist.gossip-interval", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "gossip_nodes", + "required": false, + "desc": "How many nodes to gossip to.", + "fieldValue": null, + "fieldDefaultValue": 3, + "fieldFlag": "distributor.ring.memberlist.gossip-nodes", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "gossip_to_dead_nodes_time", + "required": false, + "desc": "How long to keep gossiping to dead nodes, to give them chance to refute their death.", + "fieldValue": null, + "fieldDefaultValue": 30000000000, + "fieldFlag": "distributor.ring.memberlist.gossip-to-dead-nodes-time", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "dead_node_reclaim_time", + "required": false, + "desc": "How soon can dead node's name be reclaimed with new address. 0 to disable.", + "fieldValue": null, + "fieldDefaultValue": 0, + "fieldFlag": "distributor.ring.memberlist.dead-node-reclaim-time", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "compression_enabled", + "required": false, + "desc": "Enable message compression. This can be used to reduce bandwidth usage at the cost of slightly more CPU utilization.", + "fieldValue": null, + "fieldDefaultValue": true, + "fieldFlag": "distributor.ring.memberlist.compression-enabled", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "notify_interval", + "required": false, + "desc": "How frequently to notify watchers when a key changes. Can reduce CPU activity in large memberlist deployments. 0 to notify without delay.", + "fieldValue": null, + "fieldDefaultValue": 0, + "fieldFlag": "distributor.ring.memberlist.notify-interval", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "advertise_addr", + "required": false, + "desc": "Gossip address to advertise to other members in the cluster. Used for NAT traversal.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "distributor.ring.memberlist.advertise-addr", + "fieldType": "string" + }, + { + "kind": "field", + "name": "advertise_port", + "required": false, + "desc": "Gossip port to advertise to other members in the cluster. Used for NAT traversal.", + "fieldValue": null, + "fieldDefaultValue": 7946, + "fieldFlag": "distributor.ring.memberlist.advertise-port", + "fieldType": "int" + }, + { + "kind": "field", + "name": "cluster_label", + "required": false, + "desc": "The cluster label is an optional string to include in outbound packets and gossip streams. Other members in the memberlist cluster will discard any message whose label doesn't match the configured one, unless the 'cluster-label-verification-disabled' configuration option is set to true.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "distributor.ring.memberlist.cluster-label", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "cluster_label_verification_disabled", + "required": false, + "desc": "When true, memberlist doesn't verify that inbound packets and gossip streams have the cluster label matching the configured one. This verification should be disabled while rolling out the change to the configured cluster label in a live memberlist cluster.", + "fieldValue": null, + "fieldDefaultValue": false, + "fieldFlag": "distributor.ring.memberlist.cluster-label-verification-disabled", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "join_members", + "required": false, + "desc": "Other cluster members to join. Can be specified multiple times. It can be an IP, hostname or an entry specified in the DNS Service Discovery format.", + "fieldValue": null, + "fieldDefaultValue": [], + "fieldFlag": "distributor.ring.memberlist.join", + "fieldType": "list of strings" + }, + { + "kind": "field", + "name": "min_join_backoff", + "required": false, + "desc": "Min backoff duration to join other cluster members.", + "fieldValue": null, + "fieldDefaultValue": 1000000000, + "fieldFlag": "distributor.ring.memberlist.min-join-backoff", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "max_join_backoff", + "required": false, + "desc": "Max backoff duration to join other cluster members.", + "fieldValue": null, + "fieldDefaultValue": 60000000000, + "fieldFlag": "distributor.ring.memberlist.max-join-backoff", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "max_join_retries", + "required": false, + "desc": "Max number of retries to join other cluster members.", + "fieldValue": null, + "fieldDefaultValue": 10, + "fieldFlag": "distributor.ring.memberlist.max-join-retries", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "abort_if_cluster_join_fails", + "required": false, + "desc": "If this node fails to join memberlist cluster, abort.", + "fieldValue": null, + "fieldDefaultValue": false, + "fieldFlag": "distributor.ring.memberlist.abort-if-join-fails", + "fieldType": "boolean" + }, + { + "kind": "field", + "name": "rejoin_interval", + "required": false, + "desc": "If not 0, how often to rejoin the cluster. Occasional rejoin can help to fix the cluster split issue, and is harmless otherwise. For example when using only few components as a seed nodes (via -memberlist.join), then it's recommended to use rejoin. If -memberlist.join points to dynamic service that resolves to all gossiping nodes (eg. Kubernetes headless service), then rejoin is not needed.", + "fieldValue": null, + "fieldDefaultValue": 0, + "fieldFlag": "distributor.ring.memberlist.rejoin-interval", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "left_ingesters_timeout", + "required": false, + "desc": "How long to keep LEFT ingesters in the ring.", + "fieldValue": null, + "fieldDefaultValue": 300000000000, + "fieldFlag": "distributor.ring.memberlist.left-ingesters-timeout", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "leave_timeout", + "required": false, + "desc": "Timeout for leaving memberlist cluster.", + "fieldValue": null, + "fieldDefaultValue": 20000000000, + "fieldFlag": "distributor.ring.memberlist.leave-timeout", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "broadcast_timeout_for_local_updates_on_shutdown", + "required": false, + "desc": "Timeout for broadcasting all remaining locally-generated updates to other nodes when shutting down. Only used if there are nodes left in the memberlist cluster, and only applies to locally-generated updates, not to broadcast messages that are result of incoming gossip updates. 0 = no timeout, wait until all locally-generated updates are sent.", + "fieldValue": null, + "fieldDefaultValue": 10000000000, + "fieldFlag": "distributor.ring.memberlist.broadcast-timeout-for-local-updates-on-shutdown", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "message_history_buffer_bytes", + "required": false, + "desc": "How much space to use for keeping received and sent messages in memory for troubleshooting (two buffers). 0 to disable.", + "fieldValue": null, + "fieldDefaultValue": 0, + "fieldFlag": "distributor.ring.memberlist.message-history-buffer-bytes", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "bind_addr", + "required": false, + "desc": "IP address to listen on for gossip messages. Multiple addresses may be specified. Defaults to 0.0.0.0", + "fieldValue": null, + "fieldDefaultValue": [], + "fieldFlag": "distributor.ring.memberlist.bind-addr", + "fieldType": "list of strings" + }, + { + "kind": "field", + "name": "bind_port", + "required": false, + "desc": "Port to listen on for gossip messages.", + "fieldValue": null, + "fieldDefaultValue": 7946, + "fieldFlag": "distributor.ring.memberlist.bind-port", + "fieldType": "int" + }, + { + "kind": "field", + "name": "packet_dial_timeout", + "required": false, + "desc": "Timeout used when connecting to other nodes to send packet.", + "fieldValue": null, + "fieldDefaultValue": 2000000000, + "fieldFlag": "distributor.ring.memberlist.packet-dial-timeout", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "packet_write_timeout", + "required": false, + "desc": "Timeout for writing 'packet' data.", + "fieldValue": null, + "fieldDefaultValue": 5000000000, + "fieldFlag": "distributor.ring.memberlist.packet-write-timeout", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "max_concurrent_writes", + "required": false, + "desc": "Maximum number of concurrent writes to other nodes.", + "fieldValue": null, + "fieldDefaultValue": 3, + "fieldFlag": "distributor.ring.memberlist.max-concurrent-writes", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "acquire_writer_timeout", + "required": false, + "desc": "Timeout for acquiring one of the concurrent write slots. After this time, the message will be dropped.", + "fieldValue": null, + "fieldDefaultValue": 250000000, + "fieldFlag": "distributor.ring.memberlist.acquire-writer-timeout", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_enabled", + "required": false, + "desc": "Enable TLS on the memberlist transport layer.", + "fieldValue": null, + "fieldDefaultValue": false, + "fieldFlag": "distributor.ring.memberlist.tls-enabled", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_cert_path", + "required": false, + "desc": "Path to the client certificate, which will be used for authenticating with the server. Also requires the key path to be configured.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "distributor.ring.memberlist.tls-cert-path", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_key_path", + "required": false, + "desc": "Path to the key for the client certificate. Also requires the client certificate to be configured.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "distributor.ring.memberlist.tls-key-path", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_ca_path", + "required": false, + "desc": "Path to the CA certificates to validate server certificate against. If not set, the host's root CA certificates are used.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "distributor.ring.memberlist.tls-ca-path", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_server_name", + "required": false, + "desc": "Override the expected name on the server certificate.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "distributor.ring.memberlist.tls-server-name", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_insecure_skip_verify", + "required": false, + "desc": "Skip validating server certificate.", + "fieldValue": null, + "fieldDefaultValue": false, + "fieldFlag": "distributor.ring.memberlist.tls-insecure-skip-verify", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_cipher_suites", + "required": false, + "desc": "Override the default cipher suite list (separated by commas). Allowed values:\n\nSecure Ciphers:\n- TLS_AES_128_GCM_SHA256\n- TLS_AES_256_GCM_SHA384\n- TLS_CHACHA20_POLY1305_SHA256\n- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA\n- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA\n- TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256\n- TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256\n- TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256\n- TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256\n\nInsecure Ciphers:\n- TLS_RSA_WITH_RC4_128_SHA\n- TLS_RSA_WITH_3DES_EDE_CBC_SHA\n- TLS_RSA_WITH_AES_128_CBC_SHA\n- TLS_RSA_WITH_AES_256_CBC_SHA\n- TLS_RSA_WITH_AES_128_CBC_SHA256\n- TLS_RSA_WITH_AES_128_GCM_SHA256\n- TLS_RSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_ECDSA_WITH_RC4_128_SHA\n- TLS_ECDHE_RSA_WITH_RC4_128_SHA\n- TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256\n- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256\n", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "distributor.ring.memberlist.tls-cipher-suites", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_min_version", + "required": false, + "desc": "Override the default minimum TLS version. Allowed values: VersionTLS10, VersionTLS11, VersionTLS12, VersionTLS13", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "distributor.ring.memberlist.tls-min-version", + "fieldType": "string", + "fieldCategory": "advanced" + } + ], + "fieldValue": null, + "fieldDefaultValue": null + }, + { + "kind": "block", + "name": "multi", + "required": false, + "desc": "", + "blockEntries": [ + { + "kind": "field", + "name": "primary", + "required": false, + "desc": "Primary backend storage used by multi-client.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "distributor.ring.multi.primary", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "secondary", + "required": false, + "desc": "Secondary backend storage used by multi-client.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "distributor.ring.multi.secondary", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "mirror_enabled", + "required": false, + "desc": "Mirror writes to secondary store.", + "fieldValue": null, + "fieldDefaultValue": false, + "fieldFlag": "distributor.ring.multi.mirror-enabled", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "mirror_timeout", + "required": false, + "desc": "Timeout for storing value to secondary store.", + "fieldValue": null, + "fieldDefaultValue": 2000000000, + "fieldFlag": "distributor.ring.multi.mirror-timeout", + "fieldType": "duration", + "fieldCategory": "advanced" + } + ], + "fieldValue": null, + "fieldDefaultValue": null + } + ], + "fieldValue": null, + "fieldDefaultValue": null + }, + { + "kind": "field", + "name": "heartbeat_period", + "required": false, + "desc": "Period at which to heartbeat to the ring. 0 = disabled.", + "fieldValue": null, + "fieldDefaultValue": 15000000000, + "fieldFlag": "distributor.ring.heartbeat-period", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "heartbeat_timeout", + "required": false, + "desc": "The heartbeat timeout after which distributors are considered unhealthy within the ring. 0 = never (timeout disabled).", + "fieldValue": null, + "fieldDefaultValue": 60000000000, + "fieldFlag": "distributor.ring.heartbeat-timeout", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "instance_id", + "required": false, + "desc": "Instance ID to register in the ring.", + "fieldValue": null, + "fieldDefaultValue": "\u003chostname\u003e", + "fieldFlag": "distributor.ring.instance-id", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "instance_interface_names", + "required": false, + "desc": "List of network interface names to look up when finding the instance IP address.", + "fieldValue": null, + "fieldDefaultValue": [], + "fieldFlag": "distributor.ring.instance-interface-names", + "fieldType": "list of strings" + }, + { + "kind": "field", + "name": "instance_port", + "required": false, + "desc": "Port to advertise in the ring (defaults to -server.grpc-listen-port).", + "fieldValue": null, + "fieldDefaultValue": 0, + "fieldFlag": "distributor.ring.instance-port", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "instance_addr", + "required": false, + "desc": "IP address to advertise in the ring. Default is auto-detected.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "distributor.ring.instance-addr", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "instance_enable_ipv6", + "required": false, + "desc": "Enable using a IPv6 instance address. (default false)", + "fieldValue": null, + "fieldDefaultValue": false, + "fieldFlag": "distributor.ring.instance-enable-ipv6", + "fieldType": "boolean", + "fieldCategory": "advanced" + } + ], + "fieldValue": null, + "fieldDefaultValue": null + }, + { + "kind": "block", + "name": "instance_limits", + "required": false, + "desc": "", + "blockEntries": [ + { + "kind": "field", + "name": "max_ingestion_rate", + "required": false, + "desc": "Max ingestion rate (samples/sec) that this distributor will accept. This limit is per-distributor, not per-tenant. Additional push requests will be rejected. Current ingestion rate is computed as exponentially weighted moving average, updated every second. 0 = unlimited.", + "fieldValue": null, + "fieldDefaultValue": 0, + "fieldFlag": "distributor.instance-limits.max-ingestion-rate", + "fieldType": "float", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "max_inflight_push_requests", + "required": false, + "desc": "Max inflight push requests that this distributor can handle. This limit is per-distributor, not per-tenant. Additional requests will be rejected. 0 = unlimited.", + "fieldValue": null, + "fieldDefaultValue": 2000, + "fieldFlag": "distributor.instance-limits.max-inflight-push-requests", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "max_inflight_push_requests_bytes", + "required": false, + "desc": "The sum of the request sizes in bytes of inflight push requests that this distributor can handle. This limit is per-distributor, not per-tenant. Additional requests will be rejected. 0 = unlimited.", + "fieldValue": null, + "fieldDefaultValue": 0, + "fieldFlag": "distributor.instance-limits.max-inflight-push-requests-bytes", + "fieldType": "int", + "fieldCategory": "advanced" + } + ], + "fieldValue": null, + "fieldDefaultValue": null + }, + { + "kind": "field", + "name": "write_requests_buffer_pooling_enabled", + "required": false, + "desc": "Enable pooling of buffers used for marshaling write requests.", + "fieldValue": null, + "fieldDefaultValue": true, + "fieldFlag": "distributor.write-requests-buffer-pooling-enabled", + "fieldType": "boolean", + "fieldCategory": "experimental" + }, + { + "kind": "field", + "name": "reusable_ingester_push_workers", + "required": false, + "desc": "Number of pre-allocated workers used to forward push requests to the ingesters. If 0, no workers will be used and a new goroutine will be spawned for each ingester push request. If not enough workers available, new goroutine will be spawned. (Note: this is a performance optimization, not a limiting feature.)", + "fieldValue": null, + "fieldDefaultValue": 2000, + "fieldFlag": "distributor.reusable-ingester-push-workers", + "fieldType": "int", + "fieldCategory": "advanced" + } + ], + "fieldValue": null, + "fieldDefaultValue": null + }, + { + "kind": "block", + "name": "querier", + "required": false, + "desc": "", + "blockEntries": [ + { + "kind": "field", + "name": "query_store_after", + "required": false, + "desc": "The time after which a metric should be queried from storage and not just ingesters. 0 means all queries are sent to store. If this option is enabled, the time range of the query sent to the store-gateway will be manipulated to ensure the query end is not more recent than 'now - query-store-after'.", + "fieldValue": null, + "fieldDefaultValue": 43200000000000, + "fieldFlag": "querier.query-store-after", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "block", + "name": "store_gateway_client", + "required": false, + "desc": "", + "blockEntries": [ + { + "kind": "field", + "name": "tls_enabled", + "required": false, + "desc": "Enable TLS for gRPC client connecting to store-gateway.", + "fieldValue": null, + "fieldDefaultValue": false, + "fieldFlag": "querier.store-gateway-client.tls-enabled", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_cert_path", + "required": false, + "desc": "Path to the client certificate, which will be used for authenticating with the server. Also requires the key path to be configured.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "querier.store-gateway-client.tls-cert-path", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_key_path", + "required": false, + "desc": "Path to the key for the client certificate. Also requires the client certificate to be configured.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "querier.store-gateway-client.tls-key-path", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_ca_path", + "required": false, + "desc": "Path to the CA certificates to validate server certificate against. If not set, the host's root CA certificates are used.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "querier.store-gateway-client.tls-ca-path", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_server_name", + "required": false, + "desc": "Override the expected name on the server certificate.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "querier.store-gateway-client.tls-server-name", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_insecure_skip_verify", + "required": false, + "desc": "Skip validating server certificate.", + "fieldValue": null, + "fieldDefaultValue": false, + "fieldFlag": "querier.store-gateway-client.tls-insecure-skip-verify", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_cipher_suites", + "required": false, + "desc": "Override the default cipher suite list (separated by commas). Allowed values:\n\nSecure Ciphers:\n- TLS_AES_128_GCM_SHA256\n- TLS_AES_256_GCM_SHA384\n- TLS_CHACHA20_POLY1305_SHA256\n- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA\n- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA\n- TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256\n- TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256\n- TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256\n- TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256\n\nInsecure Ciphers:\n- TLS_RSA_WITH_RC4_128_SHA\n- TLS_RSA_WITH_3DES_EDE_CBC_SHA\n- TLS_RSA_WITH_AES_128_CBC_SHA\n- TLS_RSA_WITH_AES_256_CBC_SHA\n- TLS_RSA_WITH_AES_128_CBC_SHA256\n- TLS_RSA_WITH_AES_128_GCM_SHA256\n- TLS_RSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_ECDSA_WITH_RC4_128_SHA\n- TLS_ECDHE_RSA_WITH_RC4_128_SHA\n- TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256\n- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256\n", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "querier.store-gateway-client.tls-cipher-suites", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_min_version", + "required": false, + "desc": "Override the default minimum TLS version. Allowed values: VersionTLS10, VersionTLS11, VersionTLS12, VersionTLS13", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "querier.store-gateway-client.tls-min-version", + "fieldType": "string", + "fieldCategory": "advanced" + } + ], + "fieldValue": null, + "fieldDefaultValue": null + }, + { + "kind": "field", + "name": "shuffle_sharding_ingesters_enabled", + "required": false, + "desc": "Fetch in-memory series from the minimum set of required ingesters, selecting only ingesters which may have received series since -querier.query-ingesters-within. If this setting is false or -querier.query-ingesters-within is '0', queriers always query all ingesters (ingesters shuffle sharding on read path is disabled).", + "fieldValue": null, + "fieldDefaultValue": true, + "fieldFlag": "querier.shuffle-sharding-ingesters-enabled", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "streaming_chunks_per_ingester_series_buffer_size", + "required": false, + "desc": "Number of series to buffer per ingester when streaming chunks from ingesters.", + "fieldValue": null, + "fieldDefaultValue": 256, + "fieldFlag": "querier.streaming-chunks-per-ingester-buffer-size", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "streaming_chunks_per_store_gateway_series_buffer_size", + "required": false, + "desc": "Number of series to buffer per store-gateway when streaming chunks from store-gateways.", + "fieldValue": null, + "fieldDefaultValue": 256, + "fieldFlag": "querier.streaming-chunks-per-store-gateway-buffer-size", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "minimize_ingester_requests", + "required": false, + "desc": "If true, when querying ingesters, only the minimum required ingesters required to reach quorum will be queried initially, with other ingesters queried only if needed due to failures from the initial set of ingesters. Enabling this option reduces resource consumption for the happy path at the cost of increased latency for the unhappy path.", + "fieldValue": null, + "fieldDefaultValue": true, + "fieldFlag": "querier.minimize-ingester-requests", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "minimize_ingester_requests_hedging_delay", + "required": false, + "desc": "Delay before initiating requests to further ingesters when request minimization is enabled and the initially selected set of ingesters have not all responded. Ignored if -querier.minimize-ingester-requests is not enabled.", + "fieldValue": null, + "fieldDefaultValue": 3000000000, + "fieldFlag": "querier.minimize-ingester-requests-hedging-delay", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "query_engine", + "required": false, + "desc": "Query engine to use, either 'prometheus' or 'mimir'", + "fieldValue": null, + "fieldDefaultValue": "prometheus", + "fieldFlag": "querier.query-engine", + "fieldType": "string", + "fieldCategory": "experimental" + }, + { + "kind": "field", + "name": "enable_query_engine_fallback", + "required": false, + "desc": "If set to true and the Mimir query engine is in use, fall back to using the Prometheus query engine for any queries not supported by the Mimir query engine.", + "fieldValue": null, + "fieldDefaultValue": true, + "fieldFlag": "querier.enable-query-engine-fallback", + "fieldType": "boolean", + "fieldCategory": "experimental" + }, + { + "kind": "field", + "name": "max_concurrent", + "required": false, + "desc": "The number of workers running in each querier process. This setting limits the maximum number of concurrent queries in each querier. The minimum value is four; lower values are ignored and set to the minimum", + "fieldValue": null, + "fieldDefaultValue": 20, + "fieldFlag": "querier.max-concurrent", + "fieldType": "int" + }, + { + "kind": "field", + "name": "timeout", + "required": false, + "desc": "The timeout for a query. This config option should be set on query-frontend too when query sharding is enabled. This also applies to queries evaluated by the ruler (internally or remotely).", + "fieldValue": null, + "fieldDefaultValue": 120000000000, + "fieldFlag": "querier.timeout", + "fieldType": "duration" + }, + { + "kind": "field", + "name": "max_samples", + "required": false, + "desc": "Maximum number of samples a single query can load into memory. This config option should be set on query-frontend too when query sharding is enabled.", + "fieldValue": null, + "fieldDefaultValue": 50000000, + "fieldFlag": "querier.max-samples", + "fieldType": "int" + }, + { + "kind": "field", + "name": "default_evaluation_interval", + "required": false, + "desc": "The default evaluation interval or step size for subqueries. This config option should be set on query-frontend too when query sharding is enabled.", + "fieldValue": null, + "fieldDefaultValue": 60000000000, + "fieldFlag": "querier.default-evaluation-interval", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "lookback_delta", + "required": false, + "desc": "Time since the last sample after which a time series is considered stale and ignored by expression evaluations. This config option should be set on query-frontend too when query sharding is enabled.", + "fieldValue": null, + "fieldDefaultValue": 300000000000, + "fieldFlag": "querier.lookback-delta", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "promql_experimental_functions_enabled", + "required": false, + "desc": "Enable experimental PromQL functions. This config option should be set on query-frontend too when query sharding is enabled.", + "fieldValue": null, + "fieldDefaultValue": false, + "fieldFlag": "querier.promql-experimental-functions-enabled", + "fieldType": "boolean", + "fieldCategory": "experimental" + }, + { + "kind": "block", + "name": "mimir_query_engine", + "required": false, + "desc": "", + "blockEntries": [ + { + "kind": "field", + "name": "enable_aggregation_operations", + "required": false, + "desc": "Enable support for aggregation operations in Mimir's query engine. Only applies if the Mimir query engine is in use.", + "fieldValue": null, + "fieldDefaultValue": true, + "fieldFlag": "querier.mimir-query-engine.enable-aggregation-operations", + "fieldType": "boolean", + "fieldCategory": "experimental" + }, + { + "kind": "field", + "name": "enable_vector_vector_binary_comparison_operations", + "required": false, + "desc": "Enable support for binary comparison operations between two vectors in Mimir's query engine. Only applies if the Mimir query engine is in use.", + "fieldValue": null, + "fieldDefaultValue": true, + "fieldFlag": "querier.mimir-query-engine.enable-vector-vector-binary-comparison-operations", + "fieldType": "boolean", + "fieldCategory": "experimental" + }, + { + "kind": "field", + "name": "enable_vector_scalar_binary_comparison_operations", + "required": false, + "desc": "Enable support for binary comparison operations between a vector and a scalar in Mimir's query engine. Only applies if the Mimir query engine is in use.", + "fieldValue": null, + "fieldDefaultValue": true, + "fieldFlag": "querier.mimir-query-engine.enable-vector-scalar-binary-comparison-operations", + "fieldType": "boolean", + "fieldCategory": "experimental" + }, + { + "kind": "field", + "name": "enable_scalar_scalar_binary_comparison_operations", + "required": false, + "desc": "Enable support for binary comparison operations between two scalars in Mimir's query engine. Only applies if the Mimir query engine is in use.", + "fieldValue": null, + "fieldDefaultValue": true, + "fieldFlag": "querier.mimir-query-engine.enable-scalar-scalar-binary-comparison-operations", + "fieldType": "boolean", + "fieldCategory": "experimental" + }, + { + "kind": "field", + "name": "enable_binary_logical_operations", + "required": false, + "desc": "Enable support for binary logical operations in Mimir's query engine. Only applies if the Mimir query engine is in use.", + "fieldValue": null, + "fieldDefaultValue": true, + "fieldFlag": "querier.mimir-query-engine.enable-binary-logical-operations", + "fieldType": "boolean", + "fieldCategory": "experimental" + }, + { + "kind": "field", + "name": "enable_scalars", + "required": false, + "desc": "Enable support for scalars in Mimir's query engine. Only applies if the Mimir query engine is in use.", + "fieldValue": null, + "fieldDefaultValue": true, + "fieldFlag": "querier.mimir-query-engine.enable-scalars", + "fieldType": "boolean", + "fieldCategory": "experimental" + }, + { + "kind": "field", + "name": "enable_subqueries", + "required": false, + "desc": "Enable support for subqueries in Mimir's query engine. Only applies if the Mimir query engine is in use.", + "fieldValue": null, + "fieldDefaultValue": true, + "fieldFlag": "querier.mimir-query-engine.enable-subqueries", + "fieldType": "boolean", + "fieldCategory": "experimental" + } + ], + "fieldValue": null, + "fieldDefaultValue": null + } + ], + "fieldValue": null, + "fieldDefaultValue": null + }, + { + "kind": "block", + "name": "ingester_client", + "required": false, + "desc": "", + "blockEntries": [ + { + "kind": "block", + "name": "grpc_client_config", + "required": false, + "desc": "", + "blockEntries": [ + { + "kind": "field", + "name": "max_recv_msg_size", + "required": false, + "desc": "gRPC client max receive message size (bytes).", + "fieldValue": null, + "fieldDefaultValue": 104857600, + "fieldFlag": "ingester.client.grpc-max-recv-msg-size", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "max_send_msg_size", + "required": false, + "desc": "gRPC client max send message size (bytes).", + "fieldValue": null, + "fieldDefaultValue": 104857600, + "fieldFlag": "ingester.client.grpc-max-send-msg-size", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "grpc_compression", + "required": false, + "desc": "Use compression when sending messages. Supported values are: 'gzip', 'snappy', 's2' and '' (disable compression)", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "ingester.client.grpc-compression", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "rate_limit", + "required": false, + "desc": "Rate limit for gRPC client; 0 means disabled.", + "fieldValue": null, + "fieldDefaultValue": 0, + "fieldFlag": "ingester.client.grpc-client-rate-limit", + "fieldType": "float", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "rate_limit_burst", + "required": false, + "desc": "Rate limit burst for gRPC client.", + "fieldValue": null, + "fieldDefaultValue": 0, + "fieldFlag": "ingester.client.grpc-client-rate-limit-burst", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "backoff_on_ratelimits", + "required": false, + "desc": "Enable backoff and retry when we hit rate limits.", + "fieldValue": null, + "fieldDefaultValue": false, + "fieldFlag": "ingester.client.backoff-on-ratelimits", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "block", + "name": "backoff_config", + "required": false, + "desc": "", + "blockEntries": [ + { + "kind": "field", + "name": "min_period", + "required": false, + "desc": "Minimum delay when backing off.", + "fieldValue": null, + "fieldDefaultValue": 100000000, + "fieldFlag": "ingester.client.backoff-min-period", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "max_period", + "required": false, + "desc": "Maximum delay when backing off.", + "fieldValue": null, + "fieldDefaultValue": 10000000000, + "fieldFlag": "ingester.client.backoff-max-period", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "max_retries", + "required": false, + "desc": "Number of times to backoff and retry before failing.", + "fieldValue": null, + "fieldDefaultValue": 10, + "fieldFlag": "ingester.client.backoff-retries", + "fieldType": "int", + "fieldCategory": "advanced" + } + ], + "fieldValue": null, + "fieldDefaultValue": null + }, + { + "kind": "field", + "name": "initial_stream_window_size", + "required": false, + "desc": "Initial stream window size. Values less than the default are not supported and are ignored. Setting this to a value other than the default disables the BDP estimator.", + "fieldValue": null, + "fieldDefaultValue": null, + "fieldFlag": "ingester.client.initial-stream-window-size", + "fieldType": "int", + "fieldCategory": "experimental" + }, + { + "kind": "field", + "name": "initial_connection_window_size", + "required": false, + "desc": "Initial connection window size. Values less than the default are not supported and are ignored. Setting this to a value other than the default disables the BDP estimator.", + "fieldValue": null, + "fieldDefaultValue": null, + "fieldFlag": "ingester.client.initial-connection-window-size", + "fieldType": "int", + "fieldCategory": "experimental" + }, + { + "kind": "field", + "name": "tls_enabled", + "required": false, + "desc": "Enable TLS in the gRPC client. This flag needs to be enabled when any other TLS flag is set. If set to false, insecure connection to gRPC server will be used.", + "fieldValue": null, + "fieldDefaultValue": false, + "fieldFlag": "ingester.client.tls-enabled", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_cert_path", + "required": false, + "desc": "Path to the client certificate, which will be used for authenticating with the server. Also requires the key path to be configured.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "ingester.client.tls-cert-path", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_key_path", + "required": false, + "desc": "Path to the key for the client certificate. Also requires the client certificate to be configured.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "ingester.client.tls-key-path", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_ca_path", + "required": false, + "desc": "Path to the CA certificates to validate server certificate against. If not set, the host's root CA certificates are used.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "ingester.client.tls-ca-path", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_server_name", + "required": false, + "desc": "Override the expected name on the server certificate.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "ingester.client.tls-server-name", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_insecure_skip_verify", + "required": false, + "desc": "Skip validating server certificate.", + "fieldValue": null, + "fieldDefaultValue": false, + "fieldFlag": "ingester.client.tls-insecure-skip-verify", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_cipher_suites", + "required": false, + "desc": "Override the default cipher suite list (separated by commas). Allowed values:\n\nSecure Ciphers:\n- TLS_AES_128_GCM_SHA256\n- TLS_AES_256_GCM_SHA384\n- TLS_CHACHA20_POLY1305_SHA256\n- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA\n- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA\n- TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256\n- TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256\n- TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256\n- TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256\n\nInsecure Ciphers:\n- TLS_RSA_WITH_RC4_128_SHA\n- TLS_RSA_WITH_3DES_EDE_CBC_SHA\n- TLS_RSA_WITH_AES_128_CBC_SHA\n- TLS_RSA_WITH_AES_256_CBC_SHA\n- TLS_RSA_WITH_AES_128_CBC_SHA256\n- TLS_RSA_WITH_AES_128_GCM_SHA256\n- TLS_RSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_ECDSA_WITH_RC4_128_SHA\n- TLS_ECDHE_RSA_WITH_RC4_128_SHA\n- TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256\n- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256\n", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "ingester.client.tls-cipher-suites", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_min_version", + "required": false, + "desc": "Override the default minimum TLS version. Allowed values: VersionTLS10, VersionTLS11, VersionTLS12, VersionTLS13", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "ingester.client.tls-min-version", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "connect_timeout", + "required": false, + "desc": "The maximum amount of time to establish a connection. A value of 0 means default gRPC client connect timeout and backoff.", + "fieldValue": null, + "fieldDefaultValue": 5000000000, + "fieldFlag": "ingester.client.connect-timeout", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "connect_backoff_base_delay", + "required": false, + "desc": "Initial backoff delay after first connection failure. Only relevant if ConnectTimeout \u003e 0.", + "fieldValue": null, + "fieldDefaultValue": 1000000000, + "fieldFlag": "ingester.client.connect-backoff-base-delay", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "connect_backoff_max_delay", + "required": false, + "desc": "Maximum backoff delay when establishing a connection. Only relevant if ConnectTimeout \u003e 0.", + "fieldValue": null, + "fieldDefaultValue": 5000000000, + "fieldFlag": "ingester.client.connect-backoff-max-delay", + "fieldType": "duration", + "fieldCategory": "advanced" + } + ], + "fieldValue": null, + "fieldDefaultValue": null + } + ], + "fieldValue": null, + "fieldDefaultValue": null + }, + { + "kind": "block", + "name": "ingester", + "required": false, + "desc": "", + "blockEntries": [ + { + "kind": "block", + "name": "ring", + "required": false, + "desc": "", + "blockEntries": [ + { + "kind": "block", + "name": "kvstore", + "required": false, + "desc": "", + "blockEntries": [ + { + "kind": "field", + "name": "store", + "required": false, + "desc": "Backend storage to use for the ring. Supported values are: consul, etcd, inmemory, memberlist, multi.", + "fieldValue": null, + "fieldDefaultValue": "memberlist", + "fieldFlag": "ingester.ring.store", + "fieldType": "string" + }, + { + "kind": "field", + "name": "prefix", + "required": false, + "desc": "The prefix for the keys in the store. Should end with a /.", + "fieldValue": null, + "fieldDefaultValue": "collectors/", + "fieldFlag": "ingester.ring.prefix", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "block", + "name": "consul", + "required": false, + "desc": "", + "blockEntries": [ + { + "kind": "field", + "name": "host", + "required": false, + "desc": "Hostname and port of Consul.", + "fieldValue": null, + "fieldDefaultValue": "localhost:8500", + "fieldFlag": "ingester.ring.consul.hostname", + "fieldType": "string" + }, + { + "kind": "field", + "name": "acl_token", + "required": false, + "desc": "ACL Token used to interact with Consul.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "ingester.ring.consul.acl-token", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "http_client_timeout", + "required": false, + "desc": "HTTP timeout when talking to Consul", + "fieldValue": null, + "fieldDefaultValue": 20000000000, + "fieldFlag": "ingester.ring.consul.client-timeout", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "consistent_reads", + "required": false, + "desc": "Enable consistent reads to Consul.", + "fieldValue": null, + "fieldDefaultValue": false, + "fieldFlag": "ingester.ring.consul.consistent-reads", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "watch_rate_limit", + "required": false, + "desc": "Rate limit when watching key or prefix in Consul, in requests per second. 0 disables the rate limit.", + "fieldValue": null, + "fieldDefaultValue": 1, + "fieldFlag": "ingester.ring.consul.watch-rate-limit", + "fieldType": "float", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "watch_burst_size", + "required": false, + "desc": "Burst size used in rate limit. Values less than 1 are treated as 1.", + "fieldValue": null, + "fieldDefaultValue": 1, + "fieldFlag": "ingester.ring.consul.watch-burst-size", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "cas_retry_delay", + "required": false, + "desc": "Maximum duration to wait before retrying a Compare And Swap (CAS) operation.", + "fieldValue": null, + "fieldDefaultValue": 1000000000, + "fieldFlag": "ingester.ring.consul.cas-retry-delay", + "fieldType": "duration", + "fieldCategory": "advanced" + } + ], + "fieldValue": null, + "fieldDefaultValue": null + }, + { + "kind": "block", + "name": "etcd", + "required": false, + "desc": "", + "blockEntries": [ + { + "kind": "field", + "name": "endpoints", + "required": false, + "desc": "The etcd endpoints to connect to.", + "fieldValue": null, + "fieldDefaultValue": [], + "fieldFlag": "ingester.ring.etcd.endpoints", + "fieldType": "list of strings" + }, + { + "kind": "field", + "name": "dial_timeout", + "required": false, + "desc": "The dial timeout for the etcd connection.", + "fieldValue": null, + "fieldDefaultValue": 10000000000, + "fieldFlag": "ingester.ring.etcd.dial-timeout", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "max_retries", + "required": false, + "desc": "The maximum number of retries to do for failed ops.", + "fieldValue": null, + "fieldDefaultValue": 10, + "fieldFlag": "ingester.ring.etcd.max-retries", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_enabled", + "required": false, + "desc": "Enable TLS.", + "fieldValue": null, + "fieldDefaultValue": false, + "fieldFlag": "ingester.ring.etcd.tls-enabled", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_cert_path", + "required": false, + "desc": "Path to the client certificate, which will be used for authenticating with the server. Also requires the key path to be configured.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "ingester.ring.etcd.tls-cert-path", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_key_path", + "required": false, + "desc": "Path to the key for the client certificate. Also requires the client certificate to be configured.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "ingester.ring.etcd.tls-key-path", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_ca_path", + "required": false, + "desc": "Path to the CA certificates to validate server certificate against. If not set, the host's root CA certificates are used.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "ingester.ring.etcd.tls-ca-path", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_server_name", + "required": false, + "desc": "Override the expected name on the server certificate.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "ingester.ring.etcd.tls-server-name", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_insecure_skip_verify", + "required": false, + "desc": "Skip validating server certificate.", + "fieldValue": null, + "fieldDefaultValue": false, + "fieldFlag": "ingester.ring.etcd.tls-insecure-skip-verify", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_cipher_suites", + "required": false, + "desc": "Override the default cipher suite list (separated by commas). Allowed values:\n\nSecure Ciphers:\n- TLS_AES_128_GCM_SHA256\n- TLS_AES_256_GCM_SHA384\n- TLS_CHACHA20_POLY1305_SHA256\n- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA\n- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA\n- TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256\n- TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256\n- TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256\n- TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256\n\nInsecure Ciphers:\n- TLS_RSA_WITH_RC4_128_SHA\n- TLS_RSA_WITH_3DES_EDE_CBC_SHA\n- TLS_RSA_WITH_AES_128_CBC_SHA\n- TLS_RSA_WITH_AES_256_CBC_SHA\n- TLS_RSA_WITH_AES_128_CBC_SHA256\n- TLS_RSA_WITH_AES_128_GCM_SHA256\n- TLS_RSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_ECDSA_WITH_RC4_128_SHA\n- TLS_ECDHE_RSA_WITH_RC4_128_SHA\n- TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256\n- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256\n", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "ingester.ring.etcd.tls-cipher-suites", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_min_version", + "required": false, + "desc": "Override the default minimum TLS version. Allowed values: VersionTLS10, VersionTLS11, VersionTLS12, VersionTLS13", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "ingester.ring.etcd.tls-min-version", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "username", + "required": false, + "desc": "Etcd username.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "ingester.ring.etcd.username", + "fieldType": "string" + }, + { + "kind": "field", + "name": "password", + "required": false, + "desc": "Etcd password.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "ingester.ring.etcd.password", + "fieldType": "string" + } + ], + "fieldValue": null, + "fieldDefaultValue": null + }, + { + "kind": "block", + "name": "memberlist", + "required": false, + "desc": "", + "blockEntries": [ + { + "kind": "field", + "name": "node_name", + "required": false, + "desc": "Name of the node in memberlist cluster. Defaults to hostname.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "ingester.ring.memberlist.nodename", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "randomize_node_name", + "required": false, + "desc": "Add random suffix to the node name.", + "fieldValue": null, + "fieldDefaultValue": true, + "fieldFlag": "ingester.ring.memberlist.randomize-node-name", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "stream_timeout", + "required": false, + "desc": "The timeout for establishing a connection with a remote node, and for read/write operations.", + "fieldValue": null, + "fieldDefaultValue": 2000000000, + "fieldFlag": "ingester.ring.memberlist.stream-timeout", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "retransmit_factor", + "required": false, + "desc": "Multiplication factor used when sending out messages (factor * log(N+1)).", + "fieldValue": null, + "fieldDefaultValue": 4, + "fieldFlag": "ingester.ring.memberlist.retransmit-factor", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "pull_push_interval", + "required": false, + "desc": "How often to use pull/push sync.", + "fieldValue": null, + "fieldDefaultValue": 30000000000, + "fieldFlag": "ingester.ring.memberlist.pullpush-interval", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "gossip_interval", + "required": false, + "desc": "How often to gossip.", + "fieldValue": null, + "fieldDefaultValue": 200000000, + "fieldFlag": "ingester.ring.memberlist.gossip-interval", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "gossip_nodes", + "required": false, + "desc": "How many nodes to gossip to.", + "fieldValue": null, + "fieldDefaultValue": 3, + "fieldFlag": "ingester.ring.memberlist.gossip-nodes", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "gossip_to_dead_nodes_time", + "required": false, + "desc": "How long to keep gossiping to dead nodes, to give them chance to refute their death.", + "fieldValue": null, + "fieldDefaultValue": 30000000000, + "fieldFlag": "ingester.ring.memberlist.gossip-to-dead-nodes-time", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "dead_node_reclaim_time", + "required": false, + "desc": "How soon can dead node's name be reclaimed with new address. 0 to disable.", + "fieldValue": null, + "fieldDefaultValue": 0, + "fieldFlag": "ingester.ring.memberlist.dead-node-reclaim-time", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "compression_enabled", + "required": false, + "desc": "Enable message compression. This can be used to reduce bandwidth usage at the cost of slightly more CPU utilization.", + "fieldValue": null, + "fieldDefaultValue": true, + "fieldFlag": "ingester.ring.memberlist.compression-enabled", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "notify_interval", + "required": false, + "desc": "How frequently to notify watchers when a key changes. Can reduce CPU activity in large memberlist deployments. 0 to notify without delay.", + "fieldValue": null, + "fieldDefaultValue": 0, + "fieldFlag": "ingester.ring.memberlist.notify-interval", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "advertise_addr", + "required": false, + "desc": "Gossip address to advertise to other members in the cluster. Used for NAT traversal.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "ingester.ring.memberlist.advertise-addr", + "fieldType": "string" + }, + { + "kind": "field", + "name": "advertise_port", + "required": false, + "desc": "Gossip port to advertise to other members in the cluster. Used for NAT traversal.", + "fieldValue": null, + "fieldDefaultValue": 7946, + "fieldFlag": "ingester.ring.memberlist.advertise-port", + "fieldType": "int" + }, + { + "kind": "field", + "name": "cluster_label", + "required": false, + "desc": "The cluster label is an optional string to include in outbound packets and gossip streams. Other members in the memberlist cluster will discard any message whose label doesn't match the configured one, unless the 'cluster-label-verification-disabled' configuration option is set to true.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "ingester.ring.memberlist.cluster-label", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "cluster_label_verification_disabled", + "required": false, + "desc": "When true, memberlist doesn't verify that inbound packets and gossip streams have the cluster label matching the configured one. This verification should be disabled while rolling out the change to the configured cluster label in a live memberlist cluster.", + "fieldValue": null, + "fieldDefaultValue": false, + "fieldFlag": "ingester.ring.memberlist.cluster-label-verification-disabled", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "join_members", + "required": false, + "desc": "Other cluster members to join. Can be specified multiple times. It can be an IP, hostname or an entry specified in the DNS Service Discovery format.", + "fieldValue": null, + "fieldDefaultValue": [], + "fieldFlag": "ingester.ring.memberlist.join", + "fieldType": "list of strings" + }, + { + "kind": "field", + "name": "min_join_backoff", + "required": false, + "desc": "Min backoff duration to join other cluster members.", + "fieldValue": null, + "fieldDefaultValue": 1000000000, + "fieldFlag": "ingester.ring.memberlist.min-join-backoff", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "max_join_backoff", + "required": false, + "desc": "Max backoff duration to join other cluster members.", + "fieldValue": null, + "fieldDefaultValue": 60000000000, + "fieldFlag": "ingester.ring.memberlist.max-join-backoff", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "max_join_retries", + "required": false, + "desc": "Max number of retries to join other cluster members.", + "fieldValue": null, + "fieldDefaultValue": 10, + "fieldFlag": "ingester.ring.memberlist.max-join-retries", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "abort_if_cluster_join_fails", + "required": false, + "desc": "If this node fails to join memberlist cluster, abort.", + "fieldValue": null, + "fieldDefaultValue": false, + "fieldFlag": "ingester.ring.memberlist.abort-if-join-fails", + "fieldType": "boolean" + }, + { + "kind": "field", + "name": "rejoin_interval", + "required": false, + "desc": "If not 0, how often to rejoin the cluster. Occasional rejoin can help to fix the cluster split issue, and is harmless otherwise. For example when using only few components as a seed nodes (via -memberlist.join), then it's recommended to use rejoin. If -memberlist.join points to dynamic service that resolves to all gossiping nodes (eg. Kubernetes headless service), then rejoin is not needed.", + "fieldValue": null, + "fieldDefaultValue": 0, + "fieldFlag": "ingester.ring.memberlist.rejoin-interval", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "left_ingesters_timeout", + "required": false, + "desc": "How long to keep LEFT ingesters in the ring.", + "fieldValue": null, + "fieldDefaultValue": 300000000000, + "fieldFlag": "ingester.ring.memberlist.left-ingesters-timeout", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "leave_timeout", + "required": false, + "desc": "Timeout for leaving memberlist cluster.", + "fieldValue": null, + "fieldDefaultValue": 20000000000, + "fieldFlag": "ingester.ring.memberlist.leave-timeout", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "broadcast_timeout_for_local_updates_on_shutdown", + "required": false, + "desc": "Timeout for broadcasting all remaining locally-generated updates to other nodes when shutting down. Only used if there are nodes left in the memberlist cluster, and only applies to locally-generated updates, not to broadcast messages that are result of incoming gossip updates. 0 = no timeout, wait until all locally-generated updates are sent.", + "fieldValue": null, + "fieldDefaultValue": 10000000000, + "fieldFlag": "ingester.ring.memberlist.broadcast-timeout-for-local-updates-on-shutdown", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "message_history_buffer_bytes", + "required": false, + "desc": "How much space to use for keeping received and sent messages in memory for troubleshooting (two buffers). 0 to disable.", + "fieldValue": null, + "fieldDefaultValue": 0, + "fieldFlag": "ingester.ring.memberlist.message-history-buffer-bytes", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "bind_addr", + "required": false, + "desc": "IP address to listen on for gossip messages. Multiple addresses may be specified. Defaults to 0.0.0.0", + "fieldValue": null, + "fieldDefaultValue": [], + "fieldFlag": "ingester.ring.memberlist.bind-addr", + "fieldType": "list of strings" + }, + { + "kind": "field", + "name": "bind_port", + "required": false, + "desc": "Port to listen on for gossip messages.", + "fieldValue": null, + "fieldDefaultValue": 7946, + "fieldFlag": "ingester.ring.memberlist.bind-port", + "fieldType": "int" + }, + { + "kind": "field", + "name": "packet_dial_timeout", + "required": false, + "desc": "Timeout used when connecting to other nodes to send packet.", + "fieldValue": null, + "fieldDefaultValue": 2000000000, + "fieldFlag": "ingester.ring.memberlist.packet-dial-timeout", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "packet_write_timeout", + "required": false, + "desc": "Timeout for writing 'packet' data.", + "fieldValue": null, + "fieldDefaultValue": 5000000000, + "fieldFlag": "ingester.ring.memberlist.packet-write-timeout", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "max_concurrent_writes", + "required": false, + "desc": "Maximum number of concurrent writes to other nodes.", + "fieldValue": null, + "fieldDefaultValue": 3, + "fieldFlag": "ingester.ring.memberlist.max-concurrent-writes", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "acquire_writer_timeout", + "required": false, + "desc": "Timeout for acquiring one of the concurrent write slots. After this time, the message will be dropped.", + "fieldValue": null, + "fieldDefaultValue": 250000000, + "fieldFlag": "ingester.ring.memberlist.acquire-writer-timeout", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_enabled", + "required": false, + "desc": "Enable TLS on the memberlist transport layer.", + "fieldValue": null, + "fieldDefaultValue": false, + "fieldFlag": "ingester.ring.memberlist.tls-enabled", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_cert_path", + "required": false, + "desc": "Path to the client certificate, which will be used for authenticating with the server. Also requires the key path to be configured.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "ingester.ring.memberlist.tls-cert-path", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_key_path", + "required": false, + "desc": "Path to the key for the client certificate. Also requires the client certificate to be configured.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "ingester.ring.memberlist.tls-key-path", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_ca_path", + "required": false, + "desc": "Path to the CA certificates to validate server certificate against. If not set, the host's root CA certificates are used.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "ingester.ring.memberlist.tls-ca-path", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_server_name", + "required": false, + "desc": "Override the expected name on the server certificate.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "ingester.ring.memberlist.tls-server-name", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_insecure_skip_verify", + "required": false, + "desc": "Skip validating server certificate.", + "fieldValue": null, + "fieldDefaultValue": false, + "fieldFlag": "ingester.ring.memberlist.tls-insecure-skip-verify", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_cipher_suites", + "required": false, + "desc": "Override the default cipher suite list (separated by commas). Allowed values:\n\nSecure Ciphers:\n- TLS_AES_128_GCM_SHA256\n- TLS_AES_256_GCM_SHA384\n- TLS_CHACHA20_POLY1305_SHA256\n- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA\n- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA\n- TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256\n- TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256\n- TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256\n- TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256\n\nInsecure Ciphers:\n- TLS_RSA_WITH_RC4_128_SHA\n- TLS_RSA_WITH_3DES_EDE_CBC_SHA\n- TLS_RSA_WITH_AES_128_CBC_SHA\n- TLS_RSA_WITH_AES_256_CBC_SHA\n- TLS_RSA_WITH_AES_128_CBC_SHA256\n- TLS_RSA_WITH_AES_128_GCM_SHA256\n- TLS_RSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_ECDSA_WITH_RC4_128_SHA\n- TLS_ECDHE_RSA_WITH_RC4_128_SHA\n- TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256\n- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256\n", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "ingester.ring.memberlist.tls-cipher-suites", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_min_version", + "required": false, + "desc": "Override the default minimum TLS version. Allowed values: VersionTLS10, VersionTLS11, VersionTLS12, VersionTLS13", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "ingester.ring.memberlist.tls-min-version", + "fieldType": "string", + "fieldCategory": "advanced" + } + ], + "fieldValue": null, + "fieldDefaultValue": null + }, + { + "kind": "block", + "name": "multi", + "required": false, + "desc": "", + "blockEntries": [ + { + "kind": "field", + "name": "primary", + "required": false, + "desc": "Primary backend storage used by multi-client.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "ingester.ring.multi.primary", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "secondary", + "required": false, + "desc": "Secondary backend storage used by multi-client.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "ingester.ring.multi.secondary", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "mirror_enabled", + "required": false, + "desc": "Mirror writes to secondary store.", + "fieldValue": null, + "fieldDefaultValue": false, + "fieldFlag": "ingester.ring.multi.mirror-enabled", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "mirror_timeout", + "required": false, + "desc": "Timeout for storing value to secondary store.", + "fieldValue": null, + "fieldDefaultValue": 2000000000, + "fieldFlag": "ingester.ring.multi.mirror-timeout", + "fieldType": "duration", + "fieldCategory": "advanced" + } + ], + "fieldValue": null, + "fieldDefaultValue": null + } + ], + "fieldValue": null, + "fieldDefaultValue": null + }, + { + "kind": "field", + "name": "heartbeat_period", + "required": false, + "desc": "Period at which to heartbeat to the ring. 0 = disabled.", "fieldValue": null, "fieldDefaultValue": 15000000000, "fieldFlag": "ingester.ring.heartbeat-period", @@ -2901,148 +4200,601 @@ "fieldType": "string" }, { - "kind": "field", - "name": "prefix", + "kind": "field", + "name": "prefix", + "required": false, + "desc": "The prefix for the keys in the store. Should end with a /.", + "fieldValue": null, + "fieldDefaultValue": "collectors/", + "fieldFlag": "ingester.partition-ring.prefix", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "block", + "name": "consul", + "required": false, + "desc": "", + "blockEntries": [ + { + "kind": "field", + "name": "host", + "required": false, + "desc": "Hostname and port of Consul.", + "fieldValue": null, + "fieldDefaultValue": "localhost:8500", + "fieldFlag": "ingester.partition-ring.consul.hostname", + "fieldType": "string" + }, + { + "kind": "field", + "name": "acl_token", + "required": false, + "desc": "ACL Token used to interact with Consul.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "ingester.partition-ring.consul.acl-token", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "http_client_timeout", + "required": false, + "desc": "HTTP timeout when talking to Consul", + "fieldValue": null, + "fieldDefaultValue": 20000000000, + "fieldFlag": "ingester.partition-ring.consul.client-timeout", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "consistent_reads", + "required": false, + "desc": "Enable consistent reads to Consul.", + "fieldValue": null, + "fieldDefaultValue": false, + "fieldFlag": "ingester.partition-ring.consul.consistent-reads", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "watch_rate_limit", + "required": false, + "desc": "Rate limit when watching key or prefix in Consul, in requests per second. 0 disables the rate limit.", + "fieldValue": null, + "fieldDefaultValue": 1, + "fieldFlag": "ingester.partition-ring.consul.watch-rate-limit", + "fieldType": "float", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "watch_burst_size", + "required": false, + "desc": "Burst size used in rate limit. Values less than 1 are treated as 1.", + "fieldValue": null, + "fieldDefaultValue": 1, + "fieldFlag": "ingester.partition-ring.consul.watch-burst-size", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "cas_retry_delay", + "required": false, + "desc": "Maximum duration to wait before retrying a Compare And Swap (CAS) operation.", + "fieldValue": null, + "fieldDefaultValue": 1000000000, + "fieldFlag": "ingester.partition-ring.consul.cas-retry-delay", + "fieldType": "duration", + "fieldCategory": "advanced" + } + ], + "fieldValue": null, + "fieldDefaultValue": null + }, + { + "kind": "block", + "name": "etcd", "required": false, - "desc": "The prefix for the keys in the store. Should end with a /.", + "desc": "", + "blockEntries": [ + { + "kind": "field", + "name": "endpoints", + "required": false, + "desc": "The etcd endpoints to connect to.", + "fieldValue": null, + "fieldDefaultValue": [], + "fieldFlag": "ingester.partition-ring.etcd.endpoints", + "fieldType": "list of strings" + }, + { + "kind": "field", + "name": "dial_timeout", + "required": false, + "desc": "The dial timeout for the etcd connection.", + "fieldValue": null, + "fieldDefaultValue": 10000000000, + "fieldFlag": "ingester.partition-ring.etcd.dial-timeout", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "max_retries", + "required": false, + "desc": "The maximum number of retries to do for failed ops.", + "fieldValue": null, + "fieldDefaultValue": 10, + "fieldFlag": "ingester.partition-ring.etcd.max-retries", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_enabled", + "required": false, + "desc": "Enable TLS.", + "fieldValue": null, + "fieldDefaultValue": false, + "fieldFlag": "ingester.partition-ring.etcd.tls-enabled", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_cert_path", + "required": false, + "desc": "Path to the client certificate, which will be used for authenticating with the server. Also requires the key path to be configured.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "ingester.partition-ring.etcd.tls-cert-path", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_key_path", + "required": false, + "desc": "Path to the key for the client certificate. Also requires the client certificate to be configured.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "ingester.partition-ring.etcd.tls-key-path", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_ca_path", + "required": false, + "desc": "Path to the CA certificates to validate server certificate against. If not set, the host's root CA certificates are used.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "ingester.partition-ring.etcd.tls-ca-path", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_server_name", + "required": false, + "desc": "Override the expected name on the server certificate.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "ingester.partition-ring.etcd.tls-server-name", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_insecure_skip_verify", + "required": false, + "desc": "Skip validating server certificate.", + "fieldValue": null, + "fieldDefaultValue": false, + "fieldFlag": "ingester.partition-ring.etcd.tls-insecure-skip-verify", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_cipher_suites", + "required": false, + "desc": "Override the default cipher suite list (separated by commas). Allowed values:\n\nSecure Ciphers:\n- TLS_AES_128_GCM_SHA256\n- TLS_AES_256_GCM_SHA384\n- TLS_CHACHA20_POLY1305_SHA256\n- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA\n- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA\n- TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256\n- TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256\n- TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256\n- TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256\n\nInsecure Ciphers:\n- TLS_RSA_WITH_RC4_128_SHA\n- TLS_RSA_WITH_3DES_EDE_CBC_SHA\n- TLS_RSA_WITH_AES_128_CBC_SHA\n- TLS_RSA_WITH_AES_256_CBC_SHA\n- TLS_RSA_WITH_AES_128_CBC_SHA256\n- TLS_RSA_WITH_AES_128_GCM_SHA256\n- TLS_RSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_ECDSA_WITH_RC4_128_SHA\n- TLS_ECDHE_RSA_WITH_RC4_128_SHA\n- TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256\n- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256\n", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "ingester.partition-ring.etcd.tls-cipher-suites", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_min_version", + "required": false, + "desc": "Override the default minimum TLS version. Allowed values: VersionTLS10, VersionTLS11, VersionTLS12, VersionTLS13", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "ingester.partition-ring.etcd.tls-min-version", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "username", + "required": false, + "desc": "Etcd username.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "ingester.partition-ring.etcd.username", + "fieldType": "string" + }, + { + "kind": "field", + "name": "password", + "required": false, + "desc": "Etcd password.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "ingester.partition-ring.etcd.password", + "fieldType": "string" + } + ], "fieldValue": null, - "fieldDefaultValue": "collectors/", - "fieldFlag": "ingester.partition-ring.prefix", - "fieldType": "string", - "fieldCategory": "advanced" + "fieldDefaultValue": null }, { "kind": "block", - "name": "consul", + "name": "memberlist", "required": false, "desc": "", "blockEntries": [ { "kind": "field", - "name": "host", + "name": "node_name", + "required": false, + "desc": "Name of the node in memberlist cluster. Defaults to hostname.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "ingester.partition-ring.memberlist.nodename", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "randomize_node_name", + "required": false, + "desc": "Add random suffix to the node name.", + "fieldValue": null, + "fieldDefaultValue": true, + "fieldFlag": "ingester.partition-ring.memberlist.randomize-node-name", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "stream_timeout", + "required": false, + "desc": "The timeout for establishing a connection with a remote node, and for read/write operations.", + "fieldValue": null, + "fieldDefaultValue": 2000000000, + "fieldFlag": "ingester.partition-ring.memberlist.stream-timeout", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "retransmit_factor", + "required": false, + "desc": "Multiplication factor used when sending out messages (factor * log(N+1)).", + "fieldValue": null, + "fieldDefaultValue": 4, + "fieldFlag": "ingester.partition-ring.memberlist.retransmit-factor", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "pull_push_interval", + "required": false, + "desc": "How often to use pull/push sync.", + "fieldValue": null, + "fieldDefaultValue": 30000000000, + "fieldFlag": "ingester.partition-ring.memberlist.pullpush-interval", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "gossip_interval", + "required": false, + "desc": "How often to gossip.", + "fieldValue": null, + "fieldDefaultValue": 200000000, + "fieldFlag": "ingester.partition-ring.memberlist.gossip-interval", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "gossip_nodes", + "required": false, + "desc": "How many nodes to gossip to.", + "fieldValue": null, + "fieldDefaultValue": 3, + "fieldFlag": "ingester.partition-ring.memberlist.gossip-nodes", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "gossip_to_dead_nodes_time", + "required": false, + "desc": "How long to keep gossiping to dead nodes, to give them chance to refute their death.", + "fieldValue": null, + "fieldDefaultValue": 30000000000, + "fieldFlag": "ingester.partition-ring.memberlist.gossip-to-dead-nodes-time", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "dead_node_reclaim_time", + "required": false, + "desc": "How soon can dead node's name be reclaimed with new address. 0 to disable.", + "fieldValue": null, + "fieldDefaultValue": 0, + "fieldFlag": "ingester.partition-ring.memberlist.dead-node-reclaim-time", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "compression_enabled", + "required": false, + "desc": "Enable message compression. This can be used to reduce bandwidth usage at the cost of slightly more CPU utilization.", + "fieldValue": null, + "fieldDefaultValue": true, + "fieldFlag": "ingester.partition-ring.memberlist.compression-enabled", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "notify_interval", + "required": false, + "desc": "How frequently to notify watchers when a key changes. Can reduce CPU activity in large memberlist deployments. 0 to notify without delay.", + "fieldValue": null, + "fieldDefaultValue": 0, + "fieldFlag": "ingester.partition-ring.memberlist.notify-interval", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "advertise_addr", + "required": false, + "desc": "Gossip address to advertise to other members in the cluster. Used for NAT traversal.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "ingester.partition-ring.memberlist.advertise-addr", + "fieldType": "string" + }, + { + "kind": "field", + "name": "advertise_port", + "required": false, + "desc": "Gossip port to advertise to other members in the cluster. Used for NAT traversal.", + "fieldValue": null, + "fieldDefaultValue": 7946, + "fieldFlag": "ingester.partition-ring.memberlist.advertise-port", + "fieldType": "int" + }, + { + "kind": "field", + "name": "cluster_label", + "required": false, + "desc": "The cluster label is an optional string to include in outbound packets and gossip streams. Other members in the memberlist cluster will discard any message whose label doesn't match the configured one, unless the 'cluster-label-verification-disabled' configuration option is set to true.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "ingester.partition-ring.memberlist.cluster-label", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "cluster_label_verification_disabled", "required": false, - "desc": "Hostname and port of Consul.", + "desc": "When true, memberlist doesn't verify that inbound packets and gossip streams have the cluster label matching the configured one. This verification should be disabled while rolling out the change to the configured cluster label in a live memberlist cluster.", "fieldValue": null, - "fieldDefaultValue": "localhost:8500", - "fieldFlag": "ingester.partition-ring.consul.hostname", - "fieldType": "string" + "fieldDefaultValue": false, + "fieldFlag": "ingester.partition-ring.memberlist.cluster-label-verification-disabled", + "fieldType": "boolean", + "fieldCategory": "advanced" }, { "kind": "field", - "name": "acl_token", + "name": "join_members", "required": false, - "desc": "ACL Token used to interact with Consul.", + "desc": "Other cluster members to join. Can be specified multiple times. It can be an IP, hostname or an entry specified in the DNS Service Discovery format.", "fieldValue": null, - "fieldDefaultValue": "", - "fieldFlag": "ingester.partition-ring.consul.acl-token", - "fieldType": "string", + "fieldDefaultValue": [], + "fieldFlag": "ingester.partition-ring.memberlist.join", + "fieldType": "list of strings" + }, + { + "kind": "field", + "name": "min_join_backoff", + "required": false, + "desc": "Min backoff duration to join other cluster members.", + "fieldValue": null, + "fieldDefaultValue": 1000000000, + "fieldFlag": "ingester.partition-ring.memberlist.min-join-backoff", + "fieldType": "duration", "fieldCategory": "advanced" }, { "kind": "field", - "name": "http_client_timeout", + "name": "max_join_backoff", "required": false, - "desc": "HTTP timeout when talking to Consul", + "desc": "Max backoff duration to join other cluster members.", "fieldValue": null, - "fieldDefaultValue": 20000000000, - "fieldFlag": "ingester.partition-ring.consul.client-timeout", + "fieldDefaultValue": 60000000000, + "fieldFlag": "ingester.partition-ring.memberlist.max-join-backoff", "fieldType": "duration", "fieldCategory": "advanced" }, { "kind": "field", - "name": "consistent_reads", + "name": "max_join_retries", "required": false, - "desc": "Enable consistent reads to Consul.", + "desc": "Max number of retries to join other cluster members.", + "fieldValue": null, + "fieldDefaultValue": 10, + "fieldFlag": "ingester.partition-ring.memberlist.max-join-retries", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "abort_if_cluster_join_fails", + "required": false, + "desc": "If this node fails to join memberlist cluster, abort.", "fieldValue": null, "fieldDefaultValue": false, - "fieldFlag": "ingester.partition-ring.consul.consistent-reads", - "fieldType": "boolean", + "fieldFlag": "ingester.partition-ring.memberlist.abort-if-join-fails", + "fieldType": "boolean" + }, + { + "kind": "field", + "name": "rejoin_interval", + "required": false, + "desc": "If not 0, how often to rejoin the cluster. Occasional rejoin can help to fix the cluster split issue, and is harmless otherwise. For example when using only few components as a seed nodes (via -memberlist.join), then it's recommended to use rejoin. If -memberlist.join points to dynamic service that resolves to all gossiping nodes (eg. Kubernetes headless service), then rejoin is not needed.", + "fieldValue": null, + "fieldDefaultValue": 0, + "fieldFlag": "ingester.partition-ring.memberlist.rejoin-interval", + "fieldType": "duration", "fieldCategory": "advanced" }, { "kind": "field", - "name": "watch_rate_limit", + "name": "left_ingesters_timeout", "required": false, - "desc": "Rate limit when watching key or prefix in Consul, in requests per second. 0 disables the rate limit.", + "desc": "How long to keep LEFT ingesters in the ring.", "fieldValue": null, - "fieldDefaultValue": 1, - "fieldFlag": "ingester.partition-ring.consul.watch-rate-limit", - "fieldType": "float", + "fieldDefaultValue": 300000000000, + "fieldFlag": "ingester.partition-ring.memberlist.left-ingesters-timeout", + "fieldType": "duration", "fieldCategory": "advanced" }, { "kind": "field", - "name": "watch_burst_size", + "name": "leave_timeout", "required": false, - "desc": "Burst size used in rate limit. Values less than 1 are treated as 1.", + "desc": "Timeout for leaving memberlist cluster.", "fieldValue": null, - "fieldDefaultValue": 1, - "fieldFlag": "ingester.partition-ring.consul.watch-burst-size", - "fieldType": "int", + "fieldDefaultValue": 20000000000, + "fieldFlag": "ingester.partition-ring.memberlist.leave-timeout", + "fieldType": "duration", "fieldCategory": "advanced" }, { "kind": "field", - "name": "cas_retry_delay", + "name": "broadcast_timeout_for_local_updates_on_shutdown", "required": false, - "desc": "Maximum duration to wait before retrying a Compare And Swap (CAS) operation.", + "desc": "Timeout for broadcasting all remaining locally-generated updates to other nodes when shutting down. Only used if there are nodes left in the memberlist cluster, and only applies to locally-generated updates, not to broadcast messages that are result of incoming gossip updates. 0 = no timeout, wait until all locally-generated updates are sent.", "fieldValue": null, - "fieldDefaultValue": 1000000000, - "fieldFlag": "ingester.partition-ring.consul.cas-retry-delay", + "fieldDefaultValue": 10000000000, + "fieldFlag": "ingester.partition-ring.memberlist.broadcast-timeout-for-local-updates-on-shutdown", "fieldType": "duration", "fieldCategory": "advanced" - } - ], - "fieldValue": null, - "fieldDefaultValue": null - }, - { - "kind": "block", - "name": "etcd", - "required": false, - "desc": "", - "blockEntries": [ + }, { "kind": "field", - "name": "endpoints", + "name": "message_history_buffer_bytes", "required": false, - "desc": "The etcd endpoints to connect to.", + "desc": "How much space to use for keeping received and sent messages in memory for troubleshooting (two buffers). 0 to disable.", + "fieldValue": null, + "fieldDefaultValue": 0, + "fieldFlag": "ingester.partition-ring.memberlist.message-history-buffer-bytes", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "bind_addr", + "required": false, + "desc": "IP address to listen on for gossip messages. Multiple addresses may be specified. Defaults to 0.0.0.0", "fieldValue": null, "fieldDefaultValue": [], - "fieldFlag": "ingester.partition-ring.etcd.endpoints", + "fieldFlag": "ingester.partition-ring.memberlist.bind-addr", "fieldType": "list of strings" }, { "kind": "field", - "name": "dial_timeout", + "name": "bind_port", "required": false, - "desc": "The dial timeout for the etcd connection.", + "desc": "Port to listen on for gossip messages.", "fieldValue": null, - "fieldDefaultValue": 10000000000, - "fieldFlag": "ingester.partition-ring.etcd.dial-timeout", + "fieldDefaultValue": 7946, + "fieldFlag": "ingester.partition-ring.memberlist.bind-port", + "fieldType": "int" + }, + { + "kind": "field", + "name": "packet_dial_timeout", + "required": false, + "desc": "Timeout used when connecting to other nodes to send packet.", + "fieldValue": null, + "fieldDefaultValue": 2000000000, + "fieldFlag": "ingester.partition-ring.memberlist.packet-dial-timeout", "fieldType": "duration", "fieldCategory": "advanced" }, { "kind": "field", - "name": "max_retries", + "name": "packet_write_timeout", "required": false, - "desc": "The maximum number of retries to do for failed ops.", + "desc": "Timeout for writing 'packet' data.", "fieldValue": null, - "fieldDefaultValue": 10, - "fieldFlag": "ingester.partition-ring.etcd.max-retries", + "fieldDefaultValue": 5000000000, + "fieldFlag": "ingester.partition-ring.memberlist.packet-write-timeout", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "max_concurrent_writes", + "required": false, + "desc": "Maximum number of concurrent writes to other nodes.", + "fieldValue": null, + "fieldDefaultValue": 3, + "fieldFlag": "ingester.partition-ring.memberlist.max-concurrent-writes", "fieldType": "int", "fieldCategory": "advanced" }, + { + "kind": "field", + "name": "acquire_writer_timeout", + "required": false, + "desc": "Timeout for acquiring one of the concurrent write slots. After this time, the message will be dropped.", + "fieldValue": null, + "fieldDefaultValue": 250000000, + "fieldFlag": "ingester.partition-ring.memberlist.acquire-writer-timeout", + "fieldType": "duration", + "fieldCategory": "advanced" + }, { "kind": "field", "name": "tls_enabled", "required": false, - "desc": "Enable TLS.", + "desc": "Enable TLS on the memberlist transport layer.", "fieldValue": null, "fieldDefaultValue": false, - "fieldFlag": "ingester.partition-ring.etcd.tls-enabled", + "fieldFlag": "ingester.partition-ring.memberlist.tls-enabled", "fieldType": "boolean", "fieldCategory": "advanced" }, @@ -3053,7 +4805,7 @@ "desc": "Path to the client certificate, which will be used for authenticating with the server. Also requires the key path to be configured.", "fieldValue": null, "fieldDefaultValue": "", - "fieldFlag": "ingester.partition-ring.etcd.tls-cert-path", + "fieldFlag": "ingester.partition-ring.memberlist.tls-cert-path", "fieldType": "string", "fieldCategory": "advanced" }, @@ -3064,7 +4816,7 @@ "desc": "Path to the key for the client certificate. Also requires the client certificate to be configured.", "fieldValue": null, "fieldDefaultValue": "", - "fieldFlag": "ingester.partition-ring.etcd.tls-key-path", + "fieldFlag": "ingester.partition-ring.memberlist.tls-key-path", "fieldType": "string", "fieldCategory": "advanced" }, @@ -3075,7 +4827,7 @@ "desc": "Path to the CA certificates to validate server certificate against. If not set, the host's root CA certificates are used.", "fieldValue": null, "fieldDefaultValue": "", - "fieldFlag": "ingester.partition-ring.etcd.tls-ca-path", + "fieldFlag": "ingester.partition-ring.memberlist.tls-ca-path", "fieldType": "string", "fieldCategory": "advanced" }, @@ -3086,7 +4838,7 @@ "desc": "Override the expected name on the server certificate.", "fieldValue": null, "fieldDefaultValue": "", - "fieldFlag": "ingester.partition-ring.etcd.tls-server-name", + "fieldFlag": "ingester.partition-ring.memberlist.tls-server-name", "fieldType": "string", "fieldCategory": "advanced" }, @@ -3097,7 +4849,7 @@ "desc": "Skip validating server certificate.", "fieldValue": null, "fieldDefaultValue": false, - "fieldFlag": "ingester.partition-ring.etcd.tls-insecure-skip-verify", + "fieldFlag": "ingester.partition-ring.memberlist.tls-insecure-skip-verify", "fieldType": "boolean", "fieldCategory": "advanced" }, @@ -3108,7 +4860,7 @@ "desc": "Override the default cipher suite list (separated by commas). Allowed values:\n\nSecure Ciphers:\n- TLS_AES_128_GCM_SHA256\n- TLS_AES_256_GCM_SHA384\n- TLS_CHACHA20_POLY1305_SHA256\n- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA\n- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA\n- TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256\n- TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256\n- TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256\n- TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256\n\nInsecure Ciphers:\n- TLS_RSA_WITH_RC4_128_SHA\n- TLS_RSA_WITH_3DES_EDE_CBC_SHA\n- TLS_RSA_WITH_AES_128_CBC_SHA\n- TLS_RSA_WITH_AES_256_CBC_SHA\n- TLS_RSA_WITH_AES_128_CBC_SHA256\n- TLS_RSA_WITH_AES_128_GCM_SHA256\n- TLS_RSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_ECDSA_WITH_RC4_128_SHA\n- TLS_ECDHE_RSA_WITH_RC4_128_SHA\n- TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256\n- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256\n", "fieldValue": null, "fieldDefaultValue": "", - "fieldFlag": "ingester.partition-ring.etcd.tls-cipher-suites", + "fieldFlag": "ingester.partition-ring.memberlist.tls-cipher-suites", "fieldType": "string", "fieldCategory": "advanced" }, @@ -3119,29 +4871,9 @@ "desc": "Override the default minimum TLS version. Allowed values: VersionTLS10, VersionTLS11, VersionTLS12, VersionTLS13", "fieldValue": null, "fieldDefaultValue": "", - "fieldFlag": "ingester.partition-ring.etcd.tls-min-version", + "fieldFlag": "ingester.partition-ring.memberlist.tls-min-version", "fieldType": "string", "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "username", - "required": false, - "desc": "Etcd username.", - "fieldValue": null, - "fieldDefaultValue": "", - "fieldFlag": "ingester.partition-ring.etcd.username", - "fieldType": "string" - }, - { - "kind": "field", - "name": "password", - "required": false, - "desc": "Etcd password.", - "fieldValue": null, - "fieldDefaultValue": "", - "fieldFlag": "ingester.partition-ring.etcd.password", - "fieldType": "string" } ], "fieldValue": null, @@ -9663,917 +11395,1811 @@ }, { "kind": "field", - "name": "tenants_list_ttl", + "name": "tenants_list_ttl", + "required": false, + "desc": "How long to cache list of tenants in the bucket.", + "fieldValue": null, + "fieldDefaultValue": 900000000000, + "fieldFlag": "blocks-storage.bucket-store.metadata-cache.tenants-list-ttl", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tenant_blocks_list_ttl", + "required": false, + "desc": "How long to cache list of blocks for each tenant.", + "fieldValue": null, + "fieldDefaultValue": 300000000000, + "fieldFlag": "blocks-storage.bucket-store.metadata-cache.tenant-blocks-list-ttl", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "chunks_list_ttl", + "required": false, + "desc": "How long to cache list of chunks for a block.", + "fieldValue": null, + "fieldDefaultValue": 86400000000000, + "fieldFlag": "blocks-storage.bucket-store.metadata-cache.chunks-list-ttl", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "metafile_exists_ttl", + "required": false, + "desc": "How long to cache information that block metafile exists. Also used for tenant deletion mark file.", + "fieldValue": null, + "fieldDefaultValue": 7200000000000, + "fieldFlag": "blocks-storage.bucket-store.metadata-cache.metafile-exists-ttl", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "metafile_doesnt_exist_ttl", + "required": false, + "desc": "How long to cache information that block metafile doesn't exist. Also used for tenant deletion mark file.", + "fieldValue": null, + "fieldDefaultValue": 300000000000, + "fieldFlag": "blocks-storage.bucket-store.metadata-cache.metafile-doesnt-exist-ttl", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "metafile_content_ttl", + "required": false, + "desc": "How long to cache content of the metafile.", + "fieldValue": null, + "fieldDefaultValue": 86400000000000, + "fieldFlag": "blocks-storage.bucket-store.metadata-cache.metafile-content-ttl", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "metafile_max_size_bytes", + "required": false, + "desc": "Maximum size of metafile content to cache in bytes. Caching will be skipped if the content exceeds this size. This is useful to avoid network round trip for large content if the configured caching backend has an hard limit on cached items size (in this case, you should set this limit to the same limit in the caching backend).", + "fieldValue": null, + "fieldDefaultValue": 1048576, + "fieldFlag": "blocks-storage.bucket-store.metadata-cache.metafile-max-size-bytes", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "metafile_attributes_ttl", + "required": false, + "desc": "How long to cache attributes of the block metafile.", + "fieldValue": null, + "fieldDefaultValue": 604800000000000, + "fieldFlag": "blocks-storage.bucket-store.metadata-cache.metafile-attributes-ttl", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "block_index_attributes_ttl", + "required": false, + "desc": "How long to cache attributes of the block index.", + "fieldValue": null, + "fieldDefaultValue": 604800000000000, + "fieldFlag": "blocks-storage.bucket-store.metadata-cache.block-index-attributes-ttl", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "bucket_index_content_ttl", + "required": false, + "desc": "How long to cache content of the bucket index.", + "fieldValue": null, + "fieldDefaultValue": 300000000000, + "fieldFlag": "blocks-storage.bucket-store.metadata-cache.bucket-index-content-ttl", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "bucket_index_max_size_bytes", "required": false, - "desc": "How long to cache list of tenants in the bucket.", + "desc": "Maximum size of bucket index content to cache in bytes. Caching will be skipped if the content exceeds this size. This is useful to avoid network round trip for large content if the configured caching backend has an hard limit on cached items size (in this case, you should set this limit to the same limit in the caching backend).", "fieldValue": null, - "fieldDefaultValue": 900000000000, - "fieldFlag": "blocks-storage.bucket-store.metadata-cache.tenants-list-ttl", - "fieldType": "duration", + "fieldDefaultValue": 1048576, + "fieldFlag": "blocks-storage.bucket-store.metadata-cache.bucket-index-max-size-bytes", + "fieldType": "int", "fieldCategory": "advanced" - }, + } + ], + "fieldValue": null, + "fieldDefaultValue": null + }, + { + "kind": "field", + "name": "ignore_deletion_mark_delay", + "required": false, + "desc": "Duration after which the blocks marked for deletion will be filtered out while fetching blocks. The idea of ignore-deletion-marks-delay is to ignore blocks that are marked for deletion with some delay. This ensures store can still serve blocks that are meant to be deleted but do not have a replacement yet.", + "fieldValue": null, + "fieldDefaultValue": 3600000000000, + "fieldFlag": "blocks-storage.bucket-store.ignore-deletion-marks-delay", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "ignore_deletion_mark_while_querying_delay", + "required": false, + "desc": "Duration after which blocks marked for deletion will still be queried. This ensures queriers still query blocks that are meant to be deleted but do not have a replacement yet.", + "fieldValue": null, + "fieldDefaultValue": 3000000000000, + "fieldFlag": "blocks-storage.bucket-store.ignore-deletion-marks-while-querying-delay", + "fieldType": "duration", + "fieldCategory": "experimental" + }, + { + "kind": "block", + "name": "bucket_index", + "required": false, + "desc": "", + "blockEntries": [ { "kind": "field", - "name": "tenant_blocks_list_ttl", + "name": "update_on_error_interval", "required": false, - "desc": "How long to cache list of blocks for each tenant.", + "desc": "How frequently a bucket index, which previously failed to load, should be tried to load again. This option is used only by querier.", "fieldValue": null, - "fieldDefaultValue": 300000000000, - "fieldFlag": "blocks-storage.bucket-store.metadata-cache.tenant-blocks-list-ttl", + "fieldDefaultValue": 60000000000, + "fieldFlag": "blocks-storage.bucket-store.bucket-index.update-on-error-interval", "fieldType": "duration", "fieldCategory": "advanced" }, { "kind": "field", - "name": "chunks_list_ttl", + "name": "idle_timeout", "required": false, - "desc": "How long to cache list of chunks for a block.", + "desc": "How long a unused bucket index should be cached. Once this timeout expires, the unused bucket index is removed from the in-memory cache. This option is used only by querier.", "fieldValue": null, - "fieldDefaultValue": 86400000000000, - "fieldFlag": "blocks-storage.bucket-store.metadata-cache.chunks-list-ttl", + "fieldDefaultValue": 3600000000000, + "fieldFlag": "blocks-storage.bucket-store.bucket-index.idle-timeout", "fieldType": "duration", "fieldCategory": "advanced" }, { "kind": "field", - "name": "metafile_exists_ttl", + "name": "max_stale_period", "required": false, - "desc": "How long to cache information that block metafile exists. Also used for tenant deletion mark file.", + "desc": "The maximum allowed age of a bucket index (last updated) before queries start failing because the bucket index is too old. The bucket index is periodically updated by the compactor, and this check is enforced in the querier (at query time).", "fieldValue": null, - "fieldDefaultValue": 7200000000000, - "fieldFlag": "blocks-storage.bucket-store.metadata-cache.metafile-exists-ttl", + "fieldDefaultValue": 3600000000000, + "fieldFlag": "blocks-storage.bucket-store.bucket-index.max-stale-period", "fieldType": "duration", "fieldCategory": "advanced" - }, + } + ], + "fieldValue": null, + "fieldDefaultValue": null + }, + { + "kind": "field", + "name": "ignore_blocks_within", + "required": false, + "desc": "Blocks with minimum time within this duration are ignored, and not loaded by store-gateway. Useful when used together with -querier.query-store-after to prevent loading young blocks, because there are usually many of them (depending on number of ingesters) and they are not yet compacted. Negative values or 0 disable the filter.", + "fieldValue": null, + "fieldDefaultValue": 36000000000000, + "fieldFlag": "blocks-storage.bucket-store.ignore-blocks-within", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "series_hash_cache_max_size_bytes", + "required": false, + "desc": "Max size - in bytes - of the in-memory series hash cache. The cache is shared across all tenants and it's used only when query sharding is enabled.", + "fieldValue": null, + "fieldDefaultValue": 1073741824, + "fieldFlag": "blocks-storage.bucket-store.series-hash-cache-max-size-bytes", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "partitioner_max_gap_bytes", + "required": false, + "desc": "Max size - in bytes - of a gap for which the partitioner aggregates together two bucket GET object requests.", + "fieldValue": null, + "fieldDefaultValue": 524288, + "fieldFlag": "blocks-storage.bucket-store.partitioner-max-gap-bytes", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "postings_offsets_in_mem_sampling", + "required": false, + "desc": "Controls what is the ratio of postings offsets that the store will hold in memory.", + "fieldValue": null, + "fieldDefaultValue": 32, + "fieldFlag": "blocks-storage.bucket-store.posting-offsets-in-mem-sampling", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "block", + "name": "index_header", + "required": false, + "desc": "", + "blockEntries": [ { "kind": "field", - "name": "metafile_doesnt_exist_ttl", + "name": "max_idle_file_handles", "required": false, - "desc": "How long to cache information that block metafile doesn't exist. Also used for tenant deletion mark file.", + "desc": "Maximum number of idle file handles the store-gateway keeps open for each index-header file.", "fieldValue": null, - "fieldDefaultValue": 300000000000, - "fieldFlag": "blocks-storage.bucket-store.metadata-cache.metafile-doesnt-exist-ttl", - "fieldType": "duration", + "fieldDefaultValue": 1, + "fieldFlag": "blocks-storage.bucket-store.index-header.max-idle-file-handles", + "fieldType": "int", "fieldCategory": "advanced" }, { "kind": "field", - "name": "metafile_content_ttl", + "name": "eager_loading_startup_enabled", "required": false, - "desc": "How long to cache content of the metafile.", + "desc": "If enabled, store-gateway will periodically persist block IDs of lazy loaded index-headers and load them eagerly during startup. Ignored if index-header lazy loading is disabled.", "fieldValue": null, - "fieldDefaultValue": 86400000000000, - "fieldFlag": "blocks-storage.bucket-store.metadata-cache.metafile-content-ttl", - "fieldType": "duration", - "fieldCategory": "advanced" + "fieldDefaultValue": true, + "fieldFlag": "blocks-storage.bucket-store.index-header.eager-loading-startup-enabled", + "fieldType": "boolean", + "fieldCategory": "experimental" }, { "kind": "field", - "name": "metafile_max_size_bytes", + "name": "lazy_loading_enabled", "required": false, - "desc": "Maximum size of metafile content to cache in bytes. Caching will be skipped if the content exceeds this size. This is useful to avoid network round trip for large content if the configured caching backend has an hard limit on cached items size (in this case, you should set this limit to the same limit in the caching backend).", + "desc": "If enabled, store-gateway will lazy load an index-header only once required by a query.", "fieldValue": null, - "fieldDefaultValue": 1048576, - "fieldFlag": "blocks-storage.bucket-store.metadata-cache.metafile-max-size-bytes", - "fieldType": "int", + "fieldDefaultValue": true, + "fieldFlag": "blocks-storage.bucket-store.index-header.lazy-loading-enabled", + "fieldType": "boolean", "fieldCategory": "advanced" }, { "kind": "field", - "name": "metafile_attributes_ttl", + "name": "lazy_loading_idle_timeout", "required": false, - "desc": "How long to cache attributes of the block metafile.", + "desc": "If index-header lazy loading is enabled and this setting is \u003e 0, the store-gateway will offload unused index-headers after 'idle timeout' inactivity.", "fieldValue": null, - "fieldDefaultValue": 604800000000000, - "fieldFlag": "blocks-storage.bucket-store.metadata-cache.metafile-attributes-ttl", + "fieldDefaultValue": 3600000000000, + "fieldFlag": "blocks-storage.bucket-store.index-header.lazy-loading-idle-timeout", "fieldType": "duration", "fieldCategory": "advanced" }, { "kind": "field", - "name": "block_index_attributes_ttl", + "name": "lazy_loading_concurrency", "required": false, - "desc": "How long to cache attributes of the block index.", + "desc": "Maximum number of concurrent index header loads across all tenants. If set to 0, concurrency is unlimited.", "fieldValue": null, - "fieldDefaultValue": 604800000000000, - "fieldFlag": "blocks-storage.bucket-store.metadata-cache.block-index-attributes-ttl", - "fieldType": "duration", + "fieldDefaultValue": 4, + "fieldFlag": "blocks-storage.bucket-store.index-header.lazy-loading-concurrency", + "fieldType": "int", "fieldCategory": "advanced" }, { "kind": "field", - "name": "bucket_index_content_ttl", + "name": "lazy_loading_concurrency_queue_timeout", "required": false, - "desc": "How long to cache content of the bucket index.", + "desc": "Timeout for the queue of index header loads. If the queue is full and the timeout is reached, the load will return an error. 0 means no timeout and the load will wait indefinitely.", "fieldValue": null, - "fieldDefaultValue": 300000000000, - "fieldFlag": "blocks-storage.bucket-store.metadata-cache.bucket-index-content-ttl", + "fieldDefaultValue": 5000000000, + "fieldFlag": "blocks-storage.bucket-store.index-header.lazy-loading-concurrency-queue-timeout", "fieldType": "duration", "fieldCategory": "advanced" }, { "kind": "field", - "name": "bucket_index_max_size_bytes", + "name": "verify_on_load", "required": false, - "desc": "Maximum size of bucket index content to cache in bytes. Caching will be skipped if the content exceeds this size. This is useful to avoid network round trip for large content if the configured caching backend has an hard limit on cached items size (in this case, you should set this limit to the same limit in the caching backend).", + "desc": "If true, verify the checksum of index headers upon loading them (either on startup or lazily when lazy loading is enabled). Setting to true helps detect disk corruption at the cost of slowing down index header loading.", "fieldValue": null, - "fieldDefaultValue": 1048576, - "fieldFlag": "blocks-storage.bucket-store.metadata-cache.bucket-index-max-size-bytes", - "fieldType": "int", + "fieldDefaultValue": false, + "fieldFlag": "blocks-storage.bucket-store.index-header.verify-on-load", + "fieldType": "boolean", "fieldCategory": "advanced" } ], "fieldValue": null, - "fieldDefaultValue": null + "fieldDefaultValue": null + }, + { + "kind": "field", + "name": "streaming_series_batch_size", + "required": false, + "desc": "This option controls how many series to fetch per batch. The batch size must be greater than 0.", + "fieldValue": null, + "fieldDefaultValue": 5000, + "fieldFlag": "blocks-storage.bucket-store.batch-series-size", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "series_fetch_preference", + "required": false, + "desc": "This parameter controls the trade-off in fetching series versus fetching postings to fulfill a series request. Increasing the series preference results in fetching more series and reducing the volume of postings fetched. Reducing the series preference results in the opposite. Increase this parameter to reduce the rate of fetched series bytes (see \"Mimir / Queries\" dashboard) or API calls to the object store. Must be a positive floating point number.", + "fieldValue": null, + "fieldDefaultValue": 0.75, + "fieldFlag": "blocks-storage.bucket-store.series-fetch-preference", + "fieldType": "float", + "fieldCategory": "advanced" + } + ], + "fieldValue": null, + "fieldDefaultValue": null + }, + { + "kind": "block", + "name": "tsdb", + "required": false, + "desc": "", + "blockEntries": [ + { + "kind": "field", + "name": "dir", + "required": false, + "desc": "Directory to store TSDBs (including WAL) in the ingesters. This directory is required to be persisted between restarts.", + "fieldValue": null, + "fieldDefaultValue": "./tsdb/", + "fieldFlag": "blocks-storage.tsdb.dir", + "fieldType": "string" + }, + { + "kind": "field", + "name": "retention_period", + "required": false, + "desc": "TSDB blocks retention in the ingester before a block is removed. If shipping is enabled, the retention will be relative to the time when the block was uploaded to storage. If shipping is disabled then its relative to the creation time of the block. This should be larger than the -blocks-storage.tsdb.block-ranges-period, -querier.query-store-after and large enough to give store-gateways and queriers enough time to discover newly uploaded blocks.", + "fieldValue": null, + "fieldDefaultValue": 46800000000000, + "fieldFlag": "blocks-storage.tsdb.retention-period", + "fieldType": "duration" + }, + { + "kind": "field", + "name": "ship_interval", + "required": false, + "desc": "How frequently the TSDB blocks are scanned and new ones are shipped to the storage. 0 means shipping is disabled.", + "fieldValue": null, + "fieldDefaultValue": 60000000000, + "fieldFlag": "blocks-storage.tsdb.ship-interval", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "ship_concurrency", + "required": false, + "desc": "Maximum number of tenants concurrently shipping blocks to the storage.", + "fieldValue": null, + "fieldDefaultValue": 10, + "fieldFlag": "blocks-storage.tsdb.ship-concurrency", + "fieldType": "int", + "fieldCategory": "advanced" }, { "kind": "field", - "name": "ignore_deletion_mark_delay", + "name": "head_compaction_interval", "required": false, - "desc": "Duration after which the blocks marked for deletion will be filtered out while fetching blocks. The idea of ignore-deletion-marks-delay is to ignore blocks that are marked for deletion with some delay. This ensures store can still serve blocks that are meant to be deleted but do not have a replacement yet.", + "desc": "How frequently the ingester checks whether the TSDB head should be compacted and, if so, triggers the compaction. Mimir applies a jitter to the first check, and subsequent checks will happen at the configured interval. A block is only created if data covers the smallest block range. The configured interval must be between 0 and 15 minutes.", + "fieldValue": null, + "fieldDefaultValue": 60000000000, + "fieldFlag": "blocks-storage.tsdb.head-compaction-interval", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "head_compaction_concurrency", + "required": false, + "desc": "Maximum number of tenants concurrently compacting TSDB head into a new block", + "fieldValue": null, + "fieldDefaultValue": 1, + "fieldFlag": "blocks-storage.tsdb.head-compaction-concurrency", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "head_compaction_idle_timeout", + "required": false, + "desc": "If TSDB head is idle for this duration, it is compacted. Note that up to 25% jitter is added to the value to avoid ingesters compacting concurrently. 0 means disabled.", "fieldValue": null, "fieldDefaultValue": 3600000000000, - "fieldFlag": "blocks-storage.bucket-store.ignore-deletion-marks-delay", + "fieldFlag": "blocks-storage.tsdb.head-compaction-idle-timeout", "fieldType": "duration", "fieldCategory": "advanced" }, { "kind": "field", - "name": "ignore_deletion_mark_while_querying_delay", + "name": "head_chunks_write_buffer_size_bytes", "required": false, - "desc": "Duration after which blocks marked for deletion will still be queried. This ensures queriers still query blocks that are meant to be deleted but do not have a replacement yet.", + "desc": "The write buffer size used by the head chunks mapper. Lower values reduce memory utilisation on clusters with a large number of tenants at the cost of increased disk I/O operations. The configured buffer size must be between 65536 and 8388608.", "fieldValue": null, - "fieldDefaultValue": 3000000000000, - "fieldFlag": "blocks-storage.bucket-store.ignore-deletion-marks-while-querying-delay", + "fieldDefaultValue": 4194304, + "fieldFlag": "blocks-storage.tsdb.head-chunks-write-buffer-size-bytes", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "head_chunks_end_time_variance", + "required": false, + "desc": "How much variance (as percentage between 0 and 1) should be applied to the chunk end time, to spread chunks writing across time. Doesn't apply to the last chunk of the chunk range. 0 means no variance.", + "fieldValue": null, + "fieldDefaultValue": 0, + "fieldFlag": "blocks-storage.tsdb.head-chunks-end-time-variance", + "fieldType": "float", + "fieldCategory": "experimental" + }, + { + "kind": "field", + "name": "stripe_size", + "required": false, + "desc": "The number of shards of series to use in TSDB (must be a power of 2). Reducing this will decrease memory footprint, but can negatively impact performance.", + "fieldValue": null, + "fieldDefaultValue": 16384, + "fieldFlag": "blocks-storage.tsdb.stripe-size", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "wal_compression_enabled", + "required": false, + "desc": "True to enable TSDB WAL compression.", + "fieldValue": null, + "fieldDefaultValue": false, + "fieldFlag": "blocks-storage.tsdb.wal-compression-enabled", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "wal_segment_size_bytes", + "required": false, + "desc": "TSDB WAL segments files max size (bytes).", + "fieldValue": null, + "fieldDefaultValue": 134217728, + "fieldFlag": "blocks-storage.tsdb.wal-segment-size-bytes", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "wal_replay_concurrency", + "required": false, + "desc": "Maximum number of CPUs that can simultaneously processes WAL replay. If it is set to 0, then each TSDB is replayed with a concurrency equal to the number of CPU cores available on the machine.", + "fieldValue": null, + "fieldDefaultValue": 0, + "fieldFlag": "blocks-storage.tsdb.wal-replay-concurrency", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "flush_blocks_on_shutdown", + "required": false, + "desc": "True to flush blocks to storage on shutdown. If false, incomplete blocks will be reused after restart.", + "fieldValue": null, + "fieldDefaultValue": false, + "fieldFlag": "blocks-storage.tsdb.flush-blocks-on-shutdown", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "close_idle_tsdb_timeout", + "required": false, + "desc": "If TSDB has not received any data for this duration, and all blocks from TSDB have been shipped, TSDB is closed and deleted from local disk. If set to positive value, this value should be equal or higher than -querier.query-ingesters-within flag to make sure that TSDB is not closed prematurely, which could cause partial query results. 0 or negative value disables closing of idle TSDB.", + "fieldValue": null, + "fieldDefaultValue": 46800000000000, + "fieldFlag": "blocks-storage.tsdb.close-idle-tsdb-timeout", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "memory_snapshot_on_shutdown", + "required": false, + "desc": "True to enable snapshotting of in-memory TSDB data on disk when shutting down.", + "fieldValue": null, + "fieldDefaultValue": false, + "fieldFlag": "blocks-storage.tsdb.memory-snapshot-on-shutdown", + "fieldType": "boolean", + "fieldCategory": "experimental" + }, + { + "kind": "field", + "name": "head_chunks_write_queue_size", + "required": false, + "desc": "The size of the write queue used by the head chunks mapper. Lower values reduce memory utilisation at the cost of potentially higher ingest latency. Value of 0 switches chunks mapper to implementation without a queue.", + "fieldValue": null, + "fieldDefaultValue": 1000000, + "fieldFlag": "blocks-storage.tsdb.head-chunks-write-queue-size", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "series_hash_cache_max_size_bytes", + "required": false, + "desc": "Max size - in bytes - of the in-memory series hash cache. The cache is shared across all tenants and it's used only when query sharding is enabled.", + "fieldValue": null, + "fieldDefaultValue": 367001600, + "fieldFlag": "blocks-storage.tsdb.series-hash-cache-max-size-bytes", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "out_of_order_capacity_max", + "required": false, + "desc": "Maximum capacity for out of order chunks, in samples between 1 and 255.", + "fieldValue": null, + "fieldDefaultValue": 32, + "fieldFlag": "blocks-storage.tsdb.out-of-order-capacity-max", + "fieldType": "int", + "fieldCategory": "experimental" + }, + { + "kind": "field", + "name": "head_postings_for_matchers_cache_ttl", + "required": false, + "desc": "How long to cache postings for matchers in the Head and OOOHead. 0 disables the cache and just deduplicates the in-flight calls.", + "fieldValue": null, + "fieldDefaultValue": 10000000000, + "fieldFlag": "blocks-storage.tsdb.head-postings-for-matchers-cache-ttl", "fieldType": "duration", "fieldCategory": "experimental" }, { - "kind": "block", - "name": "bucket_index", + "kind": "field", + "name": "head_postings_for_matchers_cache_size", "required": false, - "desc": "", - "blockEntries": [ - { - "kind": "field", - "name": "update_on_error_interval", - "required": false, - "desc": "How frequently a bucket index, which previously failed to load, should be tried to load again. This option is used only by querier.", - "fieldValue": null, - "fieldDefaultValue": 60000000000, - "fieldFlag": "blocks-storage.bucket-store.bucket-index.update-on-error-interval", - "fieldType": "duration", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "idle_timeout", - "required": false, - "desc": "How long a unused bucket index should be cached. Once this timeout expires, the unused bucket index is removed from the in-memory cache. This option is used only by querier.", - "fieldValue": null, - "fieldDefaultValue": 3600000000000, - "fieldFlag": "blocks-storage.bucket-store.bucket-index.idle-timeout", - "fieldType": "duration", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "max_stale_period", - "required": false, - "desc": "The maximum allowed age of a bucket index (last updated) before queries start failing because the bucket index is too old. The bucket index is periodically updated by the compactor, and this check is enforced in the querier (at query time).", - "fieldValue": null, - "fieldDefaultValue": 3600000000000, - "fieldFlag": "blocks-storage.bucket-store.bucket-index.max-stale-period", - "fieldType": "duration", - "fieldCategory": "advanced" - } - ], + "desc": "Maximum number of entries in the cache for postings for matchers in the Head and OOOHead when TTL is greater than 0.", + "fieldValue": null, + "fieldDefaultValue": 100, + "fieldFlag": "blocks-storage.tsdb.head-postings-for-matchers-cache-size", + "fieldType": "int", + "fieldCategory": "deprecated" + }, + { + "kind": "field", + "name": "head_postings_for_matchers_cache_max_bytes", + "required": false, + "desc": "Maximum size in bytes of the cache for postings for matchers in the Head and OOOHead when TTL is greater than 0.", + "fieldValue": null, + "fieldDefaultValue": 104857600, + "fieldFlag": "blocks-storage.tsdb.head-postings-for-matchers-cache-max-bytes", + "fieldType": "int", + "fieldCategory": "experimental" + }, + { + "kind": "field", + "name": "head_postings_for_matchers_cache_force", + "required": false, + "desc": "Force the cache to be used for postings for matchers in the Head and OOOHead, even if it's not a concurrent (query-sharding) call.", + "fieldValue": null, + "fieldDefaultValue": false, + "fieldFlag": "blocks-storage.tsdb.head-postings-for-matchers-cache-force", + "fieldType": "boolean", + "fieldCategory": "experimental" + }, + { + "kind": "field", + "name": "block_postings_for_matchers_cache_ttl", + "required": false, + "desc": "How long to cache postings for matchers in each compacted block queried from the ingester. 0 disables the cache and just deduplicates the in-flight calls.", "fieldValue": null, - "fieldDefaultValue": null + "fieldDefaultValue": 10000000000, + "fieldFlag": "blocks-storage.tsdb.block-postings-for-matchers-cache-ttl", + "fieldType": "duration", + "fieldCategory": "experimental" }, { "kind": "field", - "name": "ignore_blocks_within", + "name": "block_postings_for_matchers_cache_size", "required": false, - "desc": "Blocks with minimum time within this duration are ignored, and not loaded by store-gateway. Useful when used together with -querier.query-store-after to prevent loading young blocks, because there are usually many of them (depending on number of ingesters) and they are not yet compacted. Negative values or 0 disable the filter.", + "desc": "Maximum number of entries in the cache for postings for matchers in each compacted block when TTL is greater than 0.", "fieldValue": null, - "fieldDefaultValue": 36000000000000, - "fieldFlag": "blocks-storage.bucket-store.ignore-blocks-within", - "fieldType": "duration", - "fieldCategory": "advanced" + "fieldDefaultValue": 100, + "fieldFlag": "blocks-storage.tsdb.block-postings-for-matchers-cache-size", + "fieldType": "int", + "fieldCategory": "deprecated" }, { "kind": "field", - "name": "series_hash_cache_max_size_bytes", + "name": "block_postings_for_matchers_cache_max_bytes", "required": false, - "desc": "Max size - in bytes - of the in-memory series hash cache. The cache is shared across all tenants and it's used only when query sharding is enabled.", + "desc": "Maximum size in bytes of the cache for postings for matchers in each compacted block when TTL is greater than 0.", "fieldValue": null, - "fieldDefaultValue": 1073741824, - "fieldFlag": "blocks-storage.bucket-store.series-hash-cache-max-size-bytes", + "fieldDefaultValue": 104857600, + "fieldFlag": "blocks-storage.tsdb.block-postings-for-matchers-cache-max-bytes", "fieldType": "int", - "fieldCategory": "advanced" + "fieldCategory": "experimental" }, { "kind": "field", - "name": "partitioner_max_gap_bytes", + "name": "block_postings_for_matchers_cache_force", "required": false, - "desc": "Max size - in bytes - of a gap for which the partitioner aggregates together two bucket GET object requests.", + "desc": "Force the cache to be used for postings for matchers in compacted blocks, even if it's not a concurrent (query-sharding) call.", "fieldValue": null, - "fieldDefaultValue": 524288, - "fieldFlag": "blocks-storage.bucket-store.partitioner-max-gap-bytes", + "fieldDefaultValue": false, + "fieldFlag": "blocks-storage.tsdb.block-postings-for-matchers-cache-force", + "fieldType": "boolean", + "fieldCategory": "experimental" + }, + { + "kind": "field", + "name": "early_head_compaction_min_in_memory_series", + "required": false, + "desc": "When the number of in-memory series in the ingester is equal to or greater than this setting, the ingester tries to compact the TSDB Head. The early compaction removes from the memory all samples and inactive series up until -ingester.active-series-metrics-idle-timeout time ago. After an early compaction, the ingester will not accept any sample with a timestamp older than -ingester.active-series-metrics-idle-timeout time ago (unless out of order ingestion is enabled). The ingester checks every -blocks-storage.tsdb.head-compaction-interval whether an early compaction is required. Use 0 to disable it.", + "fieldValue": null, + "fieldDefaultValue": 0, + "fieldFlag": "blocks-storage.tsdb.early-head-compaction-min-in-memory-series", "fieldType": "int", - "fieldCategory": "advanced" + "fieldCategory": "experimental" }, { "kind": "field", - "name": "postings_offsets_in_mem_sampling", + "name": "early_head_compaction_min_estimated_series_reduction_percentage", "required": false, - "desc": "Controls what is the ratio of postings offsets that the store will hold in memory.", + "desc": "When the early compaction is enabled, the early compaction is triggered only if the estimated series reduction is at least the configured percentage (0-100).", "fieldValue": null, - "fieldDefaultValue": 32, - "fieldFlag": "blocks-storage.bucket-store.posting-offsets-in-mem-sampling", + "fieldDefaultValue": 15, + "fieldFlag": "blocks-storage.tsdb.early-head-compaction-min-estimated-series-reduction-percentage", "fieldType": "int", - "fieldCategory": "advanced" + "fieldCategory": "experimental" }, + { + "kind": "field", + "name": "timely_head_compaction_enabled", + "required": false, + "desc": "Allows head compaction to happen when the min block range can no longer be appended, without requiring 1.5x the chunk range worth of data in the head.", + "fieldValue": null, + "fieldDefaultValue": false, + "fieldFlag": "blocks-storage.tsdb.timely-head-compaction-enabled", + "fieldType": "boolean", + "fieldCategory": "experimental" + } + ], + "fieldValue": null, + "fieldDefaultValue": null + } + ], + "fieldValue": null, + "fieldDefaultValue": null + }, + { + "kind": "block", + "name": "compactor", + "required": false, + "desc": "", + "blockEntries": [ + { + "kind": "field", + "name": "block_ranges", + "required": false, + "desc": "List of compaction time ranges.", + "fieldValue": null, + "fieldDefaultValue": [], + "fieldFlag": "compactor.block-ranges", + "fieldType": "list of durations", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "block_sync_concurrency", + "required": false, + "desc": "Number of Go routines to use when downloading blocks for compaction and uploading resulting blocks.", + "fieldValue": null, + "fieldDefaultValue": 8, + "fieldFlag": "compactor.block-sync-concurrency", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "meta_sync_concurrency", + "required": false, + "desc": "Number of Go routines to use when syncing block meta files from the long term storage.", + "fieldValue": null, + "fieldDefaultValue": 20, + "fieldFlag": "compactor.meta-sync-concurrency", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "data_dir", + "required": false, + "desc": "Directory to temporarily store blocks during compaction. This directory is not required to be persisted between restarts.", + "fieldValue": null, + "fieldDefaultValue": "./data-compactor/", + "fieldFlag": "compactor.data-dir", + "fieldType": "string" + }, + { + "kind": "field", + "name": "compaction_interval", + "required": false, + "desc": "The frequency at which the compaction runs", + "fieldValue": null, + "fieldDefaultValue": 3600000000000, + "fieldFlag": "compactor.compaction-interval", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "compaction_retries", + "required": false, + "desc": "How many times to retry a failed compaction within a single compaction run.", + "fieldValue": null, + "fieldDefaultValue": 3, + "fieldFlag": "compactor.compaction-retries", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "compaction_concurrency", + "required": false, + "desc": "Max number of concurrent compactions running.", + "fieldValue": null, + "fieldDefaultValue": 1, + "fieldFlag": "compactor.compaction-concurrency", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "first_level_compaction_wait_period", + "required": false, + "desc": "How long the compactor waits before compacting first-level blocks that are uploaded by the ingesters. This configuration option allows for the reduction of cases where the compactor begins to compact blocks before all ingesters have uploaded their blocks to the storage.", + "fieldValue": null, + "fieldDefaultValue": 1500000000000, + "fieldFlag": "compactor.first-level-compaction-wait-period", + "fieldType": "duration" + }, + { + "kind": "field", + "name": "cleanup_interval", + "required": false, + "desc": "How frequently the compactor should run blocks cleanup and maintenance, as well as update the bucket index.", + "fieldValue": null, + "fieldDefaultValue": 900000000000, + "fieldFlag": "compactor.cleanup-interval", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "cleanup_concurrency", + "required": false, + "desc": "Max number of tenants for which blocks cleanup and maintenance should run concurrently.", + "fieldValue": null, + "fieldDefaultValue": 20, + "fieldFlag": "compactor.cleanup-concurrency", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "deletion_delay", + "required": false, + "desc": "Time before a block marked for deletion is deleted from bucket. If not 0, blocks will be marked for deletion and the compactor component will permanently delete blocks marked for deletion from the bucket. If 0, blocks will be deleted straight away. Note that deleting blocks immediately can cause query failures.", + "fieldValue": null, + "fieldDefaultValue": 43200000000000, + "fieldFlag": "compactor.deletion-delay", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tenant_cleanup_delay", + "required": false, + "desc": "For tenants marked for deletion, this is the time between deletion of the last block, and doing final cleanup (marker files, debug files) of the tenant.", + "fieldValue": null, + "fieldDefaultValue": 21600000000000, + "fieldFlag": "compactor.tenant-cleanup-delay", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "max_compaction_time", + "required": false, + "desc": "Max time for starting compactions for a single tenant. After this time no new compactions for the tenant are started before next compaction cycle. This can help in multi-tenant environments to avoid single tenant using all compaction time, but also in single-tenant environments to force new discovery of blocks more often. 0 = disabled.", + "fieldValue": null, + "fieldDefaultValue": 3600000000000, + "fieldFlag": "compactor.max-compaction-time", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "no_blocks_file_cleanup_enabled", + "required": false, + "desc": "If enabled, will delete the bucket-index, markers and debug files in the tenant bucket when there are no blocks left in the index.", + "fieldValue": null, + "fieldDefaultValue": false, + "fieldFlag": "compactor.no-blocks-file-cleanup-enabled", + "fieldType": "boolean", + "fieldCategory": "experimental" + }, + { + "kind": "field", + "name": "max_opening_blocks_concurrency", + "required": false, + "desc": "Number of goroutines opening blocks before compaction.", + "fieldValue": null, + "fieldDefaultValue": 1, + "fieldFlag": "compactor.max-opening-blocks-concurrency", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "max_closing_blocks_concurrency", + "required": false, + "desc": "Max number of blocks that can be closed concurrently during split compaction. Note that closing a newly compacted block uses a lot of memory for writing the index.", + "fieldValue": null, + "fieldDefaultValue": 1, + "fieldFlag": "compactor.max-closing-blocks-concurrency", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "symbols_flushers_concurrency", + "required": false, + "desc": "Number of symbols flushers used when doing split compaction.", + "fieldValue": null, + "fieldDefaultValue": 1, + "fieldFlag": "compactor.symbols-flushers-concurrency", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "max_block_upload_validation_concurrency", + "required": false, + "desc": "Max number of uploaded blocks that can be validated concurrently. 0 = no limit.", + "fieldValue": null, + "fieldDefaultValue": 1, + "fieldFlag": "compactor.max-block-upload-validation-concurrency", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "enabled_tenants", + "required": false, + "desc": "Comma separated list of tenants that can be compacted. If specified, only these tenants will be compacted by the compactor, otherwise all tenants can be compacted. Subject to sharding.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "compactor.enabled-tenants", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "disabled_tenants", + "required": false, + "desc": "Comma separated list of tenants that cannot be compacted by the compactor. If specified, and the compactor would normally pick a given tenant for compaction (via -compactor.enabled-tenants or sharding), it will be ignored instead.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "compactor.disabled-tenants", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "block", + "name": "sharding_ring", + "required": false, + "desc": "", + "blockEntries": [ { "kind": "block", - "name": "index_header", + "name": "kvstore", "required": false, "desc": "", "blockEntries": [ { "kind": "field", - "name": "max_idle_file_handles", - "required": false, - "desc": "Maximum number of idle file handles the store-gateway keeps open for each index-header file.", - "fieldValue": null, - "fieldDefaultValue": 1, - "fieldFlag": "blocks-storage.bucket-store.index-header.max-idle-file-handles", - "fieldType": "int", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "eager_loading_startup_enabled", + "name": "store", "required": false, - "desc": "If enabled, store-gateway will periodically persist block IDs of lazy loaded index-headers and load them eagerly during startup. Ignored if index-header lazy loading is disabled.", + "desc": "Backend storage to use for the ring. Supported values are: consul, etcd, inmemory, memberlist, multi.", "fieldValue": null, - "fieldDefaultValue": true, - "fieldFlag": "blocks-storage.bucket-store.index-header.eager-loading-startup-enabled", - "fieldType": "boolean", - "fieldCategory": "experimental" + "fieldDefaultValue": "memberlist", + "fieldFlag": "compactor.ring.store", + "fieldType": "string" }, { "kind": "field", - "name": "lazy_loading_enabled", + "name": "prefix", "required": false, - "desc": "If enabled, store-gateway will lazy load an index-header only once required by a query.", + "desc": "The prefix for the keys in the store. Should end with a /.", "fieldValue": null, - "fieldDefaultValue": true, - "fieldFlag": "blocks-storage.bucket-store.index-header.lazy-loading-enabled", - "fieldType": "boolean", + "fieldDefaultValue": "collectors/", + "fieldFlag": "compactor.ring.prefix", + "fieldType": "string", "fieldCategory": "advanced" }, { - "kind": "field", - "name": "lazy_loading_idle_timeout", + "kind": "block", + "name": "consul", "required": false, - "desc": "If index-header lazy loading is enabled and this setting is \u003e 0, the store-gateway will offload unused index-headers after 'idle timeout' inactivity.", + "desc": "", + "blockEntries": [ + { + "kind": "field", + "name": "host", + "required": false, + "desc": "Hostname and port of Consul.", + "fieldValue": null, + "fieldDefaultValue": "localhost:8500", + "fieldFlag": "compactor.ring.consul.hostname", + "fieldType": "string" + }, + { + "kind": "field", + "name": "acl_token", + "required": false, + "desc": "ACL Token used to interact with Consul.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "compactor.ring.consul.acl-token", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "http_client_timeout", + "required": false, + "desc": "HTTP timeout when talking to Consul", + "fieldValue": null, + "fieldDefaultValue": 20000000000, + "fieldFlag": "compactor.ring.consul.client-timeout", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "consistent_reads", + "required": false, + "desc": "Enable consistent reads to Consul.", + "fieldValue": null, + "fieldDefaultValue": false, + "fieldFlag": "compactor.ring.consul.consistent-reads", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "watch_rate_limit", + "required": false, + "desc": "Rate limit when watching key or prefix in Consul, in requests per second. 0 disables the rate limit.", + "fieldValue": null, + "fieldDefaultValue": 1, + "fieldFlag": "compactor.ring.consul.watch-rate-limit", + "fieldType": "float", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "watch_burst_size", + "required": false, + "desc": "Burst size used in rate limit. Values less than 1 are treated as 1.", + "fieldValue": null, + "fieldDefaultValue": 1, + "fieldFlag": "compactor.ring.consul.watch-burst-size", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "cas_retry_delay", + "required": false, + "desc": "Maximum duration to wait before retrying a Compare And Swap (CAS) operation.", + "fieldValue": null, + "fieldDefaultValue": 1000000000, + "fieldFlag": "compactor.ring.consul.cas-retry-delay", + "fieldType": "duration", + "fieldCategory": "advanced" + } + ], "fieldValue": null, - "fieldDefaultValue": 3600000000000, - "fieldFlag": "blocks-storage.bucket-store.index-header.lazy-loading-idle-timeout", - "fieldType": "duration", - "fieldCategory": "advanced" + "fieldDefaultValue": null }, { - "kind": "field", - "name": "lazy_loading_concurrency", + "kind": "block", + "name": "etcd", "required": false, - "desc": "Maximum number of concurrent index header loads across all tenants. If set to 0, concurrency is unlimited.", + "desc": "", + "blockEntries": [ + { + "kind": "field", + "name": "endpoints", + "required": false, + "desc": "The etcd endpoints to connect to.", + "fieldValue": null, + "fieldDefaultValue": [], + "fieldFlag": "compactor.ring.etcd.endpoints", + "fieldType": "list of strings" + }, + { + "kind": "field", + "name": "dial_timeout", + "required": false, + "desc": "The dial timeout for the etcd connection.", + "fieldValue": null, + "fieldDefaultValue": 10000000000, + "fieldFlag": "compactor.ring.etcd.dial-timeout", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "max_retries", + "required": false, + "desc": "The maximum number of retries to do for failed ops.", + "fieldValue": null, + "fieldDefaultValue": 10, + "fieldFlag": "compactor.ring.etcd.max-retries", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_enabled", + "required": false, + "desc": "Enable TLS.", + "fieldValue": null, + "fieldDefaultValue": false, + "fieldFlag": "compactor.ring.etcd.tls-enabled", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_cert_path", + "required": false, + "desc": "Path to the client certificate, which will be used for authenticating with the server. Also requires the key path to be configured.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "compactor.ring.etcd.tls-cert-path", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_key_path", + "required": false, + "desc": "Path to the key for the client certificate. Also requires the client certificate to be configured.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "compactor.ring.etcd.tls-key-path", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_ca_path", + "required": false, + "desc": "Path to the CA certificates to validate server certificate against. If not set, the host's root CA certificates are used.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "compactor.ring.etcd.tls-ca-path", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_server_name", + "required": false, + "desc": "Override the expected name on the server certificate.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "compactor.ring.etcd.tls-server-name", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_insecure_skip_verify", + "required": false, + "desc": "Skip validating server certificate.", + "fieldValue": null, + "fieldDefaultValue": false, + "fieldFlag": "compactor.ring.etcd.tls-insecure-skip-verify", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_cipher_suites", + "required": false, + "desc": "Override the default cipher suite list (separated by commas). Allowed values:\n\nSecure Ciphers:\n- TLS_AES_128_GCM_SHA256\n- TLS_AES_256_GCM_SHA384\n- TLS_CHACHA20_POLY1305_SHA256\n- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA\n- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA\n- TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256\n- TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256\n- TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256\n- TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256\n\nInsecure Ciphers:\n- TLS_RSA_WITH_RC4_128_SHA\n- TLS_RSA_WITH_3DES_EDE_CBC_SHA\n- TLS_RSA_WITH_AES_128_CBC_SHA\n- TLS_RSA_WITH_AES_256_CBC_SHA\n- TLS_RSA_WITH_AES_128_CBC_SHA256\n- TLS_RSA_WITH_AES_128_GCM_SHA256\n- TLS_RSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_ECDSA_WITH_RC4_128_SHA\n- TLS_ECDHE_RSA_WITH_RC4_128_SHA\n- TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256\n- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256\n", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "compactor.ring.etcd.tls-cipher-suites", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_min_version", + "required": false, + "desc": "Override the default minimum TLS version. Allowed values: VersionTLS10, VersionTLS11, VersionTLS12, VersionTLS13", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "compactor.ring.etcd.tls-min-version", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "username", + "required": false, + "desc": "Etcd username.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "compactor.ring.etcd.username", + "fieldType": "string" + }, + { + "kind": "field", + "name": "password", + "required": false, + "desc": "Etcd password.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "compactor.ring.etcd.password", + "fieldType": "string" + } + ], "fieldValue": null, - "fieldDefaultValue": 4, - "fieldFlag": "blocks-storage.bucket-store.index-header.lazy-loading-concurrency", - "fieldType": "int", - "fieldCategory": "advanced" + "fieldDefaultValue": null }, { - "kind": "field", - "name": "lazy_loading_concurrency_queue_timeout", + "kind": "block", + "name": "memberlist", "required": false, - "desc": "Timeout for the queue of index header loads. If the queue is full and the timeout is reached, the load will return an error. 0 means no timeout and the load will wait indefinitely.", + "desc": "", + "blockEntries": [ + { + "kind": "field", + "name": "node_name", + "required": false, + "desc": "Name of the node in memberlist cluster. Defaults to hostname.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "compactor.ring.memberlist.nodename", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "randomize_node_name", + "required": false, + "desc": "Add random suffix to the node name.", + "fieldValue": null, + "fieldDefaultValue": true, + "fieldFlag": "compactor.ring.memberlist.randomize-node-name", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "stream_timeout", + "required": false, + "desc": "The timeout for establishing a connection with a remote node, and for read/write operations.", + "fieldValue": null, + "fieldDefaultValue": 2000000000, + "fieldFlag": "compactor.ring.memberlist.stream-timeout", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "retransmit_factor", + "required": false, + "desc": "Multiplication factor used when sending out messages (factor * log(N+1)).", + "fieldValue": null, + "fieldDefaultValue": 4, + "fieldFlag": "compactor.ring.memberlist.retransmit-factor", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "pull_push_interval", + "required": false, + "desc": "How often to use pull/push sync.", + "fieldValue": null, + "fieldDefaultValue": 30000000000, + "fieldFlag": "compactor.ring.memberlist.pullpush-interval", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "gossip_interval", + "required": false, + "desc": "How often to gossip.", + "fieldValue": null, + "fieldDefaultValue": 200000000, + "fieldFlag": "compactor.ring.memberlist.gossip-interval", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "gossip_nodes", + "required": false, + "desc": "How many nodes to gossip to.", + "fieldValue": null, + "fieldDefaultValue": 3, + "fieldFlag": "compactor.ring.memberlist.gossip-nodes", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "gossip_to_dead_nodes_time", + "required": false, + "desc": "How long to keep gossiping to dead nodes, to give them chance to refute their death.", + "fieldValue": null, + "fieldDefaultValue": 30000000000, + "fieldFlag": "compactor.ring.memberlist.gossip-to-dead-nodes-time", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "dead_node_reclaim_time", + "required": false, + "desc": "How soon can dead node's name be reclaimed with new address. 0 to disable.", + "fieldValue": null, + "fieldDefaultValue": 0, + "fieldFlag": "compactor.ring.memberlist.dead-node-reclaim-time", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "compression_enabled", + "required": false, + "desc": "Enable message compression. This can be used to reduce bandwidth usage at the cost of slightly more CPU utilization.", + "fieldValue": null, + "fieldDefaultValue": true, + "fieldFlag": "compactor.ring.memberlist.compression-enabled", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "notify_interval", + "required": false, + "desc": "How frequently to notify watchers when a key changes. Can reduce CPU activity in large memberlist deployments. 0 to notify without delay.", + "fieldValue": null, + "fieldDefaultValue": 0, + "fieldFlag": "compactor.ring.memberlist.notify-interval", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "advertise_addr", + "required": false, + "desc": "Gossip address to advertise to other members in the cluster. Used for NAT traversal.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "compactor.ring.memberlist.advertise-addr", + "fieldType": "string" + }, + { + "kind": "field", + "name": "advertise_port", + "required": false, + "desc": "Gossip port to advertise to other members in the cluster. Used for NAT traversal.", + "fieldValue": null, + "fieldDefaultValue": 7946, + "fieldFlag": "compactor.ring.memberlist.advertise-port", + "fieldType": "int" + }, + { + "kind": "field", + "name": "cluster_label", + "required": false, + "desc": "The cluster label is an optional string to include in outbound packets and gossip streams. Other members in the memberlist cluster will discard any message whose label doesn't match the configured one, unless the 'cluster-label-verification-disabled' configuration option is set to true.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "compactor.ring.memberlist.cluster-label", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "cluster_label_verification_disabled", + "required": false, + "desc": "When true, memberlist doesn't verify that inbound packets and gossip streams have the cluster label matching the configured one. This verification should be disabled while rolling out the change to the configured cluster label in a live memberlist cluster.", + "fieldValue": null, + "fieldDefaultValue": false, + "fieldFlag": "compactor.ring.memberlist.cluster-label-verification-disabled", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "join_members", + "required": false, + "desc": "Other cluster members to join. Can be specified multiple times. It can be an IP, hostname or an entry specified in the DNS Service Discovery format.", + "fieldValue": null, + "fieldDefaultValue": [], + "fieldFlag": "compactor.ring.memberlist.join", + "fieldType": "list of strings" + }, + { + "kind": "field", + "name": "min_join_backoff", + "required": false, + "desc": "Min backoff duration to join other cluster members.", + "fieldValue": null, + "fieldDefaultValue": 1000000000, + "fieldFlag": "compactor.ring.memberlist.min-join-backoff", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "max_join_backoff", + "required": false, + "desc": "Max backoff duration to join other cluster members.", + "fieldValue": null, + "fieldDefaultValue": 60000000000, + "fieldFlag": "compactor.ring.memberlist.max-join-backoff", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "max_join_retries", + "required": false, + "desc": "Max number of retries to join other cluster members.", + "fieldValue": null, + "fieldDefaultValue": 10, + "fieldFlag": "compactor.ring.memberlist.max-join-retries", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "abort_if_cluster_join_fails", + "required": false, + "desc": "If this node fails to join memberlist cluster, abort.", + "fieldValue": null, + "fieldDefaultValue": false, + "fieldFlag": "compactor.ring.memberlist.abort-if-join-fails", + "fieldType": "boolean" + }, + { + "kind": "field", + "name": "rejoin_interval", + "required": false, + "desc": "If not 0, how often to rejoin the cluster. Occasional rejoin can help to fix the cluster split issue, and is harmless otherwise. For example when using only few components as a seed nodes (via -memberlist.join), then it's recommended to use rejoin. If -memberlist.join points to dynamic service that resolves to all gossiping nodes (eg. Kubernetes headless service), then rejoin is not needed.", + "fieldValue": null, + "fieldDefaultValue": 0, + "fieldFlag": "compactor.ring.memberlist.rejoin-interval", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "left_ingesters_timeout", + "required": false, + "desc": "How long to keep LEFT ingesters in the ring.", + "fieldValue": null, + "fieldDefaultValue": 300000000000, + "fieldFlag": "compactor.ring.memberlist.left-ingesters-timeout", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "leave_timeout", + "required": false, + "desc": "Timeout for leaving memberlist cluster.", + "fieldValue": null, + "fieldDefaultValue": 20000000000, + "fieldFlag": "compactor.ring.memberlist.leave-timeout", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "broadcast_timeout_for_local_updates_on_shutdown", + "required": false, + "desc": "Timeout for broadcasting all remaining locally-generated updates to other nodes when shutting down. Only used if there are nodes left in the memberlist cluster, and only applies to locally-generated updates, not to broadcast messages that are result of incoming gossip updates. 0 = no timeout, wait until all locally-generated updates are sent.", + "fieldValue": null, + "fieldDefaultValue": 10000000000, + "fieldFlag": "compactor.ring.memberlist.broadcast-timeout-for-local-updates-on-shutdown", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "message_history_buffer_bytes", + "required": false, + "desc": "How much space to use for keeping received and sent messages in memory for troubleshooting (two buffers). 0 to disable.", + "fieldValue": null, + "fieldDefaultValue": 0, + "fieldFlag": "compactor.ring.memberlist.message-history-buffer-bytes", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "bind_addr", + "required": false, + "desc": "IP address to listen on for gossip messages. Multiple addresses may be specified. Defaults to 0.0.0.0", + "fieldValue": null, + "fieldDefaultValue": [], + "fieldFlag": "compactor.ring.memberlist.bind-addr", + "fieldType": "list of strings" + }, + { + "kind": "field", + "name": "bind_port", + "required": false, + "desc": "Port to listen on for gossip messages.", + "fieldValue": null, + "fieldDefaultValue": 7946, + "fieldFlag": "compactor.ring.memberlist.bind-port", + "fieldType": "int" + }, + { + "kind": "field", + "name": "packet_dial_timeout", + "required": false, + "desc": "Timeout used when connecting to other nodes to send packet.", + "fieldValue": null, + "fieldDefaultValue": 2000000000, + "fieldFlag": "compactor.ring.memberlist.packet-dial-timeout", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "packet_write_timeout", + "required": false, + "desc": "Timeout for writing 'packet' data.", + "fieldValue": null, + "fieldDefaultValue": 5000000000, + "fieldFlag": "compactor.ring.memberlist.packet-write-timeout", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "max_concurrent_writes", + "required": false, + "desc": "Maximum number of concurrent writes to other nodes.", + "fieldValue": null, + "fieldDefaultValue": 3, + "fieldFlag": "compactor.ring.memberlist.max-concurrent-writes", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "acquire_writer_timeout", + "required": false, + "desc": "Timeout for acquiring one of the concurrent write slots. After this time, the message will be dropped.", + "fieldValue": null, + "fieldDefaultValue": 250000000, + "fieldFlag": "compactor.ring.memberlist.acquire-writer-timeout", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_enabled", + "required": false, + "desc": "Enable TLS on the memberlist transport layer.", + "fieldValue": null, + "fieldDefaultValue": false, + "fieldFlag": "compactor.ring.memberlist.tls-enabled", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_cert_path", + "required": false, + "desc": "Path to the client certificate, which will be used for authenticating with the server. Also requires the key path to be configured.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "compactor.ring.memberlist.tls-cert-path", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_key_path", + "required": false, + "desc": "Path to the key for the client certificate. Also requires the client certificate to be configured.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "compactor.ring.memberlist.tls-key-path", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_ca_path", + "required": false, + "desc": "Path to the CA certificates to validate server certificate against. If not set, the host's root CA certificates are used.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "compactor.ring.memberlist.tls-ca-path", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_server_name", + "required": false, + "desc": "Override the expected name on the server certificate.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "compactor.ring.memberlist.tls-server-name", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_insecure_skip_verify", + "required": false, + "desc": "Skip validating server certificate.", + "fieldValue": null, + "fieldDefaultValue": false, + "fieldFlag": "compactor.ring.memberlist.tls-insecure-skip-verify", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_cipher_suites", + "required": false, + "desc": "Override the default cipher suite list (separated by commas). Allowed values:\n\nSecure Ciphers:\n- TLS_AES_128_GCM_SHA256\n- TLS_AES_256_GCM_SHA384\n- TLS_CHACHA20_POLY1305_SHA256\n- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA\n- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA\n- TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256\n- TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256\n- TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256\n- TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256\n\nInsecure Ciphers:\n- TLS_RSA_WITH_RC4_128_SHA\n- TLS_RSA_WITH_3DES_EDE_CBC_SHA\n- TLS_RSA_WITH_AES_128_CBC_SHA\n- TLS_RSA_WITH_AES_256_CBC_SHA\n- TLS_RSA_WITH_AES_128_CBC_SHA256\n- TLS_RSA_WITH_AES_128_GCM_SHA256\n- TLS_RSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_ECDSA_WITH_RC4_128_SHA\n- TLS_ECDHE_RSA_WITH_RC4_128_SHA\n- TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256\n- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256\n", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "compactor.ring.memberlist.tls-cipher-suites", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_min_version", + "required": false, + "desc": "Override the default minimum TLS version. Allowed values: VersionTLS10, VersionTLS11, VersionTLS12, VersionTLS13", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "compactor.ring.memberlist.tls-min-version", + "fieldType": "string", + "fieldCategory": "advanced" + } + ], "fieldValue": null, - "fieldDefaultValue": 5000000000, - "fieldFlag": "blocks-storage.bucket-store.index-header.lazy-loading-concurrency-queue-timeout", - "fieldType": "duration", - "fieldCategory": "advanced" + "fieldDefaultValue": null }, { - "kind": "field", - "name": "verify_on_load", + "kind": "block", + "name": "multi", "required": false, - "desc": "If true, verify the checksum of index headers upon loading them (either on startup or lazily when lazy loading is enabled). Setting to true helps detect disk corruption at the cost of slowing down index header loading.", - "fieldValue": null, - "fieldDefaultValue": false, - "fieldFlag": "blocks-storage.bucket-store.index-header.verify-on-load", - "fieldType": "boolean", - "fieldCategory": "advanced" - } - ], - "fieldValue": null, - "fieldDefaultValue": null - }, - { - "kind": "field", - "name": "streaming_series_batch_size", - "required": false, - "desc": "This option controls how many series to fetch per batch. The batch size must be greater than 0.", - "fieldValue": null, - "fieldDefaultValue": 5000, - "fieldFlag": "blocks-storage.bucket-store.batch-series-size", - "fieldType": "int", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "series_fetch_preference", - "required": false, - "desc": "This parameter controls the trade-off in fetching series versus fetching postings to fulfill a series request. Increasing the series preference results in fetching more series and reducing the volume of postings fetched. Reducing the series preference results in the opposite. Increase this parameter to reduce the rate of fetched series bytes (see \"Mimir / Queries\" dashboard) or API calls to the object store. Must be a positive floating point number.", - "fieldValue": null, - "fieldDefaultValue": 0.75, - "fieldFlag": "blocks-storage.bucket-store.series-fetch-preference", - "fieldType": "float", - "fieldCategory": "advanced" - } - ], - "fieldValue": null, - "fieldDefaultValue": null - }, - { - "kind": "block", - "name": "tsdb", - "required": false, - "desc": "", - "blockEntries": [ - { - "kind": "field", - "name": "dir", - "required": false, - "desc": "Directory to store TSDBs (including WAL) in the ingesters. This directory is required to be persisted between restarts.", - "fieldValue": null, - "fieldDefaultValue": "./tsdb/", - "fieldFlag": "blocks-storage.tsdb.dir", - "fieldType": "string" - }, - { - "kind": "field", - "name": "retention_period", - "required": false, - "desc": "TSDB blocks retention in the ingester before a block is removed. If shipping is enabled, the retention will be relative to the time when the block was uploaded to storage. If shipping is disabled then its relative to the creation time of the block. This should be larger than the -blocks-storage.tsdb.block-ranges-period, -querier.query-store-after and large enough to give store-gateways and queriers enough time to discover newly uploaded blocks.", - "fieldValue": null, - "fieldDefaultValue": 46800000000000, - "fieldFlag": "blocks-storage.tsdb.retention-period", - "fieldType": "duration" - }, - { - "kind": "field", - "name": "ship_interval", - "required": false, - "desc": "How frequently the TSDB blocks are scanned and new ones are shipped to the storage. 0 means shipping is disabled.", - "fieldValue": null, - "fieldDefaultValue": 60000000000, - "fieldFlag": "blocks-storage.tsdb.ship-interval", - "fieldType": "duration", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "ship_concurrency", - "required": false, - "desc": "Maximum number of tenants concurrently shipping blocks to the storage.", - "fieldValue": null, - "fieldDefaultValue": 10, - "fieldFlag": "blocks-storage.tsdb.ship-concurrency", - "fieldType": "int", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "head_compaction_interval", - "required": false, - "desc": "How frequently the ingester checks whether the TSDB head should be compacted and, if so, triggers the compaction. Mimir applies a jitter to the first check, and subsequent checks will happen at the configured interval. A block is only created if data covers the smallest block range. The configured interval must be between 0 and 15 minutes.", - "fieldValue": null, - "fieldDefaultValue": 60000000000, - "fieldFlag": "blocks-storage.tsdb.head-compaction-interval", - "fieldType": "duration", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "head_compaction_concurrency", - "required": false, - "desc": "Maximum number of tenants concurrently compacting TSDB head into a new block", + "desc": "", + "blockEntries": [ + { + "kind": "field", + "name": "primary", + "required": false, + "desc": "Primary backend storage used by multi-client.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "compactor.ring.multi.primary", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "secondary", + "required": false, + "desc": "Secondary backend storage used by multi-client.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "compactor.ring.multi.secondary", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "mirror_enabled", + "required": false, + "desc": "Mirror writes to secondary store.", + "fieldValue": null, + "fieldDefaultValue": false, + "fieldFlag": "compactor.ring.multi.mirror-enabled", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "mirror_timeout", + "required": false, + "desc": "Timeout for storing value to secondary store.", + "fieldValue": null, + "fieldDefaultValue": 2000000000, + "fieldFlag": "compactor.ring.multi.mirror-timeout", + "fieldType": "duration", + "fieldCategory": "advanced" + } + ], + "fieldValue": null, + "fieldDefaultValue": null + } + ], "fieldValue": null, - "fieldDefaultValue": 1, - "fieldFlag": "blocks-storage.tsdb.head-compaction-concurrency", - "fieldType": "int", - "fieldCategory": "advanced" + "fieldDefaultValue": null }, { "kind": "field", - "name": "head_compaction_idle_timeout", + "name": "heartbeat_period", "required": false, - "desc": "If TSDB head is idle for this duration, it is compacted. Note that up to 25% jitter is added to the value to avoid ingesters compacting concurrently. 0 means disabled.", + "desc": "Period at which to heartbeat to the ring. 0 = disabled.", "fieldValue": null, - "fieldDefaultValue": 3600000000000, - "fieldFlag": "blocks-storage.tsdb.head-compaction-idle-timeout", + "fieldDefaultValue": 15000000000, + "fieldFlag": "compactor.ring.heartbeat-period", "fieldType": "duration", "fieldCategory": "advanced" }, { "kind": "field", - "name": "head_chunks_write_buffer_size_bytes", - "required": false, - "desc": "The write buffer size used by the head chunks mapper. Lower values reduce memory utilisation on clusters with a large number of tenants at the cost of increased disk I/O operations. The configured buffer size must be between 65536 and 8388608.", - "fieldValue": null, - "fieldDefaultValue": 4194304, - "fieldFlag": "blocks-storage.tsdb.head-chunks-write-buffer-size-bytes", - "fieldType": "int", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "head_chunks_end_time_variance", - "required": false, - "desc": "How much variance (as percentage between 0 and 1) should be applied to the chunk end time, to spread chunks writing across time. Doesn't apply to the last chunk of the chunk range. 0 means no variance.", - "fieldValue": null, - "fieldDefaultValue": 0, - "fieldFlag": "blocks-storage.tsdb.head-chunks-end-time-variance", - "fieldType": "float", - "fieldCategory": "experimental" - }, - { - "kind": "field", - "name": "stripe_size", - "required": false, - "desc": "The number of shards of series to use in TSDB (must be a power of 2). Reducing this will decrease memory footprint, but can negatively impact performance.", - "fieldValue": null, - "fieldDefaultValue": 16384, - "fieldFlag": "blocks-storage.tsdb.stripe-size", - "fieldType": "int", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "wal_compression_enabled", - "required": false, - "desc": "True to enable TSDB WAL compression.", - "fieldValue": null, - "fieldDefaultValue": false, - "fieldFlag": "blocks-storage.tsdb.wal-compression-enabled", - "fieldType": "boolean", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "wal_segment_size_bytes", - "required": false, - "desc": "TSDB WAL segments files max size (bytes).", - "fieldValue": null, - "fieldDefaultValue": 134217728, - "fieldFlag": "blocks-storage.tsdb.wal-segment-size-bytes", - "fieldType": "int", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "wal_replay_concurrency", - "required": false, - "desc": "Maximum number of CPUs that can simultaneously processes WAL replay. If it is set to 0, then each TSDB is replayed with a concurrency equal to the number of CPU cores available on the machine.", - "fieldValue": null, - "fieldDefaultValue": 0, - "fieldFlag": "blocks-storage.tsdb.wal-replay-concurrency", - "fieldType": "int", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "flush_blocks_on_shutdown", - "required": false, - "desc": "True to flush blocks to storage on shutdown. If false, incomplete blocks will be reused after restart.", - "fieldValue": null, - "fieldDefaultValue": false, - "fieldFlag": "blocks-storage.tsdb.flush-blocks-on-shutdown", - "fieldType": "boolean", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "close_idle_tsdb_timeout", + "name": "heartbeat_timeout", "required": false, - "desc": "If TSDB has not received any data for this duration, and all blocks from TSDB have been shipped, TSDB is closed and deleted from local disk. If set to positive value, this value should be equal or higher than -querier.query-ingesters-within flag to make sure that TSDB is not closed prematurely, which could cause partial query results. 0 or negative value disables closing of idle TSDB.", + "desc": "The heartbeat timeout after which compactors are considered unhealthy within the ring. 0 = never (timeout disabled).", "fieldValue": null, - "fieldDefaultValue": 46800000000000, - "fieldFlag": "blocks-storage.tsdb.close-idle-tsdb-timeout", + "fieldDefaultValue": 60000000000, + "fieldFlag": "compactor.ring.heartbeat-timeout", "fieldType": "duration", "fieldCategory": "advanced" }, { "kind": "field", - "name": "memory_snapshot_on_shutdown", - "required": false, - "desc": "True to enable snapshotting of in-memory TSDB data on disk when shutting down.", - "fieldValue": null, - "fieldDefaultValue": false, - "fieldFlag": "blocks-storage.tsdb.memory-snapshot-on-shutdown", - "fieldType": "boolean", - "fieldCategory": "experimental" - }, - { - "kind": "field", - "name": "head_chunks_write_queue_size", - "required": false, - "desc": "The size of the write queue used by the head chunks mapper. Lower values reduce memory utilisation at the cost of potentially higher ingest latency. Value of 0 switches chunks mapper to implementation without a queue.", - "fieldValue": null, - "fieldDefaultValue": 1000000, - "fieldFlag": "blocks-storage.tsdb.head-chunks-write-queue-size", - "fieldType": "int", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "series_hash_cache_max_size_bytes", - "required": false, - "desc": "Max size - in bytes - of the in-memory series hash cache. The cache is shared across all tenants and it's used only when query sharding is enabled.", - "fieldValue": null, - "fieldDefaultValue": 367001600, - "fieldFlag": "blocks-storage.tsdb.series-hash-cache-max-size-bytes", - "fieldType": "int", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "out_of_order_capacity_max", - "required": false, - "desc": "Maximum capacity for out of order chunks, in samples between 1 and 255.", - "fieldValue": null, - "fieldDefaultValue": 32, - "fieldFlag": "blocks-storage.tsdb.out-of-order-capacity-max", - "fieldType": "int", - "fieldCategory": "experimental" - }, - { - "kind": "field", - "name": "head_postings_for_matchers_cache_ttl", - "required": false, - "desc": "How long to cache postings for matchers in the Head and OOOHead. 0 disables the cache and just deduplicates the in-flight calls.", - "fieldValue": null, - "fieldDefaultValue": 10000000000, - "fieldFlag": "blocks-storage.tsdb.head-postings-for-matchers-cache-ttl", - "fieldType": "duration", - "fieldCategory": "experimental" - }, - { - "kind": "field", - "name": "head_postings_for_matchers_cache_size", - "required": false, - "desc": "Maximum number of entries in the cache for postings for matchers in the Head and OOOHead when TTL is greater than 0.", - "fieldValue": null, - "fieldDefaultValue": 100, - "fieldFlag": "blocks-storage.tsdb.head-postings-for-matchers-cache-size", - "fieldType": "int", - "fieldCategory": "deprecated" - }, - { - "kind": "field", - "name": "head_postings_for_matchers_cache_max_bytes", - "required": false, - "desc": "Maximum size in bytes of the cache for postings for matchers in the Head and OOOHead when TTL is greater than 0.", - "fieldValue": null, - "fieldDefaultValue": 104857600, - "fieldFlag": "blocks-storage.tsdb.head-postings-for-matchers-cache-max-bytes", - "fieldType": "int", - "fieldCategory": "experimental" - }, - { - "kind": "field", - "name": "head_postings_for_matchers_cache_force", - "required": false, - "desc": "Force the cache to be used for postings for matchers in the Head and OOOHead, even if it's not a concurrent (query-sharding) call.", - "fieldValue": null, - "fieldDefaultValue": false, - "fieldFlag": "blocks-storage.tsdb.head-postings-for-matchers-cache-force", - "fieldType": "boolean", - "fieldCategory": "experimental" - }, - { - "kind": "field", - "name": "block_postings_for_matchers_cache_ttl", - "required": false, - "desc": "How long to cache postings for matchers in each compacted block queried from the ingester. 0 disables the cache and just deduplicates the in-flight calls.", - "fieldValue": null, - "fieldDefaultValue": 10000000000, - "fieldFlag": "blocks-storage.tsdb.block-postings-for-matchers-cache-ttl", - "fieldType": "duration", - "fieldCategory": "experimental" - }, - { - "kind": "field", - "name": "block_postings_for_matchers_cache_size", - "required": false, - "desc": "Maximum number of entries in the cache for postings for matchers in each compacted block when TTL is greater than 0.", - "fieldValue": null, - "fieldDefaultValue": 100, - "fieldFlag": "blocks-storage.tsdb.block-postings-for-matchers-cache-size", - "fieldType": "int", - "fieldCategory": "deprecated" - }, - { - "kind": "field", - "name": "block_postings_for_matchers_cache_max_bytes", - "required": false, - "desc": "Maximum size in bytes of the cache for postings for matchers in each compacted block when TTL is greater than 0.", - "fieldValue": null, - "fieldDefaultValue": 104857600, - "fieldFlag": "blocks-storage.tsdb.block-postings-for-matchers-cache-max-bytes", - "fieldType": "int", - "fieldCategory": "experimental" - }, - { - "kind": "field", - "name": "block_postings_for_matchers_cache_force", + "name": "instance_id", "required": false, - "desc": "Force the cache to be used for postings for matchers in compacted blocks, even if it's not a concurrent (query-sharding) call.", + "desc": "Instance ID to register in the ring.", "fieldValue": null, - "fieldDefaultValue": false, - "fieldFlag": "blocks-storage.tsdb.block-postings-for-matchers-cache-force", - "fieldType": "boolean", - "fieldCategory": "experimental" + "fieldDefaultValue": "\u003chostname\u003e", + "fieldFlag": "compactor.ring.instance-id", + "fieldType": "string", + "fieldCategory": "advanced" }, { "kind": "field", - "name": "early_head_compaction_min_in_memory_series", + "name": "instance_interface_names", "required": false, - "desc": "When the number of in-memory series in the ingester is equal to or greater than this setting, the ingester tries to compact the TSDB Head. The early compaction removes from the memory all samples and inactive series up until -ingester.active-series-metrics-idle-timeout time ago. After an early compaction, the ingester will not accept any sample with a timestamp older than -ingester.active-series-metrics-idle-timeout time ago (unless out of order ingestion is enabled). The ingester checks every -blocks-storage.tsdb.head-compaction-interval whether an early compaction is required. Use 0 to disable it.", + "desc": "List of network interface names to look up when finding the instance IP address.", "fieldValue": null, - "fieldDefaultValue": 0, - "fieldFlag": "blocks-storage.tsdb.early-head-compaction-min-in-memory-series", - "fieldType": "int", - "fieldCategory": "experimental" + "fieldDefaultValue": [], + "fieldFlag": "compactor.ring.instance-interface-names", + "fieldType": "list of strings" }, { "kind": "field", - "name": "early_head_compaction_min_estimated_series_reduction_percentage", + "name": "instance_port", "required": false, - "desc": "When the early compaction is enabled, the early compaction is triggered only if the estimated series reduction is at least the configured percentage (0-100).", + "desc": "Port to advertise in the ring (defaults to -server.grpc-listen-port).", "fieldValue": null, - "fieldDefaultValue": 15, - "fieldFlag": "blocks-storage.tsdb.early-head-compaction-min-estimated-series-reduction-percentage", + "fieldDefaultValue": 0, + "fieldFlag": "compactor.ring.instance-port", "fieldType": "int", - "fieldCategory": "experimental" + "fieldCategory": "advanced" }, { "kind": "field", - "name": "timely_head_compaction_enabled", + "name": "instance_addr", "required": false, - "desc": "Allows head compaction to happen when the min block range can no longer be appended, without requiring 1.5x the chunk range worth of data in the head.", - "fieldValue": null, - "fieldDefaultValue": false, - "fieldFlag": "blocks-storage.tsdb.timely-head-compaction-enabled", - "fieldType": "boolean", - "fieldCategory": "experimental" - } - ], - "fieldValue": null, - "fieldDefaultValue": null - } - ], - "fieldValue": null, - "fieldDefaultValue": null - }, - { - "kind": "block", - "name": "compactor", - "required": false, - "desc": "", - "blockEntries": [ - { - "kind": "field", - "name": "block_ranges", - "required": false, - "desc": "List of compaction time ranges.", - "fieldValue": null, - "fieldDefaultValue": [], - "fieldFlag": "compactor.block-ranges", - "fieldType": "list of durations", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "block_sync_concurrency", - "required": false, - "desc": "Number of Go routines to use when downloading blocks for compaction and uploading resulting blocks.", - "fieldValue": null, - "fieldDefaultValue": 8, - "fieldFlag": "compactor.block-sync-concurrency", - "fieldType": "int", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "meta_sync_concurrency", - "required": false, - "desc": "Number of Go routines to use when syncing block meta files from the long term storage.", - "fieldValue": null, - "fieldDefaultValue": 20, - "fieldFlag": "compactor.meta-sync-concurrency", - "fieldType": "int", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "data_dir", - "required": false, - "desc": "Directory to temporarily store blocks during compaction. This directory is not required to be persisted between restarts.", - "fieldValue": null, - "fieldDefaultValue": "./data-compactor/", - "fieldFlag": "compactor.data-dir", - "fieldType": "string" - }, - { - "kind": "field", - "name": "compaction_interval", - "required": false, - "desc": "The frequency at which the compaction runs", - "fieldValue": null, - "fieldDefaultValue": 3600000000000, - "fieldFlag": "compactor.compaction-interval", - "fieldType": "duration", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "compaction_retries", - "required": false, - "desc": "How many times to retry a failed compaction within a single compaction run.", - "fieldValue": null, - "fieldDefaultValue": 3, - "fieldFlag": "compactor.compaction-retries", - "fieldType": "int", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "compaction_concurrency", - "required": false, - "desc": "Max number of concurrent compactions running.", - "fieldValue": null, - "fieldDefaultValue": 1, - "fieldFlag": "compactor.compaction-concurrency", - "fieldType": "int", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "first_level_compaction_wait_period", - "required": false, - "desc": "How long the compactor waits before compacting first-level blocks that are uploaded by the ingesters. This configuration option allows for the reduction of cases where the compactor begins to compact blocks before all ingesters have uploaded their blocks to the storage.", - "fieldValue": null, - "fieldDefaultValue": 1500000000000, - "fieldFlag": "compactor.first-level-compaction-wait-period", - "fieldType": "duration" - }, - { - "kind": "field", - "name": "cleanup_interval", - "required": false, - "desc": "How frequently the compactor should run blocks cleanup and maintenance, as well as update the bucket index.", - "fieldValue": null, - "fieldDefaultValue": 900000000000, - "fieldFlag": "compactor.cleanup-interval", - "fieldType": "duration", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "cleanup_concurrency", - "required": false, - "desc": "Max number of tenants for which blocks cleanup and maintenance should run concurrently.", - "fieldValue": null, - "fieldDefaultValue": 20, - "fieldFlag": "compactor.cleanup-concurrency", - "fieldType": "int", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "deletion_delay", - "required": false, - "desc": "Time before a block marked for deletion is deleted from bucket. If not 0, blocks will be marked for deletion and the compactor component will permanently delete blocks marked for deletion from the bucket. If 0, blocks will be deleted straight away. Note that deleting blocks immediately can cause query failures.", - "fieldValue": null, - "fieldDefaultValue": 43200000000000, - "fieldFlag": "compactor.deletion-delay", - "fieldType": "duration", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "tenant_cleanup_delay", - "required": false, - "desc": "For tenants marked for deletion, this is the time between deletion of the last block, and doing final cleanup (marker files, debug files) of the tenant.", - "fieldValue": null, - "fieldDefaultValue": 21600000000000, - "fieldFlag": "compactor.tenant-cleanup-delay", - "fieldType": "duration", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "max_compaction_time", - "required": false, - "desc": "Max time for starting compactions for a single tenant. After this time no new compactions for the tenant are started before next compaction cycle. This can help in multi-tenant environments to avoid single tenant using all compaction time, but also in single-tenant environments to force new discovery of blocks more often. 0 = disabled.", - "fieldValue": null, - "fieldDefaultValue": 3600000000000, - "fieldFlag": "compactor.max-compaction-time", - "fieldType": "duration", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "no_blocks_file_cleanup_enabled", - "required": false, - "desc": "If enabled, will delete the bucket-index, markers and debug files in the tenant bucket when there are no blocks left in the index.", - "fieldValue": null, - "fieldDefaultValue": false, - "fieldFlag": "compactor.no-blocks-file-cleanup-enabled", - "fieldType": "boolean", - "fieldCategory": "experimental" - }, - { - "kind": "field", - "name": "max_opening_blocks_concurrency", - "required": false, - "desc": "Number of goroutines opening blocks before compaction.", - "fieldValue": null, - "fieldDefaultValue": 1, - "fieldFlag": "compactor.max-opening-blocks-concurrency", - "fieldType": "int", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "max_closing_blocks_concurrency", - "required": false, - "desc": "Max number of blocks that can be closed concurrently during split compaction. Note that closing a newly compacted block uses a lot of memory for writing the index.", - "fieldValue": null, - "fieldDefaultValue": 1, - "fieldFlag": "compactor.max-closing-blocks-concurrency", - "fieldType": "int", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "symbols_flushers_concurrency", - "required": false, - "desc": "Number of symbols flushers used when doing split compaction.", - "fieldValue": null, - "fieldDefaultValue": 1, - "fieldFlag": "compactor.symbols-flushers-concurrency", - "fieldType": "int", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "max_block_upload_validation_concurrency", - "required": false, - "desc": "Max number of uploaded blocks that can be validated concurrently. 0 = no limit.", - "fieldValue": null, - "fieldDefaultValue": 1, - "fieldFlag": "compactor.max-block-upload-validation-concurrency", - "fieldType": "int", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "enabled_tenants", - "required": false, - "desc": "Comma separated list of tenants that can be compacted. If specified, only these tenants will be compacted by the compactor, otherwise all tenants can be compacted. Subject to sharding.", + "desc": "IP address to advertise in the ring. Default is auto-detected.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "compactor.ring.instance-addr", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "instance_enable_ipv6", + "required": false, + "desc": "Enable using a IPv6 instance address. (default false)", + "fieldValue": null, + "fieldDefaultValue": false, + "fieldFlag": "compactor.ring.instance-enable-ipv6", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "wait_stability_min_duration", + "required": false, + "desc": "Minimum time to wait for ring stability at startup. 0 to disable.", + "fieldValue": null, + "fieldDefaultValue": 0, + "fieldFlag": "compactor.ring.wait-stability-min-duration", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "wait_stability_max_duration", + "required": false, + "desc": "Maximum time to wait for ring stability at startup. If the compactor ring keeps changing after this period of time, the compactor will start anyway.", + "fieldValue": null, + "fieldDefaultValue": 300000000000, + "fieldFlag": "compactor.ring.wait-stability-max-duration", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "wait_active_instance_timeout", + "required": false, + "desc": "Timeout for waiting on compactor to become ACTIVE in the ring.", + "fieldValue": null, + "fieldDefaultValue": 600000000000, + "fieldFlag": "compactor.ring.wait-active-instance-timeout", + "fieldType": "duration", + "fieldCategory": "advanced" + } + ], "fieldValue": null, - "fieldDefaultValue": "", - "fieldFlag": "compactor.enabled-tenants", - "fieldType": "string", - "fieldCategory": "advanced" + "fieldDefaultValue": null }, { "kind": "field", - "name": "disabled_tenants", + "name": "compaction_jobs_order", "required": false, - "desc": "Comma separated list of tenants that cannot be compacted by the compactor. If specified, and the compactor would normally pick a given tenant for compaction (via -compactor.enabled-tenants or sharding), it will be ignored instead.", + "desc": "The sorting to use when deciding which compaction jobs should run first for a given tenant. Supported values are: smallest-range-oldest-blocks-first, newest-blocks-first.", "fieldValue": null, - "fieldDefaultValue": "", - "fieldFlag": "compactor.disabled-tenants", + "fieldDefaultValue": "smallest-range-oldest-blocks-first", + "fieldFlag": "compactor.compaction-jobs-order", "fieldType": "string", "fieldCategory": "advanced" - }, + } + ], + "fieldValue": null, + "fieldDefaultValue": null + }, + { + "kind": "block", + "name": "store_gateway", + "required": false, + "desc": "", + "blockEntries": [ { "kind": "block", "name": "sharding_ring", @@ -10593,7 +13219,7 @@ "desc": "Backend storage to use for the ring. Supported values are: consul, etcd, inmemory, memberlist, multi.", "fieldValue": null, "fieldDefaultValue": "memberlist", - "fieldFlag": "compactor.ring.store", + "fieldFlag": "store-gateway.sharding-ring.store", "fieldType": "string" }, { @@ -10603,7 +13229,7 @@ "desc": "The prefix for the keys in the store. Should end with a /.", "fieldValue": null, "fieldDefaultValue": "collectors/", - "fieldFlag": "compactor.ring.prefix", + "fieldFlag": "store-gateway.sharding-ring.prefix", "fieldType": "string", "fieldCategory": "advanced" }, @@ -10620,7 +13246,7 @@ "desc": "Hostname and port of Consul.", "fieldValue": null, "fieldDefaultValue": "localhost:8500", - "fieldFlag": "compactor.ring.consul.hostname", + "fieldFlag": "store-gateway.sharding-ring.consul.hostname", "fieldType": "string" }, { @@ -10630,7 +13256,7 @@ "desc": "ACL Token used to interact with Consul.", "fieldValue": null, "fieldDefaultValue": "", - "fieldFlag": "compactor.ring.consul.acl-token", + "fieldFlag": "store-gateway.sharding-ring.consul.acl-token", "fieldType": "string", "fieldCategory": "advanced" }, @@ -10641,7 +13267,7 @@ "desc": "HTTP timeout when talking to Consul", "fieldValue": null, "fieldDefaultValue": 20000000000, - "fieldFlag": "compactor.ring.consul.client-timeout", + "fieldFlag": "store-gateway.sharding-ring.consul.client-timeout", "fieldType": "duration", "fieldCategory": "advanced" }, @@ -10652,7 +13278,7 @@ "desc": "Enable consistent reads to Consul.", "fieldValue": null, "fieldDefaultValue": false, - "fieldFlag": "compactor.ring.consul.consistent-reads", + "fieldFlag": "store-gateway.sharding-ring.consul.consistent-reads", "fieldType": "boolean", "fieldCategory": "advanced" }, @@ -10663,7 +13289,7 @@ "desc": "Rate limit when watching key or prefix in Consul, in requests per second. 0 disables the rate limit.", "fieldValue": null, "fieldDefaultValue": 1, - "fieldFlag": "compactor.ring.consul.watch-rate-limit", + "fieldFlag": "store-gateway.sharding-ring.consul.watch-rate-limit", "fieldType": "float", "fieldCategory": "advanced" }, @@ -10674,7 +13300,7 @@ "desc": "Burst size used in rate limit. Values less than 1 are treated as 1.", "fieldValue": null, "fieldDefaultValue": 1, - "fieldFlag": "compactor.ring.consul.watch-burst-size", + "fieldFlag": "store-gateway.sharding-ring.consul.watch-burst-size", "fieldType": "int", "fieldCategory": "advanced" }, @@ -10685,7 +13311,7 @@ "desc": "Maximum duration to wait before retrying a Compare And Swap (CAS) operation.", "fieldValue": null, "fieldDefaultValue": 1000000000, - "fieldFlag": "compactor.ring.consul.cas-retry-delay", + "fieldFlag": "store-gateway.sharding-ring.consul.cas-retry-delay", "fieldType": "duration", "fieldCategory": "advanced" } @@ -10706,7 +13332,7 @@ "desc": "The etcd endpoints to connect to.", "fieldValue": null, "fieldDefaultValue": [], - "fieldFlag": "compactor.ring.etcd.endpoints", + "fieldFlag": "store-gateway.sharding-ring.etcd.endpoints", "fieldType": "list of strings" }, { @@ -10716,7 +13342,7 @@ "desc": "The dial timeout for the etcd connection.", "fieldValue": null, "fieldDefaultValue": 10000000000, - "fieldFlag": "compactor.ring.etcd.dial-timeout", + "fieldFlag": "store-gateway.sharding-ring.etcd.dial-timeout", "fieldType": "duration", "fieldCategory": "advanced" }, @@ -10727,7 +13353,7 @@ "desc": "The maximum number of retries to do for failed ops.", "fieldValue": null, "fieldDefaultValue": 10, - "fieldFlag": "compactor.ring.etcd.max-retries", + "fieldFlag": "store-gateway.sharding-ring.etcd.max-retries", "fieldType": "int", "fieldCategory": "advanced" }, @@ -10738,7 +13364,7 @@ "desc": "Enable TLS.", "fieldValue": null, "fieldDefaultValue": false, - "fieldFlag": "compactor.ring.etcd.tls-enabled", + "fieldFlag": "store-gateway.sharding-ring.etcd.tls-enabled", "fieldType": "boolean", "fieldCategory": "advanced" }, @@ -10749,7 +13375,7 @@ "desc": "Path to the client certificate, which will be used for authenticating with the server. Also requires the key path to be configured.", "fieldValue": null, "fieldDefaultValue": "", - "fieldFlag": "compactor.ring.etcd.tls-cert-path", + "fieldFlag": "store-gateway.sharding-ring.etcd.tls-cert-path", "fieldType": "string", "fieldCategory": "advanced" }, @@ -10760,7 +13386,7 @@ "desc": "Path to the key for the client certificate. Also requires the client certificate to be configured.", "fieldValue": null, "fieldDefaultValue": "", - "fieldFlag": "compactor.ring.etcd.tls-key-path", + "fieldFlag": "store-gateway.sharding-ring.etcd.tls-key-path", "fieldType": "string", "fieldCategory": "advanced" }, @@ -10771,7 +13397,7 @@ "desc": "Path to the CA certificates to validate server certificate against. If not set, the host's root CA certificates are used.", "fieldValue": null, "fieldDefaultValue": "", - "fieldFlag": "compactor.ring.etcd.tls-ca-path", + "fieldFlag": "store-gateway.sharding-ring.etcd.tls-ca-path", "fieldType": "string", "fieldCategory": "advanced" }, @@ -10782,7 +13408,7 @@ "desc": "Override the expected name on the server certificate.", "fieldValue": null, "fieldDefaultValue": "", - "fieldFlag": "compactor.ring.etcd.tls-server-name", + "fieldFlag": "store-gateway.sharding-ring.etcd.tls-server-name", "fieldType": "string", "fieldCategory": "advanced" }, @@ -10793,7 +13419,7 @@ "desc": "Skip validating server certificate.", "fieldValue": null, "fieldDefaultValue": false, - "fieldFlag": "compactor.ring.etcd.tls-insecure-skip-verify", + "fieldFlag": "store-gateway.sharding-ring.etcd.tls-insecure-skip-verify", "fieldType": "boolean", "fieldCategory": "advanced" }, @@ -10804,7 +13430,7 @@ "desc": "Override the default cipher suite list (separated by commas). Allowed values:\n\nSecure Ciphers:\n- TLS_AES_128_GCM_SHA256\n- TLS_AES_256_GCM_SHA384\n- TLS_CHACHA20_POLY1305_SHA256\n- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA\n- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA\n- TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256\n- TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256\n- TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256\n- TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256\n\nInsecure Ciphers:\n- TLS_RSA_WITH_RC4_128_SHA\n- TLS_RSA_WITH_3DES_EDE_CBC_SHA\n- TLS_RSA_WITH_AES_128_CBC_SHA\n- TLS_RSA_WITH_AES_256_CBC_SHA\n- TLS_RSA_WITH_AES_128_CBC_SHA256\n- TLS_RSA_WITH_AES_128_GCM_SHA256\n- TLS_RSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_ECDSA_WITH_RC4_128_SHA\n- TLS_ECDHE_RSA_WITH_RC4_128_SHA\n- TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256\n- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256\n", "fieldValue": null, "fieldDefaultValue": "", - "fieldFlag": "compactor.ring.etcd.tls-cipher-suites", + "fieldFlag": "store-gateway.sharding-ring.etcd.tls-cipher-suites", "fieldType": "string", "fieldCategory": "advanced" }, @@ -10815,391 +13441,383 @@ "desc": "Override the default minimum TLS version. Allowed values: VersionTLS10, VersionTLS11, VersionTLS12, VersionTLS13", "fieldValue": null, "fieldDefaultValue": "", - "fieldFlag": "compactor.ring.etcd.tls-min-version", + "fieldFlag": "store-gateway.sharding-ring.etcd.tls-min-version", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "username", + "required": false, + "desc": "Etcd username.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "store-gateway.sharding-ring.etcd.username", + "fieldType": "string" + }, + { + "kind": "field", + "name": "password", + "required": false, + "desc": "Etcd password.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "store-gateway.sharding-ring.etcd.password", + "fieldType": "string" + } + ], + "fieldValue": null, + "fieldDefaultValue": null + }, + { + "kind": "block", + "name": "memberlist", + "required": false, + "desc": "", + "blockEntries": [ + { + "kind": "field", + "name": "node_name", + "required": false, + "desc": "Name of the node in memberlist cluster. Defaults to hostname.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "store-gateway.sharding-ring.memberlist.nodename", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "randomize_node_name", + "required": false, + "desc": "Add random suffix to the node name.", + "fieldValue": null, + "fieldDefaultValue": true, + "fieldFlag": "store-gateway.sharding-ring.memberlist.randomize-node-name", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "stream_timeout", + "required": false, + "desc": "The timeout for establishing a connection with a remote node, and for read/write operations.", + "fieldValue": null, + "fieldDefaultValue": 2000000000, + "fieldFlag": "store-gateway.sharding-ring.memberlist.stream-timeout", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "retransmit_factor", + "required": false, + "desc": "Multiplication factor used when sending out messages (factor * log(N+1)).", + "fieldValue": null, + "fieldDefaultValue": 4, + "fieldFlag": "store-gateway.sharding-ring.memberlist.retransmit-factor", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "pull_push_interval", + "required": false, + "desc": "How often to use pull/push sync.", + "fieldValue": null, + "fieldDefaultValue": 30000000000, + "fieldFlag": "store-gateway.sharding-ring.memberlist.pullpush-interval", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "gossip_interval", + "required": false, + "desc": "How often to gossip.", + "fieldValue": null, + "fieldDefaultValue": 200000000, + "fieldFlag": "store-gateway.sharding-ring.memberlist.gossip-interval", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "gossip_nodes", + "required": false, + "desc": "How many nodes to gossip to.", + "fieldValue": null, + "fieldDefaultValue": 3, + "fieldFlag": "store-gateway.sharding-ring.memberlist.gossip-nodes", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "gossip_to_dead_nodes_time", + "required": false, + "desc": "How long to keep gossiping to dead nodes, to give them chance to refute their death.", + "fieldValue": null, + "fieldDefaultValue": 30000000000, + "fieldFlag": "store-gateway.sharding-ring.memberlist.gossip-to-dead-nodes-time", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "dead_node_reclaim_time", + "required": false, + "desc": "How soon can dead node's name be reclaimed with new address. 0 to disable.", + "fieldValue": null, + "fieldDefaultValue": 0, + "fieldFlag": "store-gateway.sharding-ring.memberlist.dead-node-reclaim-time", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "compression_enabled", + "required": false, + "desc": "Enable message compression. This can be used to reduce bandwidth usage at the cost of slightly more CPU utilization.", + "fieldValue": null, + "fieldDefaultValue": true, + "fieldFlag": "store-gateway.sharding-ring.memberlist.compression-enabled", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "notify_interval", + "required": false, + "desc": "How frequently to notify watchers when a key changes. Can reduce CPU activity in large memberlist deployments. 0 to notify without delay.", + "fieldValue": null, + "fieldDefaultValue": 0, + "fieldFlag": "store-gateway.sharding-ring.memberlist.notify-interval", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "advertise_addr", + "required": false, + "desc": "Gossip address to advertise to other members in the cluster. Used for NAT traversal.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "store-gateway.sharding-ring.memberlist.advertise-addr", + "fieldType": "string" + }, + { + "kind": "field", + "name": "advertise_port", + "required": false, + "desc": "Gossip port to advertise to other members in the cluster. Used for NAT traversal.", + "fieldValue": null, + "fieldDefaultValue": 7946, + "fieldFlag": "store-gateway.sharding-ring.memberlist.advertise-port", + "fieldType": "int" + }, + { + "kind": "field", + "name": "cluster_label", + "required": false, + "desc": "The cluster label is an optional string to include in outbound packets and gossip streams. Other members in the memberlist cluster will discard any message whose label doesn't match the configured one, unless the 'cluster-label-verification-disabled' configuration option is set to true.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "store-gateway.sharding-ring.memberlist.cluster-label", "fieldType": "string", "fieldCategory": "advanced" }, { "kind": "field", - "name": "username", + "name": "cluster_label_verification_disabled", + "required": false, + "desc": "When true, memberlist doesn't verify that inbound packets and gossip streams have the cluster label matching the configured one. This verification should be disabled while rolling out the change to the configured cluster label in a live memberlist cluster.", + "fieldValue": null, + "fieldDefaultValue": false, + "fieldFlag": "store-gateway.sharding-ring.memberlist.cluster-label-verification-disabled", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "join_members", "required": false, - "desc": "Etcd username.", + "desc": "Other cluster members to join. Can be specified multiple times. It can be an IP, hostname or an entry specified in the DNS Service Discovery format.", "fieldValue": null, - "fieldDefaultValue": "", - "fieldFlag": "compactor.ring.etcd.username", - "fieldType": "string" + "fieldDefaultValue": [], + "fieldFlag": "store-gateway.sharding-ring.memberlist.join", + "fieldType": "list of strings" }, { "kind": "field", - "name": "password", + "name": "min_join_backoff", "required": false, - "desc": "Etcd password.", + "desc": "Min backoff duration to join other cluster members.", "fieldValue": null, - "fieldDefaultValue": "", - "fieldFlag": "compactor.ring.etcd.password", - "fieldType": "string" - } - ], - "fieldValue": null, - "fieldDefaultValue": null - }, - { - "kind": "block", - "name": "multi", - "required": false, - "desc": "", - "blockEntries": [ + "fieldDefaultValue": 1000000000, + "fieldFlag": "store-gateway.sharding-ring.memberlist.min-join-backoff", + "fieldType": "duration", + "fieldCategory": "advanced" + }, { "kind": "field", - "name": "primary", + "name": "max_join_backoff", "required": false, - "desc": "Primary backend storage used by multi-client.", + "desc": "Max backoff duration to join other cluster members.", "fieldValue": null, - "fieldDefaultValue": "", - "fieldFlag": "compactor.ring.multi.primary", - "fieldType": "string", + "fieldDefaultValue": 60000000000, + "fieldFlag": "store-gateway.sharding-ring.memberlist.max-join-backoff", + "fieldType": "duration", "fieldCategory": "advanced" }, { "kind": "field", - "name": "secondary", + "name": "max_join_retries", "required": false, - "desc": "Secondary backend storage used by multi-client.", + "desc": "Max number of retries to join other cluster members.", "fieldValue": null, - "fieldDefaultValue": "", - "fieldFlag": "compactor.ring.multi.secondary", - "fieldType": "string", + "fieldDefaultValue": 10, + "fieldFlag": "store-gateway.sharding-ring.memberlist.max-join-retries", + "fieldType": "int", "fieldCategory": "advanced" }, { "kind": "field", - "name": "mirror_enabled", + "name": "abort_if_cluster_join_fails", "required": false, - "desc": "Mirror writes to secondary store.", + "desc": "If this node fails to join memberlist cluster, abort.", "fieldValue": null, "fieldDefaultValue": false, - "fieldFlag": "compactor.ring.multi.mirror-enabled", - "fieldType": "boolean", - "fieldCategory": "advanced" + "fieldFlag": "store-gateway.sharding-ring.memberlist.abort-if-join-fails", + "fieldType": "boolean" }, { "kind": "field", - "name": "mirror_timeout", + "name": "rejoin_interval", "required": false, - "desc": "Timeout for storing value to secondary store.", + "desc": "If not 0, how often to rejoin the cluster. Occasional rejoin can help to fix the cluster split issue, and is harmless otherwise. For example when using only few components as a seed nodes (via -memberlist.join), then it's recommended to use rejoin. If -memberlist.join points to dynamic service that resolves to all gossiping nodes (eg. Kubernetes headless service), then rejoin is not needed.", "fieldValue": null, - "fieldDefaultValue": 2000000000, - "fieldFlag": "compactor.ring.multi.mirror-timeout", + "fieldDefaultValue": 0, + "fieldFlag": "store-gateway.sharding-ring.memberlist.rejoin-interval", "fieldType": "duration", "fieldCategory": "advanced" - } - ], - "fieldValue": null, - "fieldDefaultValue": null - } - ], - "fieldValue": null, - "fieldDefaultValue": null - }, - { - "kind": "field", - "name": "heartbeat_period", - "required": false, - "desc": "Period at which to heartbeat to the ring. 0 = disabled.", - "fieldValue": null, - "fieldDefaultValue": 15000000000, - "fieldFlag": "compactor.ring.heartbeat-period", - "fieldType": "duration", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "heartbeat_timeout", - "required": false, - "desc": "The heartbeat timeout after which compactors are considered unhealthy within the ring. 0 = never (timeout disabled).", - "fieldValue": null, - "fieldDefaultValue": 60000000000, - "fieldFlag": "compactor.ring.heartbeat-timeout", - "fieldType": "duration", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "instance_id", - "required": false, - "desc": "Instance ID to register in the ring.", - "fieldValue": null, - "fieldDefaultValue": "\u003chostname\u003e", - "fieldFlag": "compactor.ring.instance-id", - "fieldType": "string", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "instance_interface_names", - "required": false, - "desc": "List of network interface names to look up when finding the instance IP address.", - "fieldValue": null, - "fieldDefaultValue": [], - "fieldFlag": "compactor.ring.instance-interface-names", - "fieldType": "list of strings" - }, - { - "kind": "field", - "name": "instance_port", - "required": false, - "desc": "Port to advertise in the ring (defaults to -server.grpc-listen-port).", - "fieldValue": null, - "fieldDefaultValue": 0, - "fieldFlag": "compactor.ring.instance-port", - "fieldType": "int", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "instance_addr", - "required": false, - "desc": "IP address to advertise in the ring. Default is auto-detected.", - "fieldValue": null, - "fieldDefaultValue": "", - "fieldFlag": "compactor.ring.instance-addr", - "fieldType": "string", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "instance_enable_ipv6", - "required": false, - "desc": "Enable using a IPv6 instance address. (default false)", - "fieldValue": null, - "fieldDefaultValue": false, - "fieldFlag": "compactor.ring.instance-enable-ipv6", - "fieldType": "boolean", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "wait_stability_min_duration", - "required": false, - "desc": "Minimum time to wait for ring stability at startup. 0 to disable.", - "fieldValue": null, - "fieldDefaultValue": 0, - "fieldFlag": "compactor.ring.wait-stability-min-duration", - "fieldType": "duration", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "wait_stability_max_duration", - "required": false, - "desc": "Maximum time to wait for ring stability at startup. If the compactor ring keeps changing after this period of time, the compactor will start anyway.", - "fieldValue": null, - "fieldDefaultValue": 300000000000, - "fieldFlag": "compactor.ring.wait-stability-max-duration", - "fieldType": "duration", - "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "wait_active_instance_timeout", - "required": false, - "desc": "Timeout for waiting on compactor to become ACTIVE in the ring.", - "fieldValue": null, - "fieldDefaultValue": 600000000000, - "fieldFlag": "compactor.ring.wait-active-instance-timeout", - "fieldType": "duration", - "fieldCategory": "advanced" - } - ], - "fieldValue": null, - "fieldDefaultValue": null - }, - { - "kind": "field", - "name": "compaction_jobs_order", - "required": false, - "desc": "The sorting to use when deciding which compaction jobs should run first for a given tenant. Supported values are: smallest-range-oldest-blocks-first, newest-blocks-first.", - "fieldValue": null, - "fieldDefaultValue": "smallest-range-oldest-blocks-first", - "fieldFlag": "compactor.compaction-jobs-order", - "fieldType": "string", - "fieldCategory": "advanced" - } - ], - "fieldValue": null, - "fieldDefaultValue": null - }, - { - "kind": "block", - "name": "store_gateway", - "required": false, - "desc": "", - "blockEntries": [ - { - "kind": "block", - "name": "sharding_ring", - "required": false, - "desc": "", - "blockEntries": [ - { - "kind": "block", - "name": "kvstore", - "required": false, - "desc": "", - "blockEntries": [ - { - "kind": "field", - "name": "store", - "required": false, - "desc": "Backend storage to use for the ring. Supported values are: consul, etcd, inmemory, memberlist, multi.", - "fieldValue": null, - "fieldDefaultValue": "memberlist", - "fieldFlag": "store-gateway.sharding-ring.store", - "fieldType": "string" - }, - { - "kind": "field", - "name": "prefix", - "required": false, - "desc": "The prefix for the keys in the store. Should end with a /.", - "fieldValue": null, - "fieldDefaultValue": "collectors/", - "fieldFlag": "store-gateway.sharding-ring.prefix", - "fieldType": "string", - "fieldCategory": "advanced" - }, - { - "kind": "block", - "name": "consul", - "required": false, - "desc": "", - "blockEntries": [ + }, { "kind": "field", - "name": "host", + "name": "left_ingesters_timeout", "required": false, - "desc": "Hostname and port of Consul.", + "desc": "How long to keep LEFT ingesters in the ring.", "fieldValue": null, - "fieldDefaultValue": "localhost:8500", - "fieldFlag": "store-gateway.sharding-ring.consul.hostname", - "fieldType": "string" + "fieldDefaultValue": 300000000000, + "fieldFlag": "store-gateway.sharding-ring.memberlist.left-ingesters-timeout", + "fieldType": "duration", + "fieldCategory": "advanced" }, { "kind": "field", - "name": "acl_token", + "name": "leave_timeout", "required": false, - "desc": "ACL Token used to interact with Consul.", + "desc": "Timeout for leaving memberlist cluster.", "fieldValue": null, - "fieldDefaultValue": "", - "fieldFlag": "store-gateway.sharding-ring.consul.acl-token", - "fieldType": "string", + "fieldDefaultValue": 20000000000, + "fieldFlag": "store-gateway.sharding-ring.memberlist.leave-timeout", + "fieldType": "duration", "fieldCategory": "advanced" }, { "kind": "field", - "name": "http_client_timeout", + "name": "broadcast_timeout_for_local_updates_on_shutdown", "required": false, - "desc": "HTTP timeout when talking to Consul", + "desc": "Timeout for broadcasting all remaining locally-generated updates to other nodes when shutting down. Only used if there are nodes left in the memberlist cluster, and only applies to locally-generated updates, not to broadcast messages that are result of incoming gossip updates. 0 = no timeout, wait until all locally-generated updates are sent.", "fieldValue": null, - "fieldDefaultValue": 20000000000, - "fieldFlag": "store-gateway.sharding-ring.consul.client-timeout", + "fieldDefaultValue": 10000000000, + "fieldFlag": "store-gateway.sharding-ring.memberlist.broadcast-timeout-for-local-updates-on-shutdown", "fieldType": "duration", "fieldCategory": "advanced" }, { "kind": "field", - "name": "consistent_reads", + "name": "message_history_buffer_bytes", "required": false, - "desc": "Enable consistent reads to Consul.", + "desc": "How much space to use for keeping received and sent messages in memory for troubleshooting (two buffers). 0 to disable.", "fieldValue": null, - "fieldDefaultValue": false, - "fieldFlag": "store-gateway.sharding-ring.consul.consistent-reads", - "fieldType": "boolean", + "fieldDefaultValue": 0, + "fieldFlag": "store-gateway.sharding-ring.memberlist.message-history-buffer-bytes", + "fieldType": "int", "fieldCategory": "advanced" }, { "kind": "field", - "name": "watch_rate_limit", + "name": "bind_addr", "required": false, - "desc": "Rate limit when watching key or prefix in Consul, in requests per second. 0 disables the rate limit.", + "desc": "IP address to listen on for gossip messages. Multiple addresses may be specified. Defaults to 0.0.0.0", "fieldValue": null, - "fieldDefaultValue": 1, - "fieldFlag": "store-gateway.sharding-ring.consul.watch-rate-limit", - "fieldType": "float", - "fieldCategory": "advanced" + "fieldDefaultValue": [], + "fieldFlag": "store-gateway.sharding-ring.memberlist.bind-addr", + "fieldType": "list of strings" }, { "kind": "field", - "name": "watch_burst_size", + "name": "bind_port", "required": false, - "desc": "Burst size used in rate limit. Values less than 1 are treated as 1.", + "desc": "Port to listen on for gossip messages.", "fieldValue": null, - "fieldDefaultValue": 1, - "fieldFlag": "store-gateway.sharding-ring.consul.watch-burst-size", - "fieldType": "int", - "fieldCategory": "advanced" + "fieldDefaultValue": 7946, + "fieldFlag": "store-gateway.sharding-ring.memberlist.bind-port", + "fieldType": "int" }, { "kind": "field", - "name": "cas_retry_delay", + "name": "packet_dial_timeout", "required": false, - "desc": "Maximum duration to wait before retrying a Compare And Swap (CAS) operation.", + "desc": "Timeout used when connecting to other nodes to send packet.", "fieldValue": null, - "fieldDefaultValue": 1000000000, - "fieldFlag": "store-gateway.sharding-ring.consul.cas-retry-delay", + "fieldDefaultValue": 2000000000, + "fieldFlag": "store-gateway.sharding-ring.memberlist.packet-dial-timeout", "fieldType": "duration", "fieldCategory": "advanced" - } - ], - "fieldValue": null, - "fieldDefaultValue": null - }, - { - "kind": "block", - "name": "etcd", - "required": false, - "desc": "", - "blockEntries": [ + }, { "kind": "field", - "name": "endpoints", + "name": "packet_write_timeout", "required": false, - "desc": "The etcd endpoints to connect to.", + "desc": "Timeout for writing 'packet' data.", "fieldValue": null, - "fieldDefaultValue": [], - "fieldFlag": "store-gateway.sharding-ring.etcd.endpoints", - "fieldType": "list of strings" + "fieldDefaultValue": 5000000000, + "fieldFlag": "store-gateway.sharding-ring.memberlist.packet-write-timeout", + "fieldType": "duration", + "fieldCategory": "advanced" }, { "kind": "field", - "name": "dial_timeout", + "name": "max_concurrent_writes", "required": false, - "desc": "The dial timeout for the etcd connection.", + "desc": "Maximum number of concurrent writes to other nodes.", "fieldValue": null, - "fieldDefaultValue": 10000000000, - "fieldFlag": "store-gateway.sharding-ring.etcd.dial-timeout", - "fieldType": "duration", + "fieldDefaultValue": 3, + "fieldFlag": "store-gateway.sharding-ring.memberlist.max-concurrent-writes", + "fieldType": "int", "fieldCategory": "advanced" }, { "kind": "field", - "name": "max_retries", + "name": "acquire_writer_timeout", "required": false, - "desc": "The maximum number of retries to do for failed ops.", + "desc": "Timeout for acquiring one of the concurrent write slots. After this time, the message will be dropped.", "fieldValue": null, - "fieldDefaultValue": 10, - "fieldFlag": "store-gateway.sharding-ring.etcd.max-retries", - "fieldType": "int", + "fieldDefaultValue": 250000000, + "fieldFlag": "store-gateway.sharding-ring.memberlist.acquire-writer-timeout", + "fieldType": "duration", "fieldCategory": "advanced" }, { "kind": "field", "name": "tls_enabled", "required": false, - "desc": "Enable TLS.", + "desc": "Enable TLS on the memberlist transport layer.", "fieldValue": null, "fieldDefaultValue": false, - "fieldFlag": "store-gateway.sharding-ring.etcd.tls-enabled", + "fieldFlag": "store-gateway.sharding-ring.memberlist.tls-enabled", "fieldType": "boolean", "fieldCategory": "advanced" }, @@ -11210,7 +13828,7 @@ "desc": "Path to the client certificate, which will be used for authenticating with the server. Also requires the key path to be configured.", "fieldValue": null, "fieldDefaultValue": "", - "fieldFlag": "store-gateway.sharding-ring.etcd.tls-cert-path", + "fieldFlag": "store-gateway.sharding-ring.memberlist.tls-cert-path", "fieldType": "string", "fieldCategory": "advanced" }, @@ -11221,7 +13839,7 @@ "desc": "Path to the key for the client certificate. Also requires the client certificate to be configured.", "fieldValue": null, "fieldDefaultValue": "", - "fieldFlag": "store-gateway.sharding-ring.etcd.tls-key-path", + "fieldFlag": "store-gateway.sharding-ring.memberlist.tls-key-path", "fieldType": "string", "fieldCategory": "advanced" }, @@ -11232,7 +13850,7 @@ "desc": "Path to the CA certificates to validate server certificate against. If not set, the host's root CA certificates are used.", "fieldValue": null, "fieldDefaultValue": "", - "fieldFlag": "store-gateway.sharding-ring.etcd.tls-ca-path", + "fieldFlag": "store-gateway.sharding-ring.memberlist.tls-ca-path", "fieldType": "string", "fieldCategory": "advanced" }, @@ -11243,7 +13861,7 @@ "desc": "Override the expected name on the server certificate.", "fieldValue": null, "fieldDefaultValue": "", - "fieldFlag": "store-gateway.sharding-ring.etcd.tls-server-name", + "fieldFlag": "store-gateway.sharding-ring.memberlist.tls-server-name", "fieldType": "string", "fieldCategory": "advanced" }, @@ -11254,7 +13872,7 @@ "desc": "Skip validating server certificate.", "fieldValue": null, "fieldDefaultValue": false, - "fieldFlag": "store-gateway.sharding-ring.etcd.tls-insecure-skip-verify", + "fieldFlag": "store-gateway.sharding-ring.memberlist.tls-insecure-skip-verify", "fieldType": "boolean", "fieldCategory": "advanced" }, @@ -11265,7 +13883,7 @@ "desc": "Override the default cipher suite list (separated by commas). Allowed values:\n\nSecure Ciphers:\n- TLS_AES_128_GCM_SHA256\n- TLS_AES_256_GCM_SHA384\n- TLS_CHACHA20_POLY1305_SHA256\n- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA\n- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA\n- TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256\n- TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256\n- TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256\n- TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256\n\nInsecure Ciphers:\n- TLS_RSA_WITH_RC4_128_SHA\n- TLS_RSA_WITH_3DES_EDE_CBC_SHA\n- TLS_RSA_WITH_AES_128_CBC_SHA\n- TLS_RSA_WITH_AES_256_CBC_SHA\n- TLS_RSA_WITH_AES_128_CBC_SHA256\n- TLS_RSA_WITH_AES_128_GCM_SHA256\n- TLS_RSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_ECDSA_WITH_RC4_128_SHA\n- TLS_ECDHE_RSA_WITH_RC4_128_SHA\n- TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256\n- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256\n", "fieldValue": null, "fieldDefaultValue": "", - "fieldFlag": "store-gateway.sharding-ring.etcd.tls-cipher-suites", + "fieldFlag": "store-gateway.sharding-ring.memberlist.tls-cipher-suites", "fieldType": "string", "fieldCategory": "advanced" }, @@ -11276,29 +13894,9 @@ "desc": "Override the default minimum TLS version. Allowed values: VersionTLS10, VersionTLS11, VersionTLS12, VersionTLS13", "fieldValue": null, "fieldDefaultValue": "", - "fieldFlag": "store-gateway.sharding-ring.etcd.tls-min-version", + "fieldFlag": "store-gateway.sharding-ring.memberlist.tls-min-version", "fieldType": "string", "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "username", - "required": false, - "desc": "Etcd username.", - "fieldValue": null, - "fieldDefaultValue": "", - "fieldFlag": "store-gateway.sharding-ring.etcd.username", - "fieldType": "string" - }, - { - "kind": "field", - "name": "password", - "required": false, - "desc": "Etcd password.", - "fieldValue": null, - "fieldDefaultValue": "", - "fieldFlag": "store-gateway.sharding-ring.etcd.password", - "fieldType": "string" } ], "fieldValue": null, @@ -12402,143 +15000,596 @@ "required": false, "desc": "The prefix for the keys in the store. Should end with a /.", "fieldValue": null, - "fieldDefaultValue": "rulers/", - "fieldFlag": "ruler.ring.prefix", - "fieldType": "string", - "fieldCategory": "advanced" + "fieldDefaultValue": "rulers/", + "fieldFlag": "ruler.ring.prefix", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "block", + "name": "consul", + "required": false, + "desc": "", + "blockEntries": [ + { + "kind": "field", + "name": "host", + "required": false, + "desc": "Hostname and port of Consul.", + "fieldValue": null, + "fieldDefaultValue": "localhost:8500", + "fieldFlag": "ruler.ring.consul.hostname", + "fieldType": "string" + }, + { + "kind": "field", + "name": "acl_token", + "required": false, + "desc": "ACL Token used to interact with Consul.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "ruler.ring.consul.acl-token", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "http_client_timeout", + "required": false, + "desc": "HTTP timeout when talking to Consul", + "fieldValue": null, + "fieldDefaultValue": 20000000000, + "fieldFlag": "ruler.ring.consul.client-timeout", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "consistent_reads", + "required": false, + "desc": "Enable consistent reads to Consul.", + "fieldValue": null, + "fieldDefaultValue": false, + "fieldFlag": "ruler.ring.consul.consistent-reads", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "watch_rate_limit", + "required": false, + "desc": "Rate limit when watching key or prefix in Consul, in requests per second. 0 disables the rate limit.", + "fieldValue": null, + "fieldDefaultValue": 1, + "fieldFlag": "ruler.ring.consul.watch-rate-limit", + "fieldType": "float", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "watch_burst_size", + "required": false, + "desc": "Burst size used in rate limit. Values less than 1 are treated as 1.", + "fieldValue": null, + "fieldDefaultValue": 1, + "fieldFlag": "ruler.ring.consul.watch-burst-size", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "cas_retry_delay", + "required": false, + "desc": "Maximum duration to wait before retrying a Compare And Swap (CAS) operation.", + "fieldValue": null, + "fieldDefaultValue": 1000000000, + "fieldFlag": "ruler.ring.consul.cas-retry-delay", + "fieldType": "duration", + "fieldCategory": "advanced" + } + ], + "fieldValue": null, + "fieldDefaultValue": null + }, + { + "kind": "block", + "name": "etcd", + "required": false, + "desc": "", + "blockEntries": [ + { + "kind": "field", + "name": "endpoints", + "required": false, + "desc": "The etcd endpoints to connect to.", + "fieldValue": null, + "fieldDefaultValue": [], + "fieldFlag": "ruler.ring.etcd.endpoints", + "fieldType": "list of strings" + }, + { + "kind": "field", + "name": "dial_timeout", + "required": false, + "desc": "The dial timeout for the etcd connection.", + "fieldValue": null, + "fieldDefaultValue": 10000000000, + "fieldFlag": "ruler.ring.etcd.dial-timeout", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "max_retries", + "required": false, + "desc": "The maximum number of retries to do for failed ops.", + "fieldValue": null, + "fieldDefaultValue": 10, + "fieldFlag": "ruler.ring.etcd.max-retries", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_enabled", + "required": false, + "desc": "Enable TLS.", + "fieldValue": null, + "fieldDefaultValue": false, + "fieldFlag": "ruler.ring.etcd.tls-enabled", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_cert_path", + "required": false, + "desc": "Path to the client certificate, which will be used for authenticating with the server. Also requires the key path to be configured.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "ruler.ring.etcd.tls-cert-path", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_key_path", + "required": false, + "desc": "Path to the key for the client certificate. Also requires the client certificate to be configured.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "ruler.ring.etcd.tls-key-path", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_ca_path", + "required": false, + "desc": "Path to the CA certificates to validate server certificate against. If not set, the host's root CA certificates are used.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "ruler.ring.etcd.tls-ca-path", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_server_name", + "required": false, + "desc": "Override the expected name on the server certificate.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "ruler.ring.etcd.tls-server-name", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_insecure_skip_verify", + "required": false, + "desc": "Skip validating server certificate.", + "fieldValue": null, + "fieldDefaultValue": false, + "fieldFlag": "ruler.ring.etcd.tls-insecure-skip-verify", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_cipher_suites", + "required": false, + "desc": "Override the default cipher suite list (separated by commas). Allowed values:\n\nSecure Ciphers:\n- TLS_AES_128_GCM_SHA256\n- TLS_AES_256_GCM_SHA384\n- TLS_CHACHA20_POLY1305_SHA256\n- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA\n- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA\n- TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256\n- TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256\n- TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256\n- TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256\n\nInsecure Ciphers:\n- TLS_RSA_WITH_RC4_128_SHA\n- TLS_RSA_WITH_3DES_EDE_CBC_SHA\n- TLS_RSA_WITH_AES_128_CBC_SHA\n- TLS_RSA_WITH_AES_256_CBC_SHA\n- TLS_RSA_WITH_AES_128_CBC_SHA256\n- TLS_RSA_WITH_AES_128_GCM_SHA256\n- TLS_RSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_ECDSA_WITH_RC4_128_SHA\n- TLS_ECDHE_RSA_WITH_RC4_128_SHA\n- TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256\n- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256\n", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "ruler.ring.etcd.tls-cipher-suites", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_min_version", + "required": false, + "desc": "Override the default minimum TLS version. Allowed values: VersionTLS10, VersionTLS11, VersionTLS12, VersionTLS13", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "ruler.ring.etcd.tls-min-version", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "username", + "required": false, + "desc": "Etcd username.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "ruler.ring.etcd.username", + "fieldType": "string" + }, + { + "kind": "field", + "name": "password", + "required": false, + "desc": "Etcd password.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "ruler.ring.etcd.password", + "fieldType": "string" + } + ], + "fieldValue": null, + "fieldDefaultValue": null }, { "kind": "block", - "name": "consul", + "name": "memberlist", "required": false, "desc": "", "blockEntries": [ { "kind": "field", - "name": "host", + "name": "node_name", "required": false, - "desc": "Hostname and port of Consul.", + "desc": "Name of the node in memberlist cluster. Defaults to hostname.", "fieldValue": null, - "fieldDefaultValue": "localhost:8500", - "fieldFlag": "ruler.ring.consul.hostname", + "fieldDefaultValue": "", + "fieldFlag": "ruler.ring.memberlist.nodename", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "randomize_node_name", + "required": false, + "desc": "Add random suffix to the node name.", + "fieldValue": null, + "fieldDefaultValue": true, + "fieldFlag": "ruler.ring.memberlist.randomize-node-name", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "stream_timeout", + "required": false, + "desc": "The timeout for establishing a connection with a remote node, and for read/write operations.", + "fieldValue": null, + "fieldDefaultValue": 2000000000, + "fieldFlag": "ruler.ring.memberlist.stream-timeout", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "retransmit_factor", + "required": false, + "desc": "Multiplication factor used when sending out messages (factor * log(N+1)).", + "fieldValue": null, + "fieldDefaultValue": 4, + "fieldFlag": "ruler.ring.memberlist.retransmit-factor", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "pull_push_interval", + "required": false, + "desc": "How often to use pull/push sync.", + "fieldValue": null, + "fieldDefaultValue": 30000000000, + "fieldFlag": "ruler.ring.memberlist.pullpush-interval", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "gossip_interval", + "required": false, + "desc": "How often to gossip.", + "fieldValue": null, + "fieldDefaultValue": 200000000, + "fieldFlag": "ruler.ring.memberlist.gossip-interval", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "gossip_nodes", + "required": false, + "desc": "How many nodes to gossip to.", + "fieldValue": null, + "fieldDefaultValue": 3, + "fieldFlag": "ruler.ring.memberlist.gossip-nodes", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "gossip_to_dead_nodes_time", + "required": false, + "desc": "How long to keep gossiping to dead nodes, to give them chance to refute their death.", + "fieldValue": null, + "fieldDefaultValue": 30000000000, + "fieldFlag": "ruler.ring.memberlist.gossip-to-dead-nodes-time", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "dead_node_reclaim_time", + "required": false, + "desc": "How soon can dead node's name be reclaimed with new address. 0 to disable.", + "fieldValue": null, + "fieldDefaultValue": 0, + "fieldFlag": "ruler.ring.memberlist.dead-node-reclaim-time", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "compression_enabled", + "required": false, + "desc": "Enable message compression. This can be used to reduce bandwidth usage at the cost of slightly more CPU utilization.", + "fieldValue": null, + "fieldDefaultValue": true, + "fieldFlag": "ruler.ring.memberlist.compression-enabled", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "notify_interval", + "required": false, + "desc": "How frequently to notify watchers when a key changes. Can reduce CPU activity in large memberlist deployments. 0 to notify without delay.", + "fieldValue": null, + "fieldDefaultValue": 0, + "fieldFlag": "ruler.ring.memberlist.notify-interval", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "advertise_addr", + "required": false, + "desc": "Gossip address to advertise to other members in the cluster. Used for NAT traversal.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "ruler.ring.memberlist.advertise-addr", "fieldType": "string" }, { "kind": "field", - "name": "acl_token", + "name": "advertise_port", "required": false, - "desc": "ACL Token used to interact with Consul.", + "desc": "Gossip port to advertise to other members in the cluster. Used for NAT traversal.", + "fieldValue": null, + "fieldDefaultValue": 7946, + "fieldFlag": "ruler.ring.memberlist.advertise-port", + "fieldType": "int" + }, + { + "kind": "field", + "name": "cluster_label", + "required": false, + "desc": "The cluster label is an optional string to include in outbound packets and gossip streams. Other members in the memberlist cluster will discard any message whose label doesn't match the configured one, unless the 'cluster-label-verification-disabled' configuration option is set to true.", "fieldValue": null, "fieldDefaultValue": "", - "fieldFlag": "ruler.ring.consul.acl-token", + "fieldFlag": "ruler.ring.memberlist.cluster-label", "fieldType": "string", "fieldCategory": "advanced" }, { "kind": "field", - "name": "http_client_timeout", + "name": "cluster_label_verification_disabled", "required": false, - "desc": "HTTP timeout when talking to Consul", + "desc": "When true, memberlist doesn't verify that inbound packets and gossip streams have the cluster label matching the configured one. This verification should be disabled while rolling out the change to the configured cluster label in a live memberlist cluster.", "fieldValue": null, - "fieldDefaultValue": 20000000000, - "fieldFlag": "ruler.ring.consul.client-timeout", + "fieldDefaultValue": false, + "fieldFlag": "ruler.ring.memberlist.cluster-label-verification-disabled", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "join_members", + "required": false, + "desc": "Other cluster members to join. Can be specified multiple times. It can be an IP, hostname or an entry specified in the DNS Service Discovery format.", + "fieldValue": null, + "fieldDefaultValue": [], + "fieldFlag": "ruler.ring.memberlist.join", + "fieldType": "list of strings" + }, + { + "kind": "field", + "name": "min_join_backoff", + "required": false, + "desc": "Min backoff duration to join other cluster members.", + "fieldValue": null, + "fieldDefaultValue": 1000000000, + "fieldFlag": "ruler.ring.memberlist.min-join-backoff", "fieldType": "duration", "fieldCategory": "advanced" }, { "kind": "field", - "name": "consistent_reads", + "name": "max_join_backoff", "required": false, - "desc": "Enable consistent reads to Consul.", + "desc": "Max backoff duration to join other cluster members.", + "fieldValue": null, + "fieldDefaultValue": 60000000000, + "fieldFlag": "ruler.ring.memberlist.max-join-backoff", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "max_join_retries", + "required": false, + "desc": "Max number of retries to join other cluster members.", + "fieldValue": null, + "fieldDefaultValue": 10, + "fieldFlag": "ruler.ring.memberlist.max-join-retries", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "abort_if_cluster_join_fails", + "required": false, + "desc": "If this node fails to join memberlist cluster, abort.", "fieldValue": null, "fieldDefaultValue": false, - "fieldFlag": "ruler.ring.consul.consistent-reads", - "fieldType": "boolean", + "fieldFlag": "ruler.ring.memberlist.abort-if-join-fails", + "fieldType": "boolean" + }, + { + "kind": "field", + "name": "rejoin_interval", + "required": false, + "desc": "If not 0, how often to rejoin the cluster. Occasional rejoin can help to fix the cluster split issue, and is harmless otherwise. For example when using only few components as a seed nodes (via -memberlist.join), then it's recommended to use rejoin. If -memberlist.join points to dynamic service that resolves to all gossiping nodes (eg. Kubernetes headless service), then rejoin is not needed.", + "fieldValue": null, + "fieldDefaultValue": 0, + "fieldFlag": "ruler.ring.memberlist.rejoin-interval", + "fieldType": "duration", "fieldCategory": "advanced" }, { "kind": "field", - "name": "watch_rate_limit", + "name": "left_ingesters_timeout", "required": false, - "desc": "Rate limit when watching key or prefix in Consul, in requests per second. 0 disables the rate limit.", + "desc": "How long to keep LEFT ingesters in the ring.", "fieldValue": null, - "fieldDefaultValue": 1, - "fieldFlag": "ruler.ring.consul.watch-rate-limit", - "fieldType": "float", + "fieldDefaultValue": 300000000000, + "fieldFlag": "ruler.ring.memberlist.left-ingesters-timeout", + "fieldType": "duration", "fieldCategory": "advanced" }, { "kind": "field", - "name": "watch_burst_size", + "name": "leave_timeout", + "required": false, + "desc": "Timeout for leaving memberlist cluster.", + "fieldValue": null, + "fieldDefaultValue": 20000000000, + "fieldFlag": "ruler.ring.memberlist.leave-timeout", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "broadcast_timeout_for_local_updates_on_shutdown", + "required": false, + "desc": "Timeout for broadcasting all remaining locally-generated updates to other nodes when shutting down. Only used if there are nodes left in the memberlist cluster, and only applies to locally-generated updates, not to broadcast messages that are result of incoming gossip updates. 0 = no timeout, wait until all locally-generated updates are sent.", + "fieldValue": null, + "fieldDefaultValue": 10000000000, + "fieldFlag": "ruler.ring.memberlist.broadcast-timeout-for-local-updates-on-shutdown", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "message_history_buffer_bytes", + "required": false, + "desc": "How much space to use for keeping received and sent messages in memory for troubleshooting (two buffers). 0 to disable.", + "fieldValue": null, + "fieldDefaultValue": 0, + "fieldFlag": "ruler.ring.memberlist.message-history-buffer-bytes", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "bind_addr", + "required": false, + "desc": "IP address to listen on for gossip messages. Multiple addresses may be specified. Defaults to 0.0.0.0", + "fieldValue": null, + "fieldDefaultValue": [], + "fieldFlag": "ruler.ring.memberlist.bind-addr", + "fieldType": "list of strings" + }, + { + "kind": "field", + "name": "bind_port", "required": false, - "desc": "Burst size used in rate limit. Values less than 1 are treated as 1.", + "desc": "Port to listen on for gossip messages.", "fieldValue": null, - "fieldDefaultValue": 1, - "fieldFlag": "ruler.ring.consul.watch-burst-size", - "fieldType": "int", - "fieldCategory": "advanced" + "fieldDefaultValue": 7946, + "fieldFlag": "ruler.ring.memberlist.bind-port", + "fieldType": "int" }, { "kind": "field", - "name": "cas_retry_delay", + "name": "packet_dial_timeout", "required": false, - "desc": "Maximum duration to wait before retrying a Compare And Swap (CAS) operation.", + "desc": "Timeout used when connecting to other nodes to send packet.", "fieldValue": null, - "fieldDefaultValue": 1000000000, - "fieldFlag": "ruler.ring.consul.cas-retry-delay", + "fieldDefaultValue": 2000000000, + "fieldFlag": "ruler.ring.memberlist.packet-dial-timeout", "fieldType": "duration", "fieldCategory": "advanced" - } - ], - "fieldValue": null, - "fieldDefaultValue": null - }, - { - "kind": "block", - "name": "etcd", - "required": false, - "desc": "", - "blockEntries": [ + }, { "kind": "field", - "name": "endpoints", + "name": "packet_write_timeout", "required": false, - "desc": "The etcd endpoints to connect to.", + "desc": "Timeout for writing 'packet' data.", "fieldValue": null, - "fieldDefaultValue": [], - "fieldFlag": "ruler.ring.etcd.endpoints", - "fieldType": "list of strings" + "fieldDefaultValue": 5000000000, + "fieldFlag": "ruler.ring.memberlist.packet-write-timeout", + "fieldType": "duration", + "fieldCategory": "advanced" }, { "kind": "field", - "name": "dial_timeout", + "name": "max_concurrent_writes", "required": false, - "desc": "The dial timeout for the etcd connection.", + "desc": "Maximum number of concurrent writes to other nodes.", "fieldValue": null, - "fieldDefaultValue": 10000000000, - "fieldFlag": "ruler.ring.etcd.dial-timeout", - "fieldType": "duration", + "fieldDefaultValue": 3, + "fieldFlag": "ruler.ring.memberlist.max-concurrent-writes", + "fieldType": "int", "fieldCategory": "advanced" }, { "kind": "field", - "name": "max_retries", + "name": "acquire_writer_timeout", "required": false, - "desc": "The maximum number of retries to do for failed ops.", + "desc": "Timeout for acquiring one of the concurrent write slots. After this time, the message will be dropped.", "fieldValue": null, - "fieldDefaultValue": 10, - "fieldFlag": "ruler.ring.etcd.max-retries", - "fieldType": "int", + "fieldDefaultValue": 250000000, + "fieldFlag": "ruler.ring.memberlist.acquire-writer-timeout", + "fieldType": "duration", "fieldCategory": "advanced" }, { "kind": "field", "name": "tls_enabled", "required": false, - "desc": "Enable TLS.", + "desc": "Enable TLS on the memberlist transport layer.", "fieldValue": null, "fieldDefaultValue": false, - "fieldFlag": "ruler.ring.etcd.tls-enabled", + "fieldFlag": "ruler.ring.memberlist.tls-enabled", "fieldType": "boolean", "fieldCategory": "advanced" }, @@ -12549,7 +15600,7 @@ "desc": "Path to the client certificate, which will be used for authenticating with the server. Also requires the key path to be configured.", "fieldValue": null, "fieldDefaultValue": "", - "fieldFlag": "ruler.ring.etcd.tls-cert-path", + "fieldFlag": "ruler.ring.memberlist.tls-cert-path", "fieldType": "string", "fieldCategory": "advanced" }, @@ -12560,7 +15611,7 @@ "desc": "Path to the key for the client certificate. Also requires the client certificate to be configured.", "fieldValue": null, "fieldDefaultValue": "", - "fieldFlag": "ruler.ring.etcd.tls-key-path", + "fieldFlag": "ruler.ring.memberlist.tls-key-path", "fieldType": "string", "fieldCategory": "advanced" }, @@ -12571,7 +15622,7 @@ "desc": "Path to the CA certificates to validate server certificate against. If not set, the host's root CA certificates are used.", "fieldValue": null, "fieldDefaultValue": "", - "fieldFlag": "ruler.ring.etcd.tls-ca-path", + "fieldFlag": "ruler.ring.memberlist.tls-ca-path", "fieldType": "string", "fieldCategory": "advanced" }, @@ -12582,7 +15633,7 @@ "desc": "Override the expected name on the server certificate.", "fieldValue": null, "fieldDefaultValue": "", - "fieldFlag": "ruler.ring.etcd.tls-server-name", + "fieldFlag": "ruler.ring.memberlist.tls-server-name", "fieldType": "string", "fieldCategory": "advanced" }, @@ -12593,7 +15644,7 @@ "desc": "Skip validating server certificate.", "fieldValue": null, "fieldDefaultValue": false, - "fieldFlag": "ruler.ring.etcd.tls-insecure-skip-verify", + "fieldFlag": "ruler.ring.memberlist.tls-insecure-skip-verify", "fieldType": "boolean", "fieldCategory": "advanced" }, @@ -12604,7 +15655,7 @@ "desc": "Override the default cipher suite list (separated by commas). Allowed values:\n\nSecure Ciphers:\n- TLS_AES_128_GCM_SHA256\n- TLS_AES_256_GCM_SHA384\n- TLS_CHACHA20_POLY1305_SHA256\n- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA\n- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA\n- TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256\n- TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256\n- TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256\n- TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256\n\nInsecure Ciphers:\n- TLS_RSA_WITH_RC4_128_SHA\n- TLS_RSA_WITH_3DES_EDE_CBC_SHA\n- TLS_RSA_WITH_AES_128_CBC_SHA\n- TLS_RSA_WITH_AES_256_CBC_SHA\n- TLS_RSA_WITH_AES_128_CBC_SHA256\n- TLS_RSA_WITH_AES_128_GCM_SHA256\n- TLS_RSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_ECDSA_WITH_RC4_128_SHA\n- TLS_ECDHE_RSA_WITH_RC4_128_SHA\n- TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256\n- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256\n", "fieldValue": null, "fieldDefaultValue": "", - "fieldFlag": "ruler.ring.etcd.tls-cipher-suites", + "fieldFlag": "ruler.ring.memberlist.tls-cipher-suites", "fieldType": "string", "fieldCategory": "advanced" }, @@ -12615,29 +15666,9 @@ "desc": "Override the default minimum TLS version. Allowed values: VersionTLS10, VersionTLS11, VersionTLS12, VersionTLS13", "fieldValue": null, "fieldDefaultValue": "", - "fieldFlag": "ruler.ring.etcd.tls-min-version", + "fieldFlag": "ruler.ring.memberlist.tls-min-version", "fieldType": "string", "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "username", - "required": false, - "desc": "Etcd username.", - "fieldValue": null, - "fieldDefaultValue": "", - "fieldFlag": "ruler.ring.etcd.username", - "fieldType": "string" - }, - { - "kind": "field", - "name": "password", - "required": false, - "desc": "Etcd password.", - "fieldValue": null, - "fieldDefaultValue": "", - "fieldFlag": "ruler.ring.etcd.password", - "fieldType": "string" } ], "fieldValue": null, @@ -14930,143 +17961,596 @@ "required": false, "desc": "The prefix for the keys in the store. Should end with a /.", "fieldValue": null, - "fieldDefaultValue": "alertmanagers/", - "fieldFlag": "alertmanager.sharding-ring.prefix", - "fieldType": "string", - "fieldCategory": "advanced" + "fieldDefaultValue": "alertmanagers/", + "fieldFlag": "alertmanager.sharding-ring.prefix", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "block", + "name": "consul", + "required": false, + "desc": "", + "blockEntries": [ + { + "kind": "field", + "name": "host", + "required": false, + "desc": "Hostname and port of Consul.", + "fieldValue": null, + "fieldDefaultValue": "localhost:8500", + "fieldFlag": "alertmanager.sharding-ring.consul.hostname", + "fieldType": "string" + }, + { + "kind": "field", + "name": "acl_token", + "required": false, + "desc": "ACL Token used to interact with Consul.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "alertmanager.sharding-ring.consul.acl-token", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "http_client_timeout", + "required": false, + "desc": "HTTP timeout when talking to Consul", + "fieldValue": null, + "fieldDefaultValue": 20000000000, + "fieldFlag": "alertmanager.sharding-ring.consul.client-timeout", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "consistent_reads", + "required": false, + "desc": "Enable consistent reads to Consul.", + "fieldValue": null, + "fieldDefaultValue": false, + "fieldFlag": "alertmanager.sharding-ring.consul.consistent-reads", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "watch_rate_limit", + "required": false, + "desc": "Rate limit when watching key or prefix in Consul, in requests per second. 0 disables the rate limit.", + "fieldValue": null, + "fieldDefaultValue": 1, + "fieldFlag": "alertmanager.sharding-ring.consul.watch-rate-limit", + "fieldType": "float", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "watch_burst_size", + "required": false, + "desc": "Burst size used in rate limit. Values less than 1 are treated as 1.", + "fieldValue": null, + "fieldDefaultValue": 1, + "fieldFlag": "alertmanager.sharding-ring.consul.watch-burst-size", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "cas_retry_delay", + "required": false, + "desc": "Maximum duration to wait before retrying a Compare And Swap (CAS) operation.", + "fieldValue": null, + "fieldDefaultValue": 1000000000, + "fieldFlag": "alertmanager.sharding-ring.consul.cas-retry-delay", + "fieldType": "duration", + "fieldCategory": "advanced" + } + ], + "fieldValue": null, + "fieldDefaultValue": null + }, + { + "kind": "block", + "name": "etcd", + "required": false, + "desc": "", + "blockEntries": [ + { + "kind": "field", + "name": "endpoints", + "required": false, + "desc": "The etcd endpoints to connect to.", + "fieldValue": null, + "fieldDefaultValue": [], + "fieldFlag": "alertmanager.sharding-ring.etcd.endpoints", + "fieldType": "list of strings" + }, + { + "kind": "field", + "name": "dial_timeout", + "required": false, + "desc": "The dial timeout for the etcd connection.", + "fieldValue": null, + "fieldDefaultValue": 10000000000, + "fieldFlag": "alertmanager.sharding-ring.etcd.dial-timeout", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "max_retries", + "required": false, + "desc": "The maximum number of retries to do for failed ops.", + "fieldValue": null, + "fieldDefaultValue": 10, + "fieldFlag": "alertmanager.sharding-ring.etcd.max-retries", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_enabled", + "required": false, + "desc": "Enable TLS.", + "fieldValue": null, + "fieldDefaultValue": false, + "fieldFlag": "alertmanager.sharding-ring.etcd.tls-enabled", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_cert_path", + "required": false, + "desc": "Path to the client certificate, which will be used for authenticating with the server. Also requires the key path to be configured.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "alertmanager.sharding-ring.etcd.tls-cert-path", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_key_path", + "required": false, + "desc": "Path to the key for the client certificate. Also requires the client certificate to be configured.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "alertmanager.sharding-ring.etcd.tls-key-path", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_ca_path", + "required": false, + "desc": "Path to the CA certificates to validate server certificate against. If not set, the host's root CA certificates are used.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "alertmanager.sharding-ring.etcd.tls-ca-path", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_server_name", + "required": false, + "desc": "Override the expected name on the server certificate.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "alertmanager.sharding-ring.etcd.tls-server-name", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_insecure_skip_verify", + "required": false, + "desc": "Skip validating server certificate.", + "fieldValue": null, + "fieldDefaultValue": false, + "fieldFlag": "alertmanager.sharding-ring.etcd.tls-insecure-skip-verify", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_cipher_suites", + "required": false, + "desc": "Override the default cipher suite list (separated by commas). Allowed values:\n\nSecure Ciphers:\n- TLS_AES_128_GCM_SHA256\n- TLS_AES_256_GCM_SHA384\n- TLS_CHACHA20_POLY1305_SHA256\n- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA\n- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA\n- TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256\n- TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256\n- TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256\n- TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256\n\nInsecure Ciphers:\n- TLS_RSA_WITH_RC4_128_SHA\n- TLS_RSA_WITH_3DES_EDE_CBC_SHA\n- TLS_RSA_WITH_AES_128_CBC_SHA\n- TLS_RSA_WITH_AES_256_CBC_SHA\n- TLS_RSA_WITH_AES_128_CBC_SHA256\n- TLS_RSA_WITH_AES_128_GCM_SHA256\n- TLS_RSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_ECDSA_WITH_RC4_128_SHA\n- TLS_ECDHE_RSA_WITH_RC4_128_SHA\n- TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256\n- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256\n", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "alertmanager.sharding-ring.etcd.tls-cipher-suites", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_min_version", + "required": false, + "desc": "Override the default minimum TLS version. Allowed values: VersionTLS10, VersionTLS11, VersionTLS12, VersionTLS13", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "alertmanager.sharding-ring.etcd.tls-min-version", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "username", + "required": false, + "desc": "Etcd username.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "alertmanager.sharding-ring.etcd.username", + "fieldType": "string" + }, + { + "kind": "field", + "name": "password", + "required": false, + "desc": "Etcd password.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "alertmanager.sharding-ring.etcd.password", + "fieldType": "string" + } + ], + "fieldValue": null, + "fieldDefaultValue": null }, { "kind": "block", - "name": "consul", + "name": "memberlist", "required": false, "desc": "", "blockEntries": [ { "kind": "field", - "name": "host", + "name": "node_name", "required": false, - "desc": "Hostname and port of Consul.", + "desc": "Name of the node in memberlist cluster. Defaults to hostname.", "fieldValue": null, - "fieldDefaultValue": "localhost:8500", - "fieldFlag": "alertmanager.sharding-ring.consul.hostname", + "fieldDefaultValue": "", + "fieldFlag": "alertmanager.sharding-ring.memberlist.nodename", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "randomize_node_name", + "required": false, + "desc": "Add random suffix to the node name.", + "fieldValue": null, + "fieldDefaultValue": true, + "fieldFlag": "alertmanager.sharding-ring.memberlist.randomize-node-name", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "stream_timeout", + "required": false, + "desc": "The timeout for establishing a connection with a remote node, and for read/write operations.", + "fieldValue": null, + "fieldDefaultValue": 2000000000, + "fieldFlag": "alertmanager.sharding-ring.memberlist.stream-timeout", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "retransmit_factor", + "required": false, + "desc": "Multiplication factor used when sending out messages (factor * log(N+1)).", + "fieldValue": null, + "fieldDefaultValue": 4, + "fieldFlag": "alertmanager.sharding-ring.memberlist.retransmit-factor", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "pull_push_interval", + "required": false, + "desc": "How often to use pull/push sync.", + "fieldValue": null, + "fieldDefaultValue": 30000000000, + "fieldFlag": "alertmanager.sharding-ring.memberlist.pullpush-interval", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "gossip_interval", + "required": false, + "desc": "How often to gossip.", + "fieldValue": null, + "fieldDefaultValue": 200000000, + "fieldFlag": "alertmanager.sharding-ring.memberlist.gossip-interval", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "gossip_nodes", + "required": false, + "desc": "How many nodes to gossip to.", + "fieldValue": null, + "fieldDefaultValue": 3, + "fieldFlag": "alertmanager.sharding-ring.memberlist.gossip-nodes", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "gossip_to_dead_nodes_time", + "required": false, + "desc": "How long to keep gossiping to dead nodes, to give them chance to refute their death.", + "fieldValue": null, + "fieldDefaultValue": 30000000000, + "fieldFlag": "alertmanager.sharding-ring.memberlist.gossip-to-dead-nodes-time", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "dead_node_reclaim_time", + "required": false, + "desc": "How soon can dead node's name be reclaimed with new address. 0 to disable.", + "fieldValue": null, + "fieldDefaultValue": 0, + "fieldFlag": "alertmanager.sharding-ring.memberlist.dead-node-reclaim-time", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "compression_enabled", + "required": false, + "desc": "Enable message compression. This can be used to reduce bandwidth usage at the cost of slightly more CPU utilization.", + "fieldValue": null, + "fieldDefaultValue": true, + "fieldFlag": "alertmanager.sharding-ring.memberlist.compression-enabled", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "notify_interval", + "required": false, + "desc": "How frequently to notify watchers when a key changes. Can reduce CPU activity in large memberlist deployments. 0 to notify without delay.", + "fieldValue": null, + "fieldDefaultValue": 0, + "fieldFlag": "alertmanager.sharding-ring.memberlist.notify-interval", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "advertise_addr", + "required": false, + "desc": "Gossip address to advertise to other members in the cluster. Used for NAT traversal.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "alertmanager.sharding-ring.memberlist.advertise-addr", "fieldType": "string" }, { "kind": "field", - "name": "acl_token", + "name": "advertise_port", "required": false, - "desc": "ACL Token used to interact with Consul.", + "desc": "Gossip port to advertise to other members in the cluster. Used for NAT traversal.", + "fieldValue": null, + "fieldDefaultValue": 7946, + "fieldFlag": "alertmanager.sharding-ring.memberlist.advertise-port", + "fieldType": "int" + }, + { + "kind": "field", + "name": "cluster_label", + "required": false, + "desc": "The cluster label is an optional string to include in outbound packets and gossip streams. Other members in the memberlist cluster will discard any message whose label doesn't match the configured one, unless the 'cluster-label-verification-disabled' configuration option is set to true.", "fieldValue": null, "fieldDefaultValue": "", - "fieldFlag": "alertmanager.sharding-ring.consul.acl-token", + "fieldFlag": "alertmanager.sharding-ring.memberlist.cluster-label", "fieldType": "string", "fieldCategory": "advanced" }, { "kind": "field", - "name": "http_client_timeout", + "name": "cluster_label_verification_disabled", "required": false, - "desc": "HTTP timeout when talking to Consul", + "desc": "When true, memberlist doesn't verify that inbound packets and gossip streams have the cluster label matching the configured one. This verification should be disabled while rolling out the change to the configured cluster label in a live memberlist cluster.", "fieldValue": null, - "fieldDefaultValue": 20000000000, - "fieldFlag": "alertmanager.sharding-ring.consul.client-timeout", + "fieldDefaultValue": false, + "fieldFlag": "alertmanager.sharding-ring.memberlist.cluster-label-verification-disabled", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "join_members", + "required": false, + "desc": "Other cluster members to join. Can be specified multiple times. It can be an IP, hostname or an entry specified in the DNS Service Discovery format.", + "fieldValue": null, + "fieldDefaultValue": [], + "fieldFlag": "alertmanager.sharding-ring.memberlist.join", + "fieldType": "list of strings" + }, + { + "kind": "field", + "name": "min_join_backoff", + "required": false, + "desc": "Min backoff duration to join other cluster members.", + "fieldValue": null, + "fieldDefaultValue": 1000000000, + "fieldFlag": "alertmanager.sharding-ring.memberlist.min-join-backoff", "fieldType": "duration", "fieldCategory": "advanced" }, { "kind": "field", - "name": "consistent_reads", + "name": "max_join_backoff", "required": false, - "desc": "Enable consistent reads to Consul.", + "desc": "Max backoff duration to join other cluster members.", + "fieldValue": null, + "fieldDefaultValue": 60000000000, + "fieldFlag": "alertmanager.sharding-ring.memberlist.max-join-backoff", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "max_join_retries", + "required": false, + "desc": "Max number of retries to join other cluster members.", + "fieldValue": null, + "fieldDefaultValue": 10, + "fieldFlag": "alertmanager.sharding-ring.memberlist.max-join-retries", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "abort_if_cluster_join_fails", + "required": false, + "desc": "If this node fails to join memberlist cluster, abort.", "fieldValue": null, "fieldDefaultValue": false, - "fieldFlag": "alertmanager.sharding-ring.consul.consistent-reads", - "fieldType": "boolean", + "fieldFlag": "alertmanager.sharding-ring.memberlist.abort-if-join-fails", + "fieldType": "boolean" + }, + { + "kind": "field", + "name": "rejoin_interval", + "required": false, + "desc": "If not 0, how often to rejoin the cluster. Occasional rejoin can help to fix the cluster split issue, and is harmless otherwise. For example when using only few components as a seed nodes (via -memberlist.join), then it's recommended to use rejoin. If -memberlist.join points to dynamic service that resolves to all gossiping nodes (eg. Kubernetes headless service), then rejoin is not needed.", + "fieldValue": null, + "fieldDefaultValue": 0, + "fieldFlag": "alertmanager.sharding-ring.memberlist.rejoin-interval", + "fieldType": "duration", "fieldCategory": "advanced" }, { "kind": "field", - "name": "watch_rate_limit", + "name": "left_ingesters_timeout", "required": false, - "desc": "Rate limit when watching key or prefix in Consul, in requests per second. 0 disables the rate limit.", + "desc": "How long to keep LEFT ingesters in the ring.", "fieldValue": null, - "fieldDefaultValue": 1, - "fieldFlag": "alertmanager.sharding-ring.consul.watch-rate-limit", - "fieldType": "float", + "fieldDefaultValue": 300000000000, + "fieldFlag": "alertmanager.sharding-ring.memberlist.left-ingesters-timeout", + "fieldType": "duration", "fieldCategory": "advanced" }, { "kind": "field", - "name": "watch_burst_size", + "name": "leave_timeout", "required": false, - "desc": "Burst size used in rate limit. Values less than 1 are treated as 1.", + "desc": "Timeout for leaving memberlist cluster.", "fieldValue": null, - "fieldDefaultValue": 1, - "fieldFlag": "alertmanager.sharding-ring.consul.watch-burst-size", - "fieldType": "int", + "fieldDefaultValue": 20000000000, + "fieldFlag": "alertmanager.sharding-ring.memberlist.leave-timeout", + "fieldType": "duration", "fieldCategory": "advanced" }, { "kind": "field", - "name": "cas_retry_delay", + "name": "broadcast_timeout_for_local_updates_on_shutdown", "required": false, - "desc": "Maximum duration to wait before retrying a Compare And Swap (CAS) operation.", + "desc": "Timeout for broadcasting all remaining locally-generated updates to other nodes when shutting down. Only used if there are nodes left in the memberlist cluster, and only applies to locally-generated updates, not to broadcast messages that are result of incoming gossip updates. 0 = no timeout, wait until all locally-generated updates are sent.", "fieldValue": null, - "fieldDefaultValue": 1000000000, - "fieldFlag": "alertmanager.sharding-ring.consul.cas-retry-delay", + "fieldDefaultValue": 10000000000, + "fieldFlag": "alertmanager.sharding-ring.memberlist.broadcast-timeout-for-local-updates-on-shutdown", "fieldType": "duration", "fieldCategory": "advanced" - } - ], - "fieldValue": null, - "fieldDefaultValue": null - }, - { - "kind": "block", - "name": "etcd", - "required": false, - "desc": "", - "blockEntries": [ + }, { "kind": "field", - "name": "endpoints", + "name": "message_history_buffer_bytes", "required": false, - "desc": "The etcd endpoints to connect to.", + "desc": "How much space to use for keeping received and sent messages in memory for troubleshooting (two buffers). 0 to disable.", + "fieldValue": null, + "fieldDefaultValue": 0, + "fieldFlag": "alertmanager.sharding-ring.memberlist.message-history-buffer-bytes", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "bind_addr", + "required": false, + "desc": "IP address to listen on for gossip messages. Multiple addresses may be specified. Defaults to 0.0.0.0", "fieldValue": null, "fieldDefaultValue": [], - "fieldFlag": "alertmanager.sharding-ring.etcd.endpoints", + "fieldFlag": "alertmanager.sharding-ring.memberlist.bind-addr", "fieldType": "list of strings" }, { "kind": "field", - "name": "dial_timeout", + "name": "bind_port", + "required": false, + "desc": "Port to listen on for gossip messages.", + "fieldValue": null, + "fieldDefaultValue": 7946, + "fieldFlag": "alertmanager.sharding-ring.memberlist.bind-port", + "fieldType": "int" + }, + { + "kind": "field", + "name": "packet_dial_timeout", + "required": false, + "desc": "Timeout used when connecting to other nodes to send packet.", + "fieldValue": null, + "fieldDefaultValue": 2000000000, + "fieldFlag": "alertmanager.sharding-ring.memberlist.packet-dial-timeout", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "packet_write_timeout", "required": false, - "desc": "The dial timeout for the etcd connection.", + "desc": "Timeout for writing 'packet' data.", "fieldValue": null, - "fieldDefaultValue": 10000000000, - "fieldFlag": "alertmanager.sharding-ring.etcd.dial-timeout", + "fieldDefaultValue": 5000000000, + "fieldFlag": "alertmanager.sharding-ring.memberlist.packet-write-timeout", "fieldType": "duration", "fieldCategory": "advanced" }, { "kind": "field", - "name": "max_retries", + "name": "max_concurrent_writes", "required": false, - "desc": "The maximum number of retries to do for failed ops.", + "desc": "Maximum number of concurrent writes to other nodes.", "fieldValue": null, - "fieldDefaultValue": 10, - "fieldFlag": "alertmanager.sharding-ring.etcd.max-retries", + "fieldDefaultValue": 3, + "fieldFlag": "alertmanager.sharding-ring.memberlist.max-concurrent-writes", "fieldType": "int", "fieldCategory": "advanced" }, + { + "kind": "field", + "name": "acquire_writer_timeout", + "required": false, + "desc": "Timeout for acquiring one of the concurrent write slots. After this time, the message will be dropped.", + "fieldValue": null, + "fieldDefaultValue": 250000000, + "fieldFlag": "alertmanager.sharding-ring.memberlist.acquire-writer-timeout", + "fieldType": "duration", + "fieldCategory": "advanced" + }, { "kind": "field", "name": "tls_enabled", "required": false, - "desc": "Enable TLS.", + "desc": "Enable TLS on the memberlist transport layer.", "fieldValue": null, "fieldDefaultValue": false, - "fieldFlag": "alertmanager.sharding-ring.etcd.tls-enabled", + "fieldFlag": "alertmanager.sharding-ring.memberlist.tls-enabled", "fieldType": "boolean", "fieldCategory": "advanced" }, @@ -15077,7 +18561,7 @@ "desc": "Path to the client certificate, which will be used for authenticating with the server. Also requires the key path to be configured.", "fieldValue": null, "fieldDefaultValue": "", - "fieldFlag": "alertmanager.sharding-ring.etcd.tls-cert-path", + "fieldFlag": "alertmanager.sharding-ring.memberlist.tls-cert-path", "fieldType": "string", "fieldCategory": "advanced" }, @@ -15088,7 +18572,7 @@ "desc": "Path to the key for the client certificate. Also requires the client certificate to be configured.", "fieldValue": null, "fieldDefaultValue": "", - "fieldFlag": "alertmanager.sharding-ring.etcd.tls-key-path", + "fieldFlag": "alertmanager.sharding-ring.memberlist.tls-key-path", "fieldType": "string", "fieldCategory": "advanced" }, @@ -15099,7 +18583,7 @@ "desc": "Path to the CA certificates to validate server certificate against. If not set, the host's root CA certificates are used.", "fieldValue": null, "fieldDefaultValue": "", - "fieldFlag": "alertmanager.sharding-ring.etcd.tls-ca-path", + "fieldFlag": "alertmanager.sharding-ring.memberlist.tls-ca-path", "fieldType": "string", "fieldCategory": "advanced" }, @@ -15110,7 +18594,7 @@ "desc": "Override the expected name on the server certificate.", "fieldValue": null, "fieldDefaultValue": "", - "fieldFlag": "alertmanager.sharding-ring.etcd.tls-server-name", + "fieldFlag": "alertmanager.sharding-ring.memberlist.tls-server-name", "fieldType": "string", "fieldCategory": "advanced" }, @@ -15121,7 +18605,7 @@ "desc": "Skip validating server certificate.", "fieldValue": null, "fieldDefaultValue": false, - "fieldFlag": "alertmanager.sharding-ring.etcd.tls-insecure-skip-verify", + "fieldFlag": "alertmanager.sharding-ring.memberlist.tls-insecure-skip-verify", "fieldType": "boolean", "fieldCategory": "advanced" }, @@ -15132,7 +18616,7 @@ "desc": "Override the default cipher suite list (separated by commas). Allowed values:\n\nSecure Ciphers:\n- TLS_AES_128_GCM_SHA256\n- TLS_AES_256_GCM_SHA384\n- TLS_CHACHA20_POLY1305_SHA256\n- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA\n- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA\n- TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256\n- TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256\n- TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256\n- TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256\n\nInsecure Ciphers:\n- TLS_RSA_WITH_RC4_128_SHA\n- TLS_RSA_WITH_3DES_EDE_CBC_SHA\n- TLS_RSA_WITH_AES_128_CBC_SHA\n- TLS_RSA_WITH_AES_256_CBC_SHA\n- TLS_RSA_WITH_AES_128_CBC_SHA256\n- TLS_RSA_WITH_AES_128_GCM_SHA256\n- TLS_RSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_ECDSA_WITH_RC4_128_SHA\n- TLS_ECDHE_RSA_WITH_RC4_128_SHA\n- TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256\n- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256\n", "fieldValue": null, "fieldDefaultValue": "", - "fieldFlag": "alertmanager.sharding-ring.etcd.tls-cipher-suites", + "fieldFlag": "alertmanager.sharding-ring.memberlist.tls-cipher-suites", "fieldType": "string", "fieldCategory": "advanced" }, @@ -15143,29 +18627,9 @@ "desc": "Override the default minimum TLS version. Allowed values: VersionTLS10, VersionTLS11, VersionTLS12, VersionTLS13", "fieldValue": null, "fieldDefaultValue": "", - "fieldFlag": "alertmanager.sharding-ring.etcd.tls-min-version", + "fieldFlag": "alertmanager.sharding-ring.memberlist.tls-min-version", "fieldType": "string", "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "username", - "required": false, - "desc": "Etcd username.", - "fieldValue": null, - "fieldDefaultValue": "", - "fieldFlag": "alertmanager.sharding-ring.etcd.username", - "fieldType": "string" - }, - { - "kind": "field", - "name": "password", - "required": false, - "desc": "Etcd password.", - "fieldValue": null, - "fieldDefaultValue": "", - "fieldFlag": "alertmanager.sharding-ring.etcd.password", - "fieldType": "string" } ], "fieldValue": null, @@ -17591,143 +21055,596 @@ "required": false, "desc": "The prefix for the keys in the store. Should end with a /.", "fieldValue": null, - "fieldDefaultValue": "collectors/", - "fieldFlag": "query-scheduler.ring.prefix", - "fieldType": "string", - "fieldCategory": "advanced" + "fieldDefaultValue": "collectors/", + "fieldFlag": "query-scheduler.ring.prefix", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "block", + "name": "consul", + "required": false, + "desc": "", + "blockEntries": [ + { + "kind": "field", + "name": "host", + "required": false, + "desc": "Hostname and port of Consul.", + "fieldValue": null, + "fieldDefaultValue": "localhost:8500", + "fieldFlag": "query-scheduler.ring.consul.hostname", + "fieldType": "string" + }, + { + "kind": "field", + "name": "acl_token", + "required": false, + "desc": "ACL Token used to interact with Consul.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "query-scheduler.ring.consul.acl-token", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "http_client_timeout", + "required": false, + "desc": "HTTP timeout when talking to Consul", + "fieldValue": null, + "fieldDefaultValue": 20000000000, + "fieldFlag": "query-scheduler.ring.consul.client-timeout", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "consistent_reads", + "required": false, + "desc": "Enable consistent reads to Consul.", + "fieldValue": null, + "fieldDefaultValue": false, + "fieldFlag": "query-scheduler.ring.consul.consistent-reads", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "watch_rate_limit", + "required": false, + "desc": "Rate limit when watching key or prefix in Consul, in requests per second. 0 disables the rate limit.", + "fieldValue": null, + "fieldDefaultValue": 1, + "fieldFlag": "query-scheduler.ring.consul.watch-rate-limit", + "fieldType": "float", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "watch_burst_size", + "required": false, + "desc": "Burst size used in rate limit. Values less than 1 are treated as 1.", + "fieldValue": null, + "fieldDefaultValue": 1, + "fieldFlag": "query-scheduler.ring.consul.watch-burst-size", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "cas_retry_delay", + "required": false, + "desc": "Maximum duration to wait before retrying a Compare And Swap (CAS) operation.", + "fieldValue": null, + "fieldDefaultValue": 1000000000, + "fieldFlag": "query-scheduler.ring.consul.cas-retry-delay", + "fieldType": "duration", + "fieldCategory": "advanced" + } + ], + "fieldValue": null, + "fieldDefaultValue": null + }, + { + "kind": "block", + "name": "etcd", + "required": false, + "desc": "", + "blockEntries": [ + { + "kind": "field", + "name": "endpoints", + "required": false, + "desc": "The etcd endpoints to connect to.", + "fieldValue": null, + "fieldDefaultValue": [], + "fieldFlag": "query-scheduler.ring.etcd.endpoints", + "fieldType": "list of strings" + }, + { + "kind": "field", + "name": "dial_timeout", + "required": false, + "desc": "The dial timeout for the etcd connection.", + "fieldValue": null, + "fieldDefaultValue": 10000000000, + "fieldFlag": "query-scheduler.ring.etcd.dial-timeout", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "max_retries", + "required": false, + "desc": "The maximum number of retries to do for failed ops.", + "fieldValue": null, + "fieldDefaultValue": 10, + "fieldFlag": "query-scheduler.ring.etcd.max-retries", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_enabled", + "required": false, + "desc": "Enable TLS.", + "fieldValue": null, + "fieldDefaultValue": false, + "fieldFlag": "query-scheduler.ring.etcd.tls-enabled", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_cert_path", + "required": false, + "desc": "Path to the client certificate, which will be used for authenticating with the server. Also requires the key path to be configured.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "query-scheduler.ring.etcd.tls-cert-path", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_key_path", + "required": false, + "desc": "Path to the key for the client certificate. Also requires the client certificate to be configured.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "query-scheduler.ring.etcd.tls-key-path", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_ca_path", + "required": false, + "desc": "Path to the CA certificates to validate server certificate against. If not set, the host's root CA certificates are used.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "query-scheduler.ring.etcd.tls-ca-path", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_server_name", + "required": false, + "desc": "Override the expected name on the server certificate.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "query-scheduler.ring.etcd.tls-server-name", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_insecure_skip_verify", + "required": false, + "desc": "Skip validating server certificate.", + "fieldValue": null, + "fieldDefaultValue": false, + "fieldFlag": "query-scheduler.ring.etcd.tls-insecure-skip-verify", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_cipher_suites", + "required": false, + "desc": "Override the default cipher suite list (separated by commas). Allowed values:\n\nSecure Ciphers:\n- TLS_AES_128_GCM_SHA256\n- TLS_AES_256_GCM_SHA384\n- TLS_CHACHA20_POLY1305_SHA256\n- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA\n- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA\n- TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256\n- TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256\n- TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256\n- TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256\n\nInsecure Ciphers:\n- TLS_RSA_WITH_RC4_128_SHA\n- TLS_RSA_WITH_3DES_EDE_CBC_SHA\n- TLS_RSA_WITH_AES_128_CBC_SHA\n- TLS_RSA_WITH_AES_256_CBC_SHA\n- TLS_RSA_WITH_AES_128_CBC_SHA256\n- TLS_RSA_WITH_AES_128_GCM_SHA256\n- TLS_RSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_ECDSA_WITH_RC4_128_SHA\n- TLS_ECDHE_RSA_WITH_RC4_128_SHA\n- TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256\n- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256\n", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "query-scheduler.ring.etcd.tls-cipher-suites", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_min_version", + "required": false, + "desc": "Override the default minimum TLS version. Allowed values: VersionTLS10, VersionTLS11, VersionTLS12, VersionTLS13", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "query-scheduler.ring.etcd.tls-min-version", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "username", + "required": false, + "desc": "Etcd username.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "query-scheduler.ring.etcd.username", + "fieldType": "string" + }, + { + "kind": "field", + "name": "password", + "required": false, + "desc": "Etcd password.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "query-scheduler.ring.etcd.password", + "fieldType": "string" + } + ], + "fieldValue": null, + "fieldDefaultValue": null }, { "kind": "block", - "name": "consul", + "name": "memberlist", "required": false, "desc": "", "blockEntries": [ { "kind": "field", - "name": "host", + "name": "node_name", "required": false, - "desc": "Hostname and port of Consul.", + "desc": "Name of the node in memberlist cluster. Defaults to hostname.", "fieldValue": null, - "fieldDefaultValue": "localhost:8500", - "fieldFlag": "query-scheduler.ring.consul.hostname", + "fieldDefaultValue": "", + "fieldFlag": "query-scheduler.ring.memberlist.nodename", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "randomize_node_name", + "required": false, + "desc": "Add random suffix to the node name.", + "fieldValue": null, + "fieldDefaultValue": true, + "fieldFlag": "query-scheduler.ring.memberlist.randomize-node-name", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "stream_timeout", + "required": false, + "desc": "The timeout for establishing a connection with a remote node, and for read/write operations.", + "fieldValue": null, + "fieldDefaultValue": 2000000000, + "fieldFlag": "query-scheduler.ring.memberlist.stream-timeout", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "retransmit_factor", + "required": false, + "desc": "Multiplication factor used when sending out messages (factor * log(N+1)).", + "fieldValue": null, + "fieldDefaultValue": 4, + "fieldFlag": "query-scheduler.ring.memberlist.retransmit-factor", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "pull_push_interval", + "required": false, + "desc": "How often to use pull/push sync.", + "fieldValue": null, + "fieldDefaultValue": 30000000000, + "fieldFlag": "query-scheduler.ring.memberlist.pullpush-interval", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "gossip_interval", + "required": false, + "desc": "How often to gossip.", + "fieldValue": null, + "fieldDefaultValue": 200000000, + "fieldFlag": "query-scheduler.ring.memberlist.gossip-interval", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "gossip_nodes", + "required": false, + "desc": "How many nodes to gossip to.", + "fieldValue": null, + "fieldDefaultValue": 3, + "fieldFlag": "query-scheduler.ring.memberlist.gossip-nodes", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "gossip_to_dead_nodes_time", + "required": false, + "desc": "How long to keep gossiping to dead nodes, to give them chance to refute their death.", + "fieldValue": null, + "fieldDefaultValue": 30000000000, + "fieldFlag": "query-scheduler.ring.memberlist.gossip-to-dead-nodes-time", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "dead_node_reclaim_time", + "required": false, + "desc": "How soon can dead node's name be reclaimed with new address. 0 to disable.", + "fieldValue": null, + "fieldDefaultValue": 0, + "fieldFlag": "query-scheduler.ring.memberlist.dead-node-reclaim-time", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "compression_enabled", + "required": false, + "desc": "Enable message compression. This can be used to reduce bandwidth usage at the cost of slightly more CPU utilization.", + "fieldValue": null, + "fieldDefaultValue": true, + "fieldFlag": "query-scheduler.ring.memberlist.compression-enabled", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "notify_interval", + "required": false, + "desc": "How frequently to notify watchers when a key changes. Can reduce CPU activity in large memberlist deployments. 0 to notify without delay.", + "fieldValue": null, + "fieldDefaultValue": 0, + "fieldFlag": "query-scheduler.ring.memberlist.notify-interval", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "advertise_addr", + "required": false, + "desc": "Gossip address to advertise to other members in the cluster. Used for NAT traversal.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "query-scheduler.ring.memberlist.advertise-addr", "fieldType": "string" }, { "kind": "field", - "name": "acl_token", + "name": "advertise_port", "required": false, - "desc": "ACL Token used to interact with Consul.", + "desc": "Gossip port to advertise to other members in the cluster. Used for NAT traversal.", + "fieldValue": null, + "fieldDefaultValue": 7946, + "fieldFlag": "query-scheduler.ring.memberlist.advertise-port", + "fieldType": "int" + }, + { + "kind": "field", + "name": "cluster_label", + "required": false, + "desc": "The cluster label is an optional string to include in outbound packets and gossip streams. Other members in the memberlist cluster will discard any message whose label doesn't match the configured one, unless the 'cluster-label-verification-disabled' configuration option is set to true.", "fieldValue": null, "fieldDefaultValue": "", - "fieldFlag": "query-scheduler.ring.consul.acl-token", + "fieldFlag": "query-scheduler.ring.memberlist.cluster-label", "fieldType": "string", "fieldCategory": "advanced" }, { "kind": "field", - "name": "http_client_timeout", + "name": "cluster_label_verification_disabled", "required": false, - "desc": "HTTP timeout when talking to Consul", + "desc": "When true, memberlist doesn't verify that inbound packets and gossip streams have the cluster label matching the configured one. This verification should be disabled while rolling out the change to the configured cluster label in a live memberlist cluster.", "fieldValue": null, - "fieldDefaultValue": 20000000000, - "fieldFlag": "query-scheduler.ring.consul.client-timeout", + "fieldDefaultValue": false, + "fieldFlag": "query-scheduler.ring.memberlist.cluster-label-verification-disabled", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "join_members", + "required": false, + "desc": "Other cluster members to join. Can be specified multiple times. It can be an IP, hostname or an entry specified in the DNS Service Discovery format.", + "fieldValue": null, + "fieldDefaultValue": [], + "fieldFlag": "query-scheduler.ring.memberlist.join", + "fieldType": "list of strings" + }, + { + "kind": "field", + "name": "min_join_backoff", + "required": false, + "desc": "Min backoff duration to join other cluster members.", + "fieldValue": null, + "fieldDefaultValue": 1000000000, + "fieldFlag": "query-scheduler.ring.memberlist.min-join-backoff", "fieldType": "duration", "fieldCategory": "advanced" }, { "kind": "field", - "name": "consistent_reads", + "name": "max_join_backoff", "required": false, - "desc": "Enable consistent reads to Consul.", + "desc": "Max backoff duration to join other cluster members.", + "fieldValue": null, + "fieldDefaultValue": 60000000000, + "fieldFlag": "query-scheduler.ring.memberlist.max-join-backoff", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "max_join_retries", + "required": false, + "desc": "Max number of retries to join other cluster members.", + "fieldValue": null, + "fieldDefaultValue": 10, + "fieldFlag": "query-scheduler.ring.memberlist.max-join-retries", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "abort_if_cluster_join_fails", + "required": false, + "desc": "If this node fails to join memberlist cluster, abort.", "fieldValue": null, "fieldDefaultValue": false, - "fieldFlag": "query-scheduler.ring.consul.consistent-reads", - "fieldType": "boolean", + "fieldFlag": "query-scheduler.ring.memberlist.abort-if-join-fails", + "fieldType": "boolean" + }, + { + "kind": "field", + "name": "rejoin_interval", + "required": false, + "desc": "If not 0, how often to rejoin the cluster. Occasional rejoin can help to fix the cluster split issue, and is harmless otherwise. For example when using only few components as a seed nodes (via -memberlist.join), then it's recommended to use rejoin. If -memberlist.join points to dynamic service that resolves to all gossiping nodes (eg. Kubernetes headless service), then rejoin is not needed.", + "fieldValue": null, + "fieldDefaultValue": 0, + "fieldFlag": "query-scheduler.ring.memberlist.rejoin-interval", + "fieldType": "duration", "fieldCategory": "advanced" }, { "kind": "field", - "name": "watch_rate_limit", + "name": "left_ingesters_timeout", "required": false, - "desc": "Rate limit when watching key or prefix in Consul, in requests per second. 0 disables the rate limit.", + "desc": "How long to keep LEFT ingesters in the ring.", "fieldValue": null, - "fieldDefaultValue": 1, - "fieldFlag": "query-scheduler.ring.consul.watch-rate-limit", - "fieldType": "float", + "fieldDefaultValue": 300000000000, + "fieldFlag": "query-scheduler.ring.memberlist.left-ingesters-timeout", + "fieldType": "duration", "fieldCategory": "advanced" }, { "kind": "field", - "name": "watch_burst_size", + "name": "leave_timeout", "required": false, - "desc": "Burst size used in rate limit. Values less than 1 are treated as 1.", + "desc": "Timeout for leaving memberlist cluster.", "fieldValue": null, - "fieldDefaultValue": 1, - "fieldFlag": "query-scheduler.ring.consul.watch-burst-size", - "fieldType": "int", + "fieldDefaultValue": 20000000000, + "fieldFlag": "query-scheduler.ring.memberlist.leave-timeout", + "fieldType": "duration", "fieldCategory": "advanced" }, { "kind": "field", - "name": "cas_retry_delay", + "name": "broadcast_timeout_for_local_updates_on_shutdown", "required": false, - "desc": "Maximum duration to wait before retrying a Compare And Swap (CAS) operation.", + "desc": "Timeout for broadcasting all remaining locally-generated updates to other nodes when shutting down. Only used if there are nodes left in the memberlist cluster, and only applies to locally-generated updates, not to broadcast messages that are result of incoming gossip updates. 0 = no timeout, wait until all locally-generated updates are sent.", "fieldValue": null, - "fieldDefaultValue": 1000000000, - "fieldFlag": "query-scheduler.ring.consul.cas-retry-delay", + "fieldDefaultValue": 10000000000, + "fieldFlag": "query-scheduler.ring.memberlist.broadcast-timeout-for-local-updates-on-shutdown", "fieldType": "duration", "fieldCategory": "advanced" - } - ], - "fieldValue": null, - "fieldDefaultValue": null - }, - { - "kind": "block", - "name": "etcd", - "required": false, - "desc": "", - "blockEntries": [ + }, { "kind": "field", - "name": "endpoints", + "name": "message_history_buffer_bytes", "required": false, - "desc": "The etcd endpoints to connect to.", + "desc": "How much space to use for keeping received and sent messages in memory for troubleshooting (two buffers). 0 to disable.", + "fieldValue": null, + "fieldDefaultValue": 0, + "fieldFlag": "query-scheduler.ring.memberlist.message-history-buffer-bytes", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "bind_addr", + "required": false, + "desc": "IP address to listen on for gossip messages. Multiple addresses may be specified. Defaults to 0.0.0.0", "fieldValue": null, "fieldDefaultValue": [], - "fieldFlag": "query-scheduler.ring.etcd.endpoints", + "fieldFlag": "query-scheduler.ring.memberlist.bind-addr", "fieldType": "list of strings" }, { "kind": "field", - "name": "dial_timeout", + "name": "bind_port", "required": false, - "desc": "The dial timeout for the etcd connection.", + "desc": "Port to listen on for gossip messages.", "fieldValue": null, - "fieldDefaultValue": 10000000000, - "fieldFlag": "query-scheduler.ring.etcd.dial-timeout", + "fieldDefaultValue": 7946, + "fieldFlag": "query-scheduler.ring.memberlist.bind-port", + "fieldType": "int" + }, + { + "kind": "field", + "name": "packet_dial_timeout", + "required": false, + "desc": "Timeout used when connecting to other nodes to send packet.", + "fieldValue": null, + "fieldDefaultValue": 2000000000, + "fieldFlag": "query-scheduler.ring.memberlist.packet-dial-timeout", "fieldType": "duration", "fieldCategory": "advanced" }, { "kind": "field", - "name": "max_retries", + "name": "packet_write_timeout", "required": false, - "desc": "The maximum number of retries to do for failed ops.", + "desc": "Timeout for writing 'packet' data.", "fieldValue": null, - "fieldDefaultValue": 10, - "fieldFlag": "query-scheduler.ring.etcd.max-retries", + "fieldDefaultValue": 5000000000, + "fieldFlag": "query-scheduler.ring.memberlist.packet-write-timeout", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "max_concurrent_writes", + "required": false, + "desc": "Maximum number of concurrent writes to other nodes.", + "fieldValue": null, + "fieldDefaultValue": 3, + "fieldFlag": "query-scheduler.ring.memberlist.max-concurrent-writes", "fieldType": "int", "fieldCategory": "advanced" }, + { + "kind": "field", + "name": "acquire_writer_timeout", + "required": false, + "desc": "Timeout for acquiring one of the concurrent write slots. After this time, the message will be dropped.", + "fieldValue": null, + "fieldDefaultValue": 250000000, + "fieldFlag": "query-scheduler.ring.memberlist.acquire-writer-timeout", + "fieldType": "duration", + "fieldCategory": "advanced" + }, { "kind": "field", "name": "tls_enabled", "required": false, - "desc": "Enable TLS.", + "desc": "Enable TLS on the memberlist transport layer.", "fieldValue": null, "fieldDefaultValue": false, - "fieldFlag": "query-scheduler.ring.etcd.tls-enabled", + "fieldFlag": "query-scheduler.ring.memberlist.tls-enabled", "fieldType": "boolean", "fieldCategory": "advanced" }, @@ -17738,7 +21655,7 @@ "desc": "Path to the client certificate, which will be used for authenticating with the server. Also requires the key path to be configured.", "fieldValue": null, "fieldDefaultValue": "", - "fieldFlag": "query-scheduler.ring.etcd.tls-cert-path", + "fieldFlag": "query-scheduler.ring.memberlist.tls-cert-path", "fieldType": "string", "fieldCategory": "advanced" }, @@ -17749,7 +21666,7 @@ "desc": "Path to the key for the client certificate. Also requires the client certificate to be configured.", "fieldValue": null, "fieldDefaultValue": "", - "fieldFlag": "query-scheduler.ring.etcd.tls-key-path", + "fieldFlag": "query-scheduler.ring.memberlist.tls-key-path", "fieldType": "string", "fieldCategory": "advanced" }, @@ -17760,7 +21677,7 @@ "desc": "Path to the CA certificates to validate server certificate against. If not set, the host's root CA certificates are used.", "fieldValue": null, "fieldDefaultValue": "", - "fieldFlag": "query-scheduler.ring.etcd.tls-ca-path", + "fieldFlag": "query-scheduler.ring.memberlist.tls-ca-path", "fieldType": "string", "fieldCategory": "advanced" }, @@ -17771,7 +21688,7 @@ "desc": "Override the expected name on the server certificate.", "fieldValue": null, "fieldDefaultValue": "", - "fieldFlag": "query-scheduler.ring.etcd.tls-server-name", + "fieldFlag": "query-scheduler.ring.memberlist.tls-server-name", "fieldType": "string", "fieldCategory": "advanced" }, @@ -17782,7 +21699,7 @@ "desc": "Skip validating server certificate.", "fieldValue": null, "fieldDefaultValue": false, - "fieldFlag": "query-scheduler.ring.etcd.tls-insecure-skip-verify", + "fieldFlag": "query-scheduler.ring.memberlist.tls-insecure-skip-verify", "fieldType": "boolean", "fieldCategory": "advanced" }, @@ -17793,7 +21710,7 @@ "desc": "Override the default cipher suite list (separated by commas). Allowed values:\n\nSecure Ciphers:\n- TLS_AES_128_GCM_SHA256\n- TLS_AES_256_GCM_SHA384\n- TLS_CHACHA20_POLY1305_SHA256\n- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA\n- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA\n- TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256\n- TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256\n- TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256\n- TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256\n\nInsecure Ciphers:\n- TLS_RSA_WITH_RC4_128_SHA\n- TLS_RSA_WITH_3DES_EDE_CBC_SHA\n- TLS_RSA_WITH_AES_128_CBC_SHA\n- TLS_RSA_WITH_AES_256_CBC_SHA\n- TLS_RSA_WITH_AES_128_CBC_SHA256\n- TLS_RSA_WITH_AES_128_GCM_SHA256\n- TLS_RSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_ECDSA_WITH_RC4_128_SHA\n- TLS_ECDHE_RSA_WITH_RC4_128_SHA\n- TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256\n- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256\n", "fieldValue": null, "fieldDefaultValue": "", - "fieldFlag": "query-scheduler.ring.etcd.tls-cipher-suites", + "fieldFlag": "query-scheduler.ring.memberlist.tls-cipher-suites", "fieldType": "string", "fieldCategory": "advanced" }, @@ -17804,29 +21721,9 @@ "desc": "Override the default minimum TLS version. Allowed values: VersionTLS10, VersionTLS11, VersionTLS12, VersionTLS13", "fieldValue": null, "fieldDefaultValue": "", - "fieldFlag": "query-scheduler.ring.etcd.tls-min-version", + "fieldFlag": "query-scheduler.ring.memberlist.tls-min-version", "fieldType": "string", "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "username", - "required": false, - "desc": "Etcd username.", - "fieldValue": null, - "fieldDefaultValue": "", - "fieldFlag": "query-scheduler.ring.etcd.username", - "fieldType": "string" - }, - { - "kind": "field", - "name": "password", - "required": false, - "desc": "Etcd password.", - "fieldValue": null, - "fieldDefaultValue": "", - "fieldFlag": "query-scheduler.ring.etcd.password", - "fieldType": "string" } ], "fieldValue": null, @@ -18058,143 +21955,596 @@ "required": false, "desc": "The prefix for the keys in the store. Should end with a /.", "fieldValue": null, - "fieldDefaultValue": "collectors/", - "fieldFlag": "overrides-exporter.ring.prefix", - "fieldType": "string", - "fieldCategory": "advanced" + "fieldDefaultValue": "collectors/", + "fieldFlag": "overrides-exporter.ring.prefix", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "block", + "name": "consul", + "required": false, + "desc": "", + "blockEntries": [ + { + "kind": "field", + "name": "host", + "required": false, + "desc": "Hostname and port of Consul.", + "fieldValue": null, + "fieldDefaultValue": "localhost:8500", + "fieldFlag": "overrides-exporter.ring.consul.hostname", + "fieldType": "string" + }, + { + "kind": "field", + "name": "acl_token", + "required": false, + "desc": "ACL Token used to interact with Consul.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "overrides-exporter.ring.consul.acl-token", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "http_client_timeout", + "required": false, + "desc": "HTTP timeout when talking to Consul", + "fieldValue": null, + "fieldDefaultValue": 20000000000, + "fieldFlag": "overrides-exporter.ring.consul.client-timeout", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "consistent_reads", + "required": false, + "desc": "Enable consistent reads to Consul.", + "fieldValue": null, + "fieldDefaultValue": false, + "fieldFlag": "overrides-exporter.ring.consul.consistent-reads", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "watch_rate_limit", + "required": false, + "desc": "Rate limit when watching key or prefix in Consul, in requests per second. 0 disables the rate limit.", + "fieldValue": null, + "fieldDefaultValue": 1, + "fieldFlag": "overrides-exporter.ring.consul.watch-rate-limit", + "fieldType": "float", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "watch_burst_size", + "required": false, + "desc": "Burst size used in rate limit. Values less than 1 are treated as 1.", + "fieldValue": null, + "fieldDefaultValue": 1, + "fieldFlag": "overrides-exporter.ring.consul.watch-burst-size", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "cas_retry_delay", + "required": false, + "desc": "Maximum duration to wait before retrying a Compare And Swap (CAS) operation.", + "fieldValue": null, + "fieldDefaultValue": 1000000000, + "fieldFlag": "overrides-exporter.ring.consul.cas-retry-delay", + "fieldType": "duration", + "fieldCategory": "advanced" + } + ], + "fieldValue": null, + "fieldDefaultValue": null + }, + { + "kind": "block", + "name": "etcd", + "required": false, + "desc": "", + "blockEntries": [ + { + "kind": "field", + "name": "endpoints", + "required": false, + "desc": "The etcd endpoints to connect to.", + "fieldValue": null, + "fieldDefaultValue": [], + "fieldFlag": "overrides-exporter.ring.etcd.endpoints", + "fieldType": "list of strings" + }, + { + "kind": "field", + "name": "dial_timeout", + "required": false, + "desc": "The dial timeout for the etcd connection.", + "fieldValue": null, + "fieldDefaultValue": 10000000000, + "fieldFlag": "overrides-exporter.ring.etcd.dial-timeout", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "max_retries", + "required": false, + "desc": "The maximum number of retries to do for failed ops.", + "fieldValue": null, + "fieldDefaultValue": 10, + "fieldFlag": "overrides-exporter.ring.etcd.max-retries", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_enabled", + "required": false, + "desc": "Enable TLS.", + "fieldValue": null, + "fieldDefaultValue": false, + "fieldFlag": "overrides-exporter.ring.etcd.tls-enabled", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_cert_path", + "required": false, + "desc": "Path to the client certificate, which will be used for authenticating with the server. Also requires the key path to be configured.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "overrides-exporter.ring.etcd.tls-cert-path", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_key_path", + "required": false, + "desc": "Path to the key for the client certificate. Also requires the client certificate to be configured.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "overrides-exporter.ring.etcd.tls-key-path", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_ca_path", + "required": false, + "desc": "Path to the CA certificates to validate server certificate against. If not set, the host's root CA certificates are used.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "overrides-exporter.ring.etcd.tls-ca-path", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_server_name", + "required": false, + "desc": "Override the expected name on the server certificate.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "overrides-exporter.ring.etcd.tls-server-name", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_insecure_skip_verify", + "required": false, + "desc": "Skip validating server certificate.", + "fieldValue": null, + "fieldDefaultValue": false, + "fieldFlag": "overrides-exporter.ring.etcd.tls-insecure-skip-verify", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_cipher_suites", + "required": false, + "desc": "Override the default cipher suite list (separated by commas). Allowed values:\n\nSecure Ciphers:\n- TLS_AES_128_GCM_SHA256\n- TLS_AES_256_GCM_SHA384\n- TLS_CHACHA20_POLY1305_SHA256\n- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA\n- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA\n- TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256\n- TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256\n- TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256\n- TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256\n\nInsecure Ciphers:\n- TLS_RSA_WITH_RC4_128_SHA\n- TLS_RSA_WITH_3DES_EDE_CBC_SHA\n- TLS_RSA_WITH_AES_128_CBC_SHA\n- TLS_RSA_WITH_AES_256_CBC_SHA\n- TLS_RSA_WITH_AES_128_CBC_SHA256\n- TLS_RSA_WITH_AES_128_GCM_SHA256\n- TLS_RSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_ECDSA_WITH_RC4_128_SHA\n- TLS_ECDHE_RSA_WITH_RC4_128_SHA\n- TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256\n- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256\n", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "overrides-exporter.ring.etcd.tls-cipher-suites", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "tls_min_version", + "required": false, + "desc": "Override the default minimum TLS version. Allowed values: VersionTLS10, VersionTLS11, VersionTLS12, VersionTLS13", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "overrides-exporter.ring.etcd.tls-min-version", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "username", + "required": false, + "desc": "Etcd username.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "overrides-exporter.ring.etcd.username", + "fieldType": "string" + }, + { + "kind": "field", + "name": "password", + "required": false, + "desc": "Etcd password.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "overrides-exporter.ring.etcd.password", + "fieldType": "string" + } + ], + "fieldValue": null, + "fieldDefaultValue": null }, { "kind": "block", - "name": "consul", + "name": "memberlist", "required": false, "desc": "", "blockEntries": [ { "kind": "field", - "name": "host", + "name": "node_name", "required": false, - "desc": "Hostname and port of Consul.", + "desc": "Name of the node in memberlist cluster. Defaults to hostname.", "fieldValue": null, - "fieldDefaultValue": "localhost:8500", - "fieldFlag": "overrides-exporter.ring.consul.hostname", + "fieldDefaultValue": "", + "fieldFlag": "overrides-exporter.ring.memberlist.nodename", + "fieldType": "string", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "randomize_node_name", + "required": false, + "desc": "Add random suffix to the node name.", + "fieldValue": null, + "fieldDefaultValue": true, + "fieldFlag": "overrides-exporter.ring.memberlist.randomize-node-name", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "stream_timeout", + "required": false, + "desc": "The timeout for establishing a connection with a remote node, and for read/write operations.", + "fieldValue": null, + "fieldDefaultValue": 2000000000, + "fieldFlag": "overrides-exporter.ring.memberlist.stream-timeout", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "retransmit_factor", + "required": false, + "desc": "Multiplication factor used when sending out messages (factor * log(N+1)).", + "fieldValue": null, + "fieldDefaultValue": 4, + "fieldFlag": "overrides-exporter.ring.memberlist.retransmit-factor", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "pull_push_interval", + "required": false, + "desc": "How often to use pull/push sync.", + "fieldValue": null, + "fieldDefaultValue": 30000000000, + "fieldFlag": "overrides-exporter.ring.memberlist.pullpush-interval", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "gossip_interval", + "required": false, + "desc": "How often to gossip.", + "fieldValue": null, + "fieldDefaultValue": 200000000, + "fieldFlag": "overrides-exporter.ring.memberlist.gossip-interval", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "gossip_nodes", + "required": false, + "desc": "How many nodes to gossip to.", + "fieldValue": null, + "fieldDefaultValue": 3, + "fieldFlag": "overrides-exporter.ring.memberlist.gossip-nodes", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "gossip_to_dead_nodes_time", + "required": false, + "desc": "How long to keep gossiping to dead nodes, to give them chance to refute their death.", + "fieldValue": null, + "fieldDefaultValue": 30000000000, + "fieldFlag": "overrides-exporter.ring.memberlist.gossip-to-dead-nodes-time", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "dead_node_reclaim_time", + "required": false, + "desc": "How soon can dead node's name be reclaimed with new address. 0 to disable.", + "fieldValue": null, + "fieldDefaultValue": 0, + "fieldFlag": "overrides-exporter.ring.memberlist.dead-node-reclaim-time", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "compression_enabled", + "required": false, + "desc": "Enable message compression. This can be used to reduce bandwidth usage at the cost of slightly more CPU utilization.", + "fieldValue": null, + "fieldDefaultValue": true, + "fieldFlag": "overrides-exporter.ring.memberlist.compression-enabled", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "notify_interval", + "required": false, + "desc": "How frequently to notify watchers when a key changes. Can reduce CPU activity in large memberlist deployments. 0 to notify without delay.", + "fieldValue": null, + "fieldDefaultValue": 0, + "fieldFlag": "overrides-exporter.ring.memberlist.notify-interval", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "advertise_addr", + "required": false, + "desc": "Gossip address to advertise to other members in the cluster. Used for NAT traversal.", + "fieldValue": null, + "fieldDefaultValue": "", + "fieldFlag": "overrides-exporter.ring.memberlist.advertise-addr", "fieldType": "string" }, { "kind": "field", - "name": "acl_token", + "name": "advertise_port", "required": false, - "desc": "ACL Token used to interact with Consul.", + "desc": "Gossip port to advertise to other members in the cluster. Used for NAT traversal.", + "fieldValue": null, + "fieldDefaultValue": 7946, + "fieldFlag": "overrides-exporter.ring.memberlist.advertise-port", + "fieldType": "int" + }, + { + "kind": "field", + "name": "cluster_label", + "required": false, + "desc": "The cluster label is an optional string to include in outbound packets and gossip streams. Other members in the memberlist cluster will discard any message whose label doesn't match the configured one, unless the 'cluster-label-verification-disabled' configuration option is set to true.", "fieldValue": null, "fieldDefaultValue": "", - "fieldFlag": "overrides-exporter.ring.consul.acl-token", + "fieldFlag": "overrides-exporter.ring.memberlist.cluster-label", "fieldType": "string", "fieldCategory": "advanced" }, { "kind": "field", - "name": "http_client_timeout", + "name": "cluster_label_verification_disabled", "required": false, - "desc": "HTTP timeout when talking to Consul", + "desc": "When true, memberlist doesn't verify that inbound packets and gossip streams have the cluster label matching the configured one. This verification should be disabled while rolling out the change to the configured cluster label in a live memberlist cluster.", "fieldValue": null, - "fieldDefaultValue": 20000000000, - "fieldFlag": "overrides-exporter.ring.consul.client-timeout", + "fieldDefaultValue": false, + "fieldFlag": "overrides-exporter.ring.memberlist.cluster-label-verification-disabled", + "fieldType": "boolean", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "join_members", + "required": false, + "desc": "Other cluster members to join. Can be specified multiple times. It can be an IP, hostname or an entry specified in the DNS Service Discovery format.", + "fieldValue": null, + "fieldDefaultValue": [], + "fieldFlag": "overrides-exporter.ring.memberlist.join", + "fieldType": "list of strings" + }, + { + "kind": "field", + "name": "min_join_backoff", + "required": false, + "desc": "Min backoff duration to join other cluster members.", + "fieldValue": null, + "fieldDefaultValue": 1000000000, + "fieldFlag": "overrides-exporter.ring.memberlist.min-join-backoff", "fieldType": "duration", "fieldCategory": "advanced" }, { "kind": "field", - "name": "consistent_reads", + "name": "max_join_backoff", "required": false, - "desc": "Enable consistent reads to Consul.", + "desc": "Max backoff duration to join other cluster members.", + "fieldValue": null, + "fieldDefaultValue": 60000000000, + "fieldFlag": "overrides-exporter.ring.memberlist.max-join-backoff", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "max_join_retries", + "required": false, + "desc": "Max number of retries to join other cluster members.", + "fieldValue": null, + "fieldDefaultValue": 10, + "fieldFlag": "overrides-exporter.ring.memberlist.max-join-retries", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "abort_if_cluster_join_fails", + "required": false, + "desc": "If this node fails to join memberlist cluster, abort.", "fieldValue": null, "fieldDefaultValue": false, - "fieldFlag": "overrides-exporter.ring.consul.consistent-reads", - "fieldType": "boolean", + "fieldFlag": "overrides-exporter.ring.memberlist.abort-if-join-fails", + "fieldType": "boolean" + }, + { + "kind": "field", + "name": "rejoin_interval", + "required": false, + "desc": "If not 0, how often to rejoin the cluster. Occasional rejoin can help to fix the cluster split issue, and is harmless otherwise. For example when using only few components as a seed nodes (via -memberlist.join), then it's recommended to use rejoin. If -memberlist.join points to dynamic service that resolves to all gossiping nodes (eg. Kubernetes headless service), then rejoin is not needed.", + "fieldValue": null, + "fieldDefaultValue": 0, + "fieldFlag": "overrides-exporter.ring.memberlist.rejoin-interval", + "fieldType": "duration", "fieldCategory": "advanced" }, { "kind": "field", - "name": "watch_rate_limit", + "name": "left_ingesters_timeout", "required": false, - "desc": "Rate limit when watching key or prefix in Consul, in requests per second. 0 disables the rate limit.", + "desc": "How long to keep LEFT ingesters in the ring.", "fieldValue": null, - "fieldDefaultValue": 1, - "fieldFlag": "overrides-exporter.ring.consul.watch-rate-limit", - "fieldType": "float", + "fieldDefaultValue": 300000000000, + "fieldFlag": "overrides-exporter.ring.memberlist.left-ingesters-timeout", + "fieldType": "duration", "fieldCategory": "advanced" }, { "kind": "field", - "name": "watch_burst_size", + "name": "leave_timeout", "required": false, - "desc": "Burst size used in rate limit. Values less than 1 are treated as 1.", + "desc": "Timeout for leaving memberlist cluster.", "fieldValue": null, - "fieldDefaultValue": 1, - "fieldFlag": "overrides-exporter.ring.consul.watch-burst-size", - "fieldType": "int", + "fieldDefaultValue": 20000000000, + "fieldFlag": "overrides-exporter.ring.memberlist.leave-timeout", + "fieldType": "duration", "fieldCategory": "advanced" }, { "kind": "field", - "name": "cas_retry_delay", + "name": "broadcast_timeout_for_local_updates_on_shutdown", "required": false, - "desc": "Maximum duration to wait before retrying a Compare And Swap (CAS) operation.", + "desc": "Timeout for broadcasting all remaining locally-generated updates to other nodes when shutting down. Only used if there are nodes left in the memberlist cluster, and only applies to locally-generated updates, not to broadcast messages that are result of incoming gossip updates. 0 = no timeout, wait until all locally-generated updates are sent.", "fieldValue": null, - "fieldDefaultValue": 1000000000, - "fieldFlag": "overrides-exporter.ring.consul.cas-retry-delay", + "fieldDefaultValue": 10000000000, + "fieldFlag": "overrides-exporter.ring.memberlist.broadcast-timeout-for-local-updates-on-shutdown", "fieldType": "duration", "fieldCategory": "advanced" - } - ], - "fieldValue": null, - "fieldDefaultValue": null - }, - { - "kind": "block", - "name": "etcd", - "required": false, - "desc": "", - "blockEntries": [ + }, { "kind": "field", - "name": "endpoints", + "name": "message_history_buffer_bytes", "required": false, - "desc": "The etcd endpoints to connect to.", + "desc": "How much space to use for keeping received and sent messages in memory for troubleshooting (two buffers). 0 to disable.", + "fieldValue": null, + "fieldDefaultValue": 0, + "fieldFlag": "overrides-exporter.ring.memberlist.message-history-buffer-bytes", + "fieldType": "int", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "bind_addr", + "required": false, + "desc": "IP address to listen on for gossip messages. Multiple addresses may be specified. Defaults to 0.0.0.0", "fieldValue": null, "fieldDefaultValue": [], - "fieldFlag": "overrides-exporter.ring.etcd.endpoints", + "fieldFlag": "overrides-exporter.ring.memberlist.bind-addr", "fieldType": "list of strings" }, { "kind": "field", - "name": "dial_timeout", + "name": "bind_port", "required": false, - "desc": "The dial timeout for the etcd connection.", + "desc": "Port to listen on for gossip messages.", "fieldValue": null, - "fieldDefaultValue": 10000000000, - "fieldFlag": "overrides-exporter.ring.etcd.dial-timeout", + "fieldDefaultValue": 7946, + "fieldFlag": "overrides-exporter.ring.memberlist.bind-port", + "fieldType": "int" + }, + { + "kind": "field", + "name": "packet_dial_timeout", + "required": false, + "desc": "Timeout used when connecting to other nodes to send packet.", + "fieldValue": null, + "fieldDefaultValue": 2000000000, + "fieldFlag": "overrides-exporter.ring.memberlist.packet-dial-timeout", "fieldType": "duration", "fieldCategory": "advanced" }, { "kind": "field", - "name": "max_retries", + "name": "packet_write_timeout", "required": false, - "desc": "The maximum number of retries to do for failed ops.", + "desc": "Timeout for writing 'packet' data.", "fieldValue": null, - "fieldDefaultValue": 10, - "fieldFlag": "overrides-exporter.ring.etcd.max-retries", + "fieldDefaultValue": 5000000000, + "fieldFlag": "overrides-exporter.ring.memberlist.packet-write-timeout", + "fieldType": "duration", + "fieldCategory": "advanced" + }, + { + "kind": "field", + "name": "max_concurrent_writes", + "required": false, + "desc": "Maximum number of concurrent writes to other nodes.", + "fieldValue": null, + "fieldDefaultValue": 3, + "fieldFlag": "overrides-exporter.ring.memberlist.max-concurrent-writes", "fieldType": "int", "fieldCategory": "advanced" }, + { + "kind": "field", + "name": "acquire_writer_timeout", + "required": false, + "desc": "Timeout for acquiring one of the concurrent write slots. After this time, the message will be dropped.", + "fieldValue": null, + "fieldDefaultValue": 250000000, + "fieldFlag": "overrides-exporter.ring.memberlist.acquire-writer-timeout", + "fieldType": "duration", + "fieldCategory": "advanced" + }, { "kind": "field", "name": "tls_enabled", "required": false, - "desc": "Enable TLS.", + "desc": "Enable TLS on the memberlist transport layer.", "fieldValue": null, "fieldDefaultValue": false, - "fieldFlag": "overrides-exporter.ring.etcd.tls-enabled", + "fieldFlag": "overrides-exporter.ring.memberlist.tls-enabled", "fieldType": "boolean", "fieldCategory": "advanced" }, @@ -18205,7 +22555,7 @@ "desc": "Path to the client certificate, which will be used for authenticating with the server. Also requires the key path to be configured.", "fieldValue": null, "fieldDefaultValue": "", - "fieldFlag": "overrides-exporter.ring.etcd.tls-cert-path", + "fieldFlag": "overrides-exporter.ring.memberlist.tls-cert-path", "fieldType": "string", "fieldCategory": "advanced" }, @@ -18216,7 +22566,7 @@ "desc": "Path to the key for the client certificate. Also requires the client certificate to be configured.", "fieldValue": null, "fieldDefaultValue": "", - "fieldFlag": "overrides-exporter.ring.etcd.tls-key-path", + "fieldFlag": "overrides-exporter.ring.memberlist.tls-key-path", "fieldType": "string", "fieldCategory": "advanced" }, @@ -18227,7 +22577,7 @@ "desc": "Path to the CA certificates to validate server certificate against. If not set, the host's root CA certificates are used.", "fieldValue": null, "fieldDefaultValue": "", - "fieldFlag": "overrides-exporter.ring.etcd.tls-ca-path", + "fieldFlag": "overrides-exporter.ring.memberlist.tls-ca-path", "fieldType": "string", "fieldCategory": "advanced" }, @@ -18238,7 +22588,7 @@ "desc": "Override the expected name on the server certificate.", "fieldValue": null, "fieldDefaultValue": "", - "fieldFlag": "overrides-exporter.ring.etcd.tls-server-name", + "fieldFlag": "overrides-exporter.ring.memberlist.tls-server-name", "fieldType": "string", "fieldCategory": "advanced" }, @@ -18249,7 +22599,7 @@ "desc": "Skip validating server certificate.", "fieldValue": null, "fieldDefaultValue": false, - "fieldFlag": "overrides-exporter.ring.etcd.tls-insecure-skip-verify", + "fieldFlag": "overrides-exporter.ring.memberlist.tls-insecure-skip-verify", "fieldType": "boolean", "fieldCategory": "advanced" }, @@ -18260,7 +22610,7 @@ "desc": "Override the default cipher suite list (separated by commas). Allowed values:\n\nSecure Ciphers:\n- TLS_AES_128_GCM_SHA256\n- TLS_AES_256_GCM_SHA384\n- TLS_CHACHA20_POLY1305_SHA256\n- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA\n- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA\n- TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256\n- TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256\n- TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256\n- TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256\n\nInsecure Ciphers:\n- TLS_RSA_WITH_RC4_128_SHA\n- TLS_RSA_WITH_3DES_EDE_CBC_SHA\n- TLS_RSA_WITH_AES_128_CBC_SHA\n- TLS_RSA_WITH_AES_256_CBC_SHA\n- TLS_RSA_WITH_AES_128_CBC_SHA256\n- TLS_RSA_WITH_AES_128_GCM_SHA256\n- TLS_RSA_WITH_AES_256_GCM_SHA384\n- TLS_ECDHE_ECDSA_WITH_RC4_128_SHA\n- TLS_ECDHE_RSA_WITH_RC4_128_SHA\n- TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA\n- TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256\n- TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256\n", "fieldValue": null, "fieldDefaultValue": "", - "fieldFlag": "overrides-exporter.ring.etcd.tls-cipher-suites", + "fieldFlag": "overrides-exporter.ring.memberlist.tls-cipher-suites", "fieldType": "string", "fieldCategory": "advanced" }, @@ -18271,29 +22621,9 @@ "desc": "Override the default minimum TLS version. Allowed values: VersionTLS10, VersionTLS11, VersionTLS12, VersionTLS13", "fieldValue": null, "fieldDefaultValue": "", - "fieldFlag": "overrides-exporter.ring.etcd.tls-min-version", + "fieldFlag": "overrides-exporter.ring.memberlist.tls-min-version", "fieldType": "string", "fieldCategory": "advanced" - }, - { - "kind": "field", - "name": "username", - "required": false, - "desc": "Etcd username.", - "fieldValue": null, - "fieldDefaultValue": "", - "fieldFlag": "overrides-exporter.ring.etcd.username", - "fieldType": "string" - }, - { - "kind": "field", - "name": "password", - "required": false, - "desc": "Etcd password.", - "fieldValue": null, - "fieldDefaultValue": "", - "fieldFlag": "overrides-exporter.ring.etcd.password", - "fieldType": "string" } ], "fieldValue": null, diff --git a/cmd/mimir/help-all.txt.tmpl b/cmd/mimir/help-all.txt.tmpl index 1e19f1db6f0..7bf5492fa32 100644 --- a/cmd/mimir/help-all.txt.tmpl +++ b/cmd/mimir/help-all.txt.tmpl @@ -333,6 +333,86 @@ Usage of ./cmd/mimir/mimir: List of network interface names to look up when finding the instance IP address. (default []) -alertmanager.sharding-ring.instance-port int Port to advertise in the ring (defaults to -server.grpc-listen-port). + -alertmanager.sharding-ring.memberlist.abort-if-join-fails + If this node fails to join memberlist cluster, abort. + -alertmanager.sharding-ring.memberlist.acquire-writer-timeout duration + Timeout for acquiring one of the concurrent write slots. After this time, the message will be dropped. (default 250ms) + -alertmanager.sharding-ring.memberlist.advertise-addr string + Gossip address to advertise to other members in the cluster. Used for NAT traversal. + -alertmanager.sharding-ring.memberlist.advertise-port int + Gossip port to advertise to other members in the cluster. Used for NAT traversal. (default 7946) + -alertmanager.sharding-ring.memberlist.bind-addr string + IP address to listen on for gossip messages. Multiple addresses may be specified. Defaults to 0.0.0.0 + -alertmanager.sharding-ring.memberlist.bind-port int + Port to listen on for gossip messages. (default 7946) + -alertmanager.sharding-ring.memberlist.broadcast-timeout-for-local-updates-on-shutdown duration + Timeout for broadcasting all remaining locally-generated updates to other nodes when shutting down. Only used if there are nodes left in the memberlist cluster, and only applies to locally-generated updates, not to broadcast messages that are result of incoming gossip updates. 0 = no timeout, wait until all locally-generated updates are sent. (default 10s) + -alertmanager.sharding-ring.memberlist.cluster-label string + The cluster label is an optional string to include in outbound packets and gossip streams. Other members in the memberlist cluster will discard any message whose label doesn't match the configured one, unless the 'cluster-label-verification-disabled' configuration option is set to true. + -alertmanager.sharding-ring.memberlist.cluster-label-verification-disabled + When true, memberlist doesn't verify that inbound packets and gossip streams have the cluster label matching the configured one. This verification should be disabled while rolling out the change to the configured cluster label in a live memberlist cluster. + -alertmanager.sharding-ring.memberlist.compression-enabled + Enable message compression. This can be used to reduce bandwidth usage at the cost of slightly more CPU utilization. (default true) + -alertmanager.sharding-ring.memberlist.dead-node-reclaim-time duration + How soon can dead node's name be reclaimed with new address. 0 to disable. + -alertmanager.sharding-ring.memberlist.gossip-interval duration + How often to gossip. (default 200ms) + -alertmanager.sharding-ring.memberlist.gossip-nodes int + How many nodes to gossip to. (default 3) + -alertmanager.sharding-ring.memberlist.gossip-to-dead-nodes-time duration + How long to keep gossiping to dead nodes, to give them chance to refute their death. (default 30s) + -alertmanager.sharding-ring.memberlist.join string + Other cluster members to join. Can be specified multiple times. It can be an IP, hostname or an entry specified in the DNS Service Discovery format. + -alertmanager.sharding-ring.memberlist.leave-timeout duration + Timeout for leaving memberlist cluster. (default 20s) + -alertmanager.sharding-ring.memberlist.left-ingesters-timeout duration + How long to keep LEFT ingesters in the ring. (default 5m0s) + -alertmanager.sharding-ring.memberlist.max-concurrent-writes int + Maximum number of concurrent writes to other nodes. (default 3) + -alertmanager.sharding-ring.memberlist.max-join-backoff duration + Max backoff duration to join other cluster members. (default 1m0s) + -alertmanager.sharding-ring.memberlist.max-join-retries int + Max number of retries to join other cluster members. (default 10) + -alertmanager.sharding-ring.memberlist.message-history-buffer-bytes int + How much space to use for keeping received and sent messages in memory for troubleshooting (two buffers). 0 to disable. + -alertmanager.sharding-ring.memberlist.min-join-backoff duration + Min backoff duration to join other cluster members. (default 1s) + -alertmanager.sharding-ring.memberlist.nodename string + Name of the node in memberlist cluster. Defaults to hostname. + -alertmanager.sharding-ring.memberlist.notify-interval duration + How frequently to notify watchers when a key changes. Can reduce CPU activity in large memberlist deployments. 0 to notify without delay. + -alertmanager.sharding-ring.memberlist.packet-dial-timeout duration + Timeout used when connecting to other nodes to send packet. (default 2s) + -alertmanager.sharding-ring.memberlist.packet-write-timeout duration + Timeout for writing 'packet' data. (default 5s) + -alertmanager.sharding-ring.memberlist.pullpush-interval duration + How often to use pull/push sync. (default 30s) + -alertmanager.sharding-ring.memberlist.randomize-node-name + Add random suffix to the node name. (default true) + -alertmanager.sharding-ring.memberlist.rejoin-interval duration + If not 0, how often to rejoin the cluster. Occasional rejoin can help to fix the cluster split issue, and is harmless otherwise. For example when using only few components as a seed nodes (via -memberlist.join), then it's recommended to use rejoin. If -memberlist.join points to dynamic service that resolves to all gossiping nodes (eg. Kubernetes headless service), then rejoin is not needed. + -alertmanager.sharding-ring.memberlist.retransmit-factor int + Multiplication factor used when sending out messages (factor * log(N+1)). (default 4) + -alertmanager.sharding-ring.memberlist.stream-timeout duration + The timeout for establishing a connection with a remote node, and for read/write operations. (default 2s) + -alertmanager.sharding-ring.memberlist.tls-ca-path string + Path to the CA certificates to validate server certificate against. If not set, the host's root CA certificates are used. + -alertmanager.sharding-ring.memberlist.tls-cert-path string + Path to the client certificate, which will be used for authenticating with the server. Also requires the key path to be configured. + -alertmanager.sharding-ring.memberlist.tls-cipher-suites string + Override the default cipher suite list (separated by commas). + -alertmanager.sharding-ring.memberlist.tls-enabled + Enable TLS on the memberlist transport layer. + -alertmanager.sharding-ring.memberlist.tls-insecure-skip-verify + Skip validating server certificate. + -alertmanager.sharding-ring.memberlist.tls-key-path string + Path to the key for the client certificate. Also requires the client certificate to be configured. + -alertmanager.sharding-ring.memberlist.tls-min-version string + Override the default minimum TLS version. Allowed values: VersionTLS10, VersionTLS11, VersionTLS12, VersionTLS13 + -alertmanager.sharding-ring.memberlist.tls-server-name string + Override the expected name on the server certificate. + -alertmanager.sharding-ring.memberlist.transport-debug + Log debug transport messages. Note: global log.level must be at debug level as well. -alertmanager.sharding-ring.multi.mirror-enabled Mirror writes to secondary store. -alertmanager.sharding-ring.multi.mirror-timeout duration @@ -1253,6 +1333,86 @@ Usage of ./cmd/mimir/mimir: List of network interface names to look up when finding the instance IP address. (default []) -compactor.ring.instance-port int Port to advertise in the ring (defaults to -server.grpc-listen-port). + -compactor.ring.memberlist.abort-if-join-fails + If this node fails to join memberlist cluster, abort. + -compactor.ring.memberlist.acquire-writer-timeout duration + Timeout for acquiring one of the concurrent write slots. After this time, the message will be dropped. (default 250ms) + -compactor.ring.memberlist.advertise-addr string + Gossip address to advertise to other members in the cluster. Used for NAT traversal. + -compactor.ring.memberlist.advertise-port int + Gossip port to advertise to other members in the cluster. Used for NAT traversal. (default 7946) + -compactor.ring.memberlist.bind-addr string + IP address to listen on for gossip messages. Multiple addresses may be specified. Defaults to 0.0.0.0 + -compactor.ring.memberlist.bind-port int + Port to listen on for gossip messages. (default 7946) + -compactor.ring.memberlist.broadcast-timeout-for-local-updates-on-shutdown duration + Timeout for broadcasting all remaining locally-generated updates to other nodes when shutting down. Only used if there are nodes left in the memberlist cluster, and only applies to locally-generated updates, not to broadcast messages that are result of incoming gossip updates. 0 = no timeout, wait until all locally-generated updates are sent. (default 10s) + -compactor.ring.memberlist.cluster-label string + The cluster label is an optional string to include in outbound packets and gossip streams. Other members in the memberlist cluster will discard any message whose label doesn't match the configured one, unless the 'cluster-label-verification-disabled' configuration option is set to true. + -compactor.ring.memberlist.cluster-label-verification-disabled + When true, memberlist doesn't verify that inbound packets and gossip streams have the cluster label matching the configured one. This verification should be disabled while rolling out the change to the configured cluster label in a live memberlist cluster. + -compactor.ring.memberlist.compression-enabled + Enable message compression. This can be used to reduce bandwidth usage at the cost of slightly more CPU utilization. (default true) + -compactor.ring.memberlist.dead-node-reclaim-time duration + How soon can dead node's name be reclaimed with new address. 0 to disable. + -compactor.ring.memberlist.gossip-interval duration + How often to gossip. (default 200ms) + -compactor.ring.memberlist.gossip-nodes int + How many nodes to gossip to. (default 3) + -compactor.ring.memberlist.gossip-to-dead-nodes-time duration + How long to keep gossiping to dead nodes, to give them chance to refute their death. (default 30s) + -compactor.ring.memberlist.join string + Other cluster members to join. Can be specified multiple times. It can be an IP, hostname or an entry specified in the DNS Service Discovery format. + -compactor.ring.memberlist.leave-timeout duration + Timeout for leaving memberlist cluster. (default 20s) + -compactor.ring.memberlist.left-ingesters-timeout duration + How long to keep LEFT ingesters in the ring. (default 5m0s) + -compactor.ring.memberlist.max-concurrent-writes int + Maximum number of concurrent writes to other nodes. (default 3) + -compactor.ring.memberlist.max-join-backoff duration + Max backoff duration to join other cluster members. (default 1m0s) + -compactor.ring.memberlist.max-join-retries int + Max number of retries to join other cluster members. (default 10) + -compactor.ring.memberlist.message-history-buffer-bytes int + How much space to use for keeping received and sent messages in memory for troubleshooting (two buffers). 0 to disable. + -compactor.ring.memberlist.min-join-backoff duration + Min backoff duration to join other cluster members. (default 1s) + -compactor.ring.memberlist.nodename string + Name of the node in memberlist cluster. Defaults to hostname. + -compactor.ring.memberlist.notify-interval duration + How frequently to notify watchers when a key changes. Can reduce CPU activity in large memberlist deployments. 0 to notify without delay. + -compactor.ring.memberlist.packet-dial-timeout duration + Timeout used when connecting to other nodes to send packet. (default 2s) + -compactor.ring.memberlist.packet-write-timeout duration + Timeout for writing 'packet' data. (default 5s) + -compactor.ring.memberlist.pullpush-interval duration + How often to use pull/push sync. (default 30s) + -compactor.ring.memberlist.randomize-node-name + Add random suffix to the node name. (default true) + -compactor.ring.memberlist.rejoin-interval duration + If not 0, how often to rejoin the cluster. Occasional rejoin can help to fix the cluster split issue, and is harmless otherwise. For example when using only few components as a seed nodes (via -memberlist.join), then it's recommended to use rejoin. If -memberlist.join points to dynamic service that resolves to all gossiping nodes (eg. Kubernetes headless service), then rejoin is not needed. + -compactor.ring.memberlist.retransmit-factor int + Multiplication factor used when sending out messages (factor * log(N+1)). (default 4) + -compactor.ring.memberlist.stream-timeout duration + The timeout for establishing a connection with a remote node, and for read/write operations. (default 2s) + -compactor.ring.memberlist.tls-ca-path string + Path to the CA certificates to validate server certificate against. If not set, the host's root CA certificates are used. + -compactor.ring.memberlist.tls-cert-path string + Path to the client certificate, which will be used for authenticating with the server. Also requires the key path to be configured. + -compactor.ring.memberlist.tls-cipher-suites string + Override the default cipher suite list (separated by commas). + -compactor.ring.memberlist.tls-enabled + Enable TLS on the memberlist transport layer. + -compactor.ring.memberlist.tls-insecure-skip-verify + Skip validating server certificate. + -compactor.ring.memberlist.tls-key-path string + Path to the key for the client certificate. Also requires the client certificate to be configured. + -compactor.ring.memberlist.tls-min-version string + Override the default minimum TLS version. Allowed values: VersionTLS10, VersionTLS11, VersionTLS12, VersionTLS13 + -compactor.ring.memberlist.tls-server-name string + Override the expected name on the server certificate. + -compactor.ring.memberlist.transport-debug + Log debug transport messages. Note: global log.level must be at debug level as well. -compactor.ring.multi.mirror-enabled Mirror writes to secondary store. -compactor.ring.multi.mirror-timeout duration @@ -1341,6 +1501,86 @@ Usage of ./cmd/mimir/mimir: If we don't receive any samples from the accepted replica for a cluster in this amount of time we will failover to the next replica we receive a sample from. This value must be greater than the update timeout (default 30s) -distributor.ha-tracker.max-clusters int Maximum number of clusters that HA tracker will keep track of for a single tenant. 0 to disable the limit. (default 100) + -distributor.ha-tracker.memberlist.abort-if-join-fails + If this node fails to join memberlist cluster, abort. + -distributor.ha-tracker.memberlist.acquire-writer-timeout duration + Timeout for acquiring one of the concurrent write slots. After this time, the message will be dropped. (default 250ms) + -distributor.ha-tracker.memberlist.advertise-addr string + Gossip address to advertise to other members in the cluster. Used for NAT traversal. + -distributor.ha-tracker.memberlist.advertise-port int + Gossip port to advertise to other members in the cluster. Used for NAT traversal. (default 7946) + -distributor.ha-tracker.memberlist.bind-addr string + IP address to listen on for gossip messages. Multiple addresses may be specified. Defaults to 0.0.0.0 + -distributor.ha-tracker.memberlist.bind-port int + Port to listen on for gossip messages. (default 7946) + -distributor.ha-tracker.memberlist.broadcast-timeout-for-local-updates-on-shutdown duration + Timeout for broadcasting all remaining locally-generated updates to other nodes when shutting down. Only used if there are nodes left in the memberlist cluster, and only applies to locally-generated updates, not to broadcast messages that are result of incoming gossip updates. 0 = no timeout, wait until all locally-generated updates are sent. (default 10s) + -distributor.ha-tracker.memberlist.cluster-label string + The cluster label is an optional string to include in outbound packets and gossip streams. Other members in the memberlist cluster will discard any message whose label doesn't match the configured one, unless the 'cluster-label-verification-disabled' configuration option is set to true. + -distributor.ha-tracker.memberlist.cluster-label-verification-disabled + When true, memberlist doesn't verify that inbound packets and gossip streams have the cluster label matching the configured one. This verification should be disabled while rolling out the change to the configured cluster label in a live memberlist cluster. + -distributor.ha-tracker.memberlist.compression-enabled + Enable message compression. This can be used to reduce bandwidth usage at the cost of slightly more CPU utilization. (default true) + -distributor.ha-tracker.memberlist.dead-node-reclaim-time duration + How soon can dead node's name be reclaimed with new address. 0 to disable. + -distributor.ha-tracker.memberlist.gossip-interval duration + How often to gossip. (default 200ms) + -distributor.ha-tracker.memberlist.gossip-nodes int + How many nodes to gossip to. (default 3) + -distributor.ha-tracker.memberlist.gossip-to-dead-nodes-time duration + How long to keep gossiping to dead nodes, to give them chance to refute their death. (default 30s) + -distributor.ha-tracker.memberlist.join string + Other cluster members to join. Can be specified multiple times. It can be an IP, hostname or an entry specified in the DNS Service Discovery format. + -distributor.ha-tracker.memberlist.leave-timeout duration + Timeout for leaving memberlist cluster. (default 20s) + -distributor.ha-tracker.memberlist.left-ingesters-timeout duration + How long to keep LEFT ingesters in the ring. (default 5m0s) + -distributor.ha-tracker.memberlist.max-concurrent-writes int + Maximum number of concurrent writes to other nodes. (default 3) + -distributor.ha-tracker.memberlist.max-join-backoff duration + Max backoff duration to join other cluster members. (default 1m0s) + -distributor.ha-tracker.memberlist.max-join-retries int + Max number of retries to join other cluster members. (default 10) + -distributor.ha-tracker.memberlist.message-history-buffer-bytes int + How much space to use for keeping received and sent messages in memory for troubleshooting (two buffers). 0 to disable. + -distributor.ha-tracker.memberlist.min-join-backoff duration + Min backoff duration to join other cluster members. (default 1s) + -distributor.ha-tracker.memberlist.nodename string + Name of the node in memberlist cluster. Defaults to hostname. + -distributor.ha-tracker.memberlist.notify-interval duration + How frequently to notify watchers when a key changes. Can reduce CPU activity in large memberlist deployments. 0 to notify without delay. + -distributor.ha-tracker.memberlist.packet-dial-timeout duration + Timeout used when connecting to other nodes to send packet. (default 2s) + -distributor.ha-tracker.memberlist.packet-write-timeout duration + Timeout for writing 'packet' data. (default 5s) + -distributor.ha-tracker.memberlist.pullpush-interval duration + How often to use pull/push sync. (default 30s) + -distributor.ha-tracker.memberlist.randomize-node-name + Add random suffix to the node name. (default true) + -distributor.ha-tracker.memberlist.rejoin-interval duration + If not 0, how often to rejoin the cluster. Occasional rejoin can help to fix the cluster split issue, and is harmless otherwise. For example when using only few components as a seed nodes (via -memberlist.join), then it's recommended to use rejoin. If -memberlist.join points to dynamic service that resolves to all gossiping nodes (eg. Kubernetes headless service), then rejoin is not needed. + -distributor.ha-tracker.memberlist.retransmit-factor int + Multiplication factor used when sending out messages (factor * log(N+1)). (default 4) + -distributor.ha-tracker.memberlist.stream-timeout duration + The timeout for establishing a connection with a remote node, and for read/write operations. (default 2s) + -distributor.ha-tracker.memberlist.tls-ca-path string + Path to the CA certificates to validate server certificate against. If not set, the host's root CA certificates are used. + -distributor.ha-tracker.memberlist.tls-cert-path string + Path to the client certificate, which will be used for authenticating with the server. Also requires the key path to be configured. + -distributor.ha-tracker.memberlist.tls-cipher-suites string + Override the default cipher suite list (separated by commas). + -distributor.ha-tracker.memberlist.tls-enabled + Enable TLS on the memberlist transport layer. + -distributor.ha-tracker.memberlist.tls-insecure-skip-verify + Skip validating server certificate. + -distributor.ha-tracker.memberlist.tls-key-path string + Path to the key for the client certificate. Also requires the client certificate to be configured. + -distributor.ha-tracker.memberlist.tls-min-version string + Override the default minimum TLS version. Allowed values: VersionTLS10, VersionTLS11, VersionTLS12, VersionTLS13 + -distributor.ha-tracker.memberlist.tls-server-name string + Override the expected name on the server certificate. + -distributor.ha-tracker.memberlist.transport-debug + Log debug transport messages. Note: global log.level must be at debug level as well. -distributor.ha-tracker.multi.mirror-enabled Mirror writes to secondary store. -distributor.ha-tracker.multi.mirror-timeout duration @@ -1457,6 +1697,86 @@ Usage of ./cmd/mimir/mimir: List of network interface names to look up when finding the instance IP address. (default []) -distributor.ring.instance-port int Port to advertise in the ring (defaults to -server.grpc-listen-port). + -distributor.ring.memberlist.abort-if-join-fails + If this node fails to join memberlist cluster, abort. + -distributor.ring.memberlist.acquire-writer-timeout duration + Timeout for acquiring one of the concurrent write slots. After this time, the message will be dropped. (default 250ms) + -distributor.ring.memberlist.advertise-addr string + Gossip address to advertise to other members in the cluster. Used for NAT traversal. + -distributor.ring.memberlist.advertise-port int + Gossip port to advertise to other members in the cluster. Used for NAT traversal. (default 7946) + -distributor.ring.memberlist.bind-addr string + IP address to listen on for gossip messages. Multiple addresses may be specified. Defaults to 0.0.0.0 + -distributor.ring.memberlist.bind-port int + Port to listen on for gossip messages. (default 7946) + -distributor.ring.memberlist.broadcast-timeout-for-local-updates-on-shutdown duration + Timeout for broadcasting all remaining locally-generated updates to other nodes when shutting down. Only used if there are nodes left in the memberlist cluster, and only applies to locally-generated updates, not to broadcast messages that are result of incoming gossip updates. 0 = no timeout, wait until all locally-generated updates are sent. (default 10s) + -distributor.ring.memberlist.cluster-label string + The cluster label is an optional string to include in outbound packets and gossip streams. Other members in the memberlist cluster will discard any message whose label doesn't match the configured one, unless the 'cluster-label-verification-disabled' configuration option is set to true. + -distributor.ring.memberlist.cluster-label-verification-disabled + When true, memberlist doesn't verify that inbound packets and gossip streams have the cluster label matching the configured one. This verification should be disabled while rolling out the change to the configured cluster label in a live memberlist cluster. + -distributor.ring.memberlist.compression-enabled + Enable message compression. This can be used to reduce bandwidth usage at the cost of slightly more CPU utilization. (default true) + -distributor.ring.memberlist.dead-node-reclaim-time duration + How soon can dead node's name be reclaimed with new address. 0 to disable. + -distributor.ring.memberlist.gossip-interval duration + How often to gossip. (default 200ms) + -distributor.ring.memberlist.gossip-nodes int + How many nodes to gossip to. (default 3) + -distributor.ring.memberlist.gossip-to-dead-nodes-time duration + How long to keep gossiping to dead nodes, to give them chance to refute their death. (default 30s) + -distributor.ring.memberlist.join string + Other cluster members to join. Can be specified multiple times. It can be an IP, hostname or an entry specified in the DNS Service Discovery format. + -distributor.ring.memberlist.leave-timeout duration + Timeout for leaving memberlist cluster. (default 20s) + -distributor.ring.memberlist.left-ingesters-timeout duration + How long to keep LEFT ingesters in the ring. (default 5m0s) + -distributor.ring.memberlist.max-concurrent-writes int + Maximum number of concurrent writes to other nodes. (default 3) + -distributor.ring.memberlist.max-join-backoff duration + Max backoff duration to join other cluster members. (default 1m0s) + -distributor.ring.memberlist.max-join-retries int + Max number of retries to join other cluster members. (default 10) + -distributor.ring.memberlist.message-history-buffer-bytes int + How much space to use for keeping received and sent messages in memory for troubleshooting (two buffers). 0 to disable. + -distributor.ring.memberlist.min-join-backoff duration + Min backoff duration to join other cluster members. (default 1s) + -distributor.ring.memberlist.nodename string + Name of the node in memberlist cluster. Defaults to hostname. + -distributor.ring.memberlist.notify-interval duration + How frequently to notify watchers when a key changes. Can reduce CPU activity in large memberlist deployments. 0 to notify without delay. + -distributor.ring.memberlist.packet-dial-timeout duration + Timeout used when connecting to other nodes to send packet. (default 2s) + -distributor.ring.memberlist.packet-write-timeout duration + Timeout for writing 'packet' data. (default 5s) + -distributor.ring.memberlist.pullpush-interval duration + How often to use pull/push sync. (default 30s) + -distributor.ring.memberlist.randomize-node-name + Add random suffix to the node name. (default true) + -distributor.ring.memberlist.rejoin-interval duration + If not 0, how often to rejoin the cluster. Occasional rejoin can help to fix the cluster split issue, and is harmless otherwise. For example when using only few components as a seed nodes (via -memberlist.join), then it's recommended to use rejoin. If -memberlist.join points to dynamic service that resolves to all gossiping nodes (eg. Kubernetes headless service), then rejoin is not needed. + -distributor.ring.memberlist.retransmit-factor int + Multiplication factor used when sending out messages (factor * log(N+1)). (default 4) + -distributor.ring.memberlist.stream-timeout duration + The timeout for establishing a connection with a remote node, and for read/write operations. (default 2s) + -distributor.ring.memberlist.tls-ca-path string + Path to the CA certificates to validate server certificate against. If not set, the host's root CA certificates are used. + -distributor.ring.memberlist.tls-cert-path string + Path to the client certificate, which will be used for authenticating with the server. Also requires the key path to be configured. + -distributor.ring.memberlist.tls-cipher-suites string + Override the default cipher suite list (separated by commas). + -distributor.ring.memberlist.tls-enabled + Enable TLS on the memberlist transport layer. + -distributor.ring.memberlist.tls-insecure-skip-verify + Skip validating server certificate. + -distributor.ring.memberlist.tls-key-path string + Path to the key for the client certificate. Also requires the client certificate to be configured. + -distributor.ring.memberlist.tls-min-version string + Override the default minimum TLS version. Allowed values: VersionTLS10, VersionTLS11, VersionTLS12, VersionTLS13 + -distributor.ring.memberlist.tls-server-name string + Override the expected name on the server certificate. + -distributor.ring.memberlist.transport-debug + Log debug transport messages. Note: global log.level must be at debug level as well. -distributor.ring.multi.mirror-enabled Mirror writes to secondary store. -distributor.ring.multi.mirror-timeout duration @@ -1689,6 +2009,86 @@ Usage of ./cmd/mimir/mimir: Override the expected name on the server certificate. -ingester.partition-ring.etcd.username string Etcd username. + -ingester.partition-ring.memberlist.abort-if-join-fails + If this node fails to join memberlist cluster, abort. + -ingester.partition-ring.memberlist.acquire-writer-timeout duration + Timeout for acquiring one of the concurrent write slots. After this time, the message will be dropped. (default 250ms) + -ingester.partition-ring.memberlist.advertise-addr string + Gossip address to advertise to other members in the cluster. Used for NAT traversal. + -ingester.partition-ring.memberlist.advertise-port int + Gossip port to advertise to other members in the cluster. Used for NAT traversal. (default 7946) + -ingester.partition-ring.memberlist.bind-addr string + IP address to listen on for gossip messages. Multiple addresses may be specified. Defaults to 0.0.0.0 + -ingester.partition-ring.memberlist.bind-port int + Port to listen on for gossip messages. (default 7946) + -ingester.partition-ring.memberlist.broadcast-timeout-for-local-updates-on-shutdown duration + Timeout for broadcasting all remaining locally-generated updates to other nodes when shutting down. Only used if there are nodes left in the memberlist cluster, and only applies to locally-generated updates, not to broadcast messages that are result of incoming gossip updates. 0 = no timeout, wait until all locally-generated updates are sent. (default 10s) + -ingester.partition-ring.memberlist.cluster-label string + The cluster label is an optional string to include in outbound packets and gossip streams. Other members in the memberlist cluster will discard any message whose label doesn't match the configured one, unless the 'cluster-label-verification-disabled' configuration option is set to true. + -ingester.partition-ring.memberlist.cluster-label-verification-disabled + When true, memberlist doesn't verify that inbound packets and gossip streams have the cluster label matching the configured one. This verification should be disabled while rolling out the change to the configured cluster label in a live memberlist cluster. + -ingester.partition-ring.memberlist.compression-enabled + Enable message compression. This can be used to reduce bandwidth usage at the cost of slightly more CPU utilization. (default true) + -ingester.partition-ring.memberlist.dead-node-reclaim-time duration + How soon can dead node's name be reclaimed with new address. 0 to disable. + -ingester.partition-ring.memberlist.gossip-interval duration + How often to gossip. (default 200ms) + -ingester.partition-ring.memberlist.gossip-nodes int + How many nodes to gossip to. (default 3) + -ingester.partition-ring.memberlist.gossip-to-dead-nodes-time duration + How long to keep gossiping to dead nodes, to give them chance to refute their death. (default 30s) + -ingester.partition-ring.memberlist.join string + Other cluster members to join. Can be specified multiple times. It can be an IP, hostname or an entry specified in the DNS Service Discovery format. + -ingester.partition-ring.memberlist.leave-timeout duration + Timeout for leaving memberlist cluster. (default 20s) + -ingester.partition-ring.memberlist.left-ingesters-timeout duration + How long to keep LEFT ingesters in the ring. (default 5m0s) + -ingester.partition-ring.memberlist.max-concurrent-writes int + Maximum number of concurrent writes to other nodes. (default 3) + -ingester.partition-ring.memberlist.max-join-backoff duration + Max backoff duration to join other cluster members. (default 1m0s) + -ingester.partition-ring.memberlist.max-join-retries int + Max number of retries to join other cluster members. (default 10) + -ingester.partition-ring.memberlist.message-history-buffer-bytes int + How much space to use for keeping received and sent messages in memory for troubleshooting (two buffers). 0 to disable. + -ingester.partition-ring.memberlist.min-join-backoff duration + Min backoff duration to join other cluster members. (default 1s) + -ingester.partition-ring.memberlist.nodename string + Name of the node in memberlist cluster. Defaults to hostname. + -ingester.partition-ring.memberlist.notify-interval duration + How frequently to notify watchers when a key changes. Can reduce CPU activity in large memberlist deployments. 0 to notify without delay. + -ingester.partition-ring.memberlist.packet-dial-timeout duration + Timeout used when connecting to other nodes to send packet. (default 2s) + -ingester.partition-ring.memberlist.packet-write-timeout duration + Timeout for writing 'packet' data. (default 5s) + -ingester.partition-ring.memberlist.pullpush-interval duration + How often to use pull/push sync. (default 30s) + -ingester.partition-ring.memberlist.randomize-node-name + Add random suffix to the node name. (default true) + -ingester.partition-ring.memberlist.rejoin-interval duration + If not 0, how often to rejoin the cluster. Occasional rejoin can help to fix the cluster split issue, and is harmless otherwise. For example when using only few components as a seed nodes (via -memberlist.join), then it's recommended to use rejoin. If -memberlist.join points to dynamic service that resolves to all gossiping nodes (eg. Kubernetes headless service), then rejoin is not needed. + -ingester.partition-ring.memberlist.retransmit-factor int + Multiplication factor used when sending out messages (factor * log(N+1)). (default 4) + -ingester.partition-ring.memberlist.stream-timeout duration + The timeout for establishing a connection with a remote node, and for read/write operations. (default 2s) + -ingester.partition-ring.memberlist.tls-ca-path string + Path to the CA certificates to validate server certificate against. If not set, the host's root CA certificates are used. + -ingester.partition-ring.memberlist.tls-cert-path string + Path to the client certificate, which will be used for authenticating with the server. Also requires the key path to be configured. + -ingester.partition-ring.memberlist.tls-cipher-suites string + Override the default cipher suite list (separated by commas). + -ingester.partition-ring.memberlist.tls-enabled + Enable TLS on the memberlist transport layer. + -ingester.partition-ring.memberlist.tls-insecure-skip-verify + Skip validating server certificate. + -ingester.partition-ring.memberlist.tls-key-path string + Path to the key for the client certificate. Also requires the client certificate to be configured. + -ingester.partition-ring.memberlist.tls-min-version string + Override the default minimum TLS version. Allowed values: VersionTLS10, VersionTLS11, VersionTLS12, VersionTLS13 + -ingester.partition-ring.memberlist.tls-server-name string + Override the expected name on the server certificate. + -ingester.partition-ring.memberlist.transport-debug + Log debug transport messages. Note: global log.level must be at debug level as well. -ingester.partition-ring.min-partition-owners-count int Minimum number of owners to wait before a PENDING partition gets switched to ACTIVE. (default 1) -ingester.partition-ring.min-partition-owners-duration duration @@ -1799,6 +2199,86 @@ Usage of ./cmd/mimir/mimir: List of network interface names to look up when finding the instance IP address. (default []) -ingester.ring.instance-port int Port to advertise in the ring (defaults to -server.grpc-listen-port). + -ingester.ring.memberlist.abort-if-join-fails + If this node fails to join memberlist cluster, abort. + -ingester.ring.memberlist.acquire-writer-timeout duration + Timeout for acquiring one of the concurrent write slots. After this time, the message will be dropped. (default 250ms) + -ingester.ring.memberlist.advertise-addr string + Gossip address to advertise to other members in the cluster. Used for NAT traversal. + -ingester.ring.memberlist.advertise-port int + Gossip port to advertise to other members in the cluster. Used for NAT traversal. (default 7946) + -ingester.ring.memberlist.bind-addr string + IP address to listen on for gossip messages. Multiple addresses may be specified. Defaults to 0.0.0.0 + -ingester.ring.memberlist.bind-port int + Port to listen on for gossip messages. (default 7946) + -ingester.ring.memberlist.broadcast-timeout-for-local-updates-on-shutdown duration + Timeout for broadcasting all remaining locally-generated updates to other nodes when shutting down. Only used if there are nodes left in the memberlist cluster, and only applies to locally-generated updates, not to broadcast messages that are result of incoming gossip updates. 0 = no timeout, wait until all locally-generated updates are sent. (default 10s) + -ingester.ring.memberlist.cluster-label string + The cluster label is an optional string to include in outbound packets and gossip streams. Other members in the memberlist cluster will discard any message whose label doesn't match the configured one, unless the 'cluster-label-verification-disabled' configuration option is set to true. + -ingester.ring.memberlist.cluster-label-verification-disabled + When true, memberlist doesn't verify that inbound packets and gossip streams have the cluster label matching the configured one. This verification should be disabled while rolling out the change to the configured cluster label in a live memberlist cluster. + -ingester.ring.memberlist.compression-enabled + Enable message compression. This can be used to reduce bandwidth usage at the cost of slightly more CPU utilization. (default true) + -ingester.ring.memberlist.dead-node-reclaim-time duration + How soon can dead node's name be reclaimed with new address. 0 to disable. + -ingester.ring.memberlist.gossip-interval duration + How often to gossip. (default 200ms) + -ingester.ring.memberlist.gossip-nodes int + How many nodes to gossip to. (default 3) + -ingester.ring.memberlist.gossip-to-dead-nodes-time duration + How long to keep gossiping to dead nodes, to give them chance to refute their death. (default 30s) + -ingester.ring.memberlist.join string + Other cluster members to join. Can be specified multiple times. It can be an IP, hostname or an entry specified in the DNS Service Discovery format. + -ingester.ring.memberlist.leave-timeout duration + Timeout for leaving memberlist cluster. (default 20s) + -ingester.ring.memberlist.left-ingesters-timeout duration + How long to keep LEFT ingesters in the ring. (default 5m0s) + -ingester.ring.memberlist.max-concurrent-writes int + Maximum number of concurrent writes to other nodes. (default 3) + -ingester.ring.memberlist.max-join-backoff duration + Max backoff duration to join other cluster members. (default 1m0s) + -ingester.ring.memberlist.max-join-retries int + Max number of retries to join other cluster members. (default 10) + -ingester.ring.memberlist.message-history-buffer-bytes int + How much space to use for keeping received and sent messages in memory for troubleshooting (two buffers). 0 to disable. + -ingester.ring.memberlist.min-join-backoff duration + Min backoff duration to join other cluster members. (default 1s) + -ingester.ring.memberlist.nodename string + Name of the node in memberlist cluster. Defaults to hostname. + -ingester.ring.memberlist.notify-interval duration + How frequently to notify watchers when a key changes. Can reduce CPU activity in large memberlist deployments. 0 to notify without delay. + -ingester.ring.memberlist.packet-dial-timeout duration + Timeout used when connecting to other nodes to send packet. (default 2s) + -ingester.ring.memberlist.packet-write-timeout duration + Timeout for writing 'packet' data. (default 5s) + -ingester.ring.memberlist.pullpush-interval duration + How often to use pull/push sync. (default 30s) + -ingester.ring.memberlist.randomize-node-name + Add random suffix to the node name. (default true) + -ingester.ring.memberlist.rejoin-interval duration + If not 0, how often to rejoin the cluster. Occasional rejoin can help to fix the cluster split issue, and is harmless otherwise. For example when using only few components as a seed nodes (via -memberlist.join), then it's recommended to use rejoin. If -memberlist.join points to dynamic service that resolves to all gossiping nodes (eg. Kubernetes headless service), then rejoin is not needed. + -ingester.ring.memberlist.retransmit-factor int + Multiplication factor used when sending out messages (factor * log(N+1)). (default 4) + -ingester.ring.memberlist.stream-timeout duration + The timeout for establishing a connection with a remote node, and for read/write operations. (default 2s) + -ingester.ring.memberlist.tls-ca-path string + Path to the CA certificates to validate server certificate against. If not set, the host's root CA certificates are used. + -ingester.ring.memberlist.tls-cert-path string + Path to the client certificate, which will be used for authenticating with the server. Also requires the key path to be configured. + -ingester.ring.memberlist.tls-cipher-suites string + Override the default cipher suite list (separated by commas). + -ingester.ring.memberlist.tls-enabled + Enable TLS on the memberlist transport layer. + -ingester.ring.memberlist.tls-insecure-skip-verify + Skip validating server certificate. + -ingester.ring.memberlist.tls-key-path string + Path to the key for the client certificate. Also requires the client certificate to be configured. + -ingester.ring.memberlist.tls-min-version string + Override the default minimum TLS version. Allowed values: VersionTLS10, VersionTLS11, VersionTLS12, VersionTLS13 + -ingester.ring.memberlist.tls-server-name string + Override the expected name on the server certificate. + -ingester.ring.memberlist.transport-debug + Log debug transport messages. Note: global log.level must be at debug level as well. -ingester.ring.min-ready-duration duration Minimum duration to wait after the internal readiness checks have passed but before succeeding the readiness endpoint. This is used to slowdown deployment controllers (eg. Kubernetes) after an instance is ready and before they proceed with a rolling update, to give the rest of the cluster instances enough time to receive ring updates. (default 15s) -ingester.ring.multi.mirror-enabled @@ -1993,6 +2473,86 @@ Usage of ./cmd/mimir/mimir: List of network interface names to look up when finding the instance IP address. (default []) -overrides-exporter.ring.instance-port int Port to advertise in the ring (defaults to -server.grpc-listen-port). + -overrides-exporter.ring.memberlist.abort-if-join-fails + If this node fails to join memberlist cluster, abort. + -overrides-exporter.ring.memberlist.acquire-writer-timeout duration + Timeout for acquiring one of the concurrent write slots. After this time, the message will be dropped. (default 250ms) + -overrides-exporter.ring.memberlist.advertise-addr string + Gossip address to advertise to other members in the cluster. Used for NAT traversal. + -overrides-exporter.ring.memberlist.advertise-port int + Gossip port to advertise to other members in the cluster. Used for NAT traversal. (default 7946) + -overrides-exporter.ring.memberlist.bind-addr string + IP address to listen on for gossip messages. Multiple addresses may be specified. Defaults to 0.0.0.0 + -overrides-exporter.ring.memberlist.bind-port int + Port to listen on for gossip messages. (default 7946) + -overrides-exporter.ring.memberlist.broadcast-timeout-for-local-updates-on-shutdown duration + Timeout for broadcasting all remaining locally-generated updates to other nodes when shutting down. Only used if there are nodes left in the memberlist cluster, and only applies to locally-generated updates, not to broadcast messages that are result of incoming gossip updates. 0 = no timeout, wait until all locally-generated updates are sent. (default 10s) + -overrides-exporter.ring.memberlist.cluster-label string + The cluster label is an optional string to include in outbound packets and gossip streams. Other members in the memberlist cluster will discard any message whose label doesn't match the configured one, unless the 'cluster-label-verification-disabled' configuration option is set to true. + -overrides-exporter.ring.memberlist.cluster-label-verification-disabled + When true, memberlist doesn't verify that inbound packets and gossip streams have the cluster label matching the configured one. This verification should be disabled while rolling out the change to the configured cluster label in a live memberlist cluster. + -overrides-exporter.ring.memberlist.compression-enabled + Enable message compression. This can be used to reduce bandwidth usage at the cost of slightly more CPU utilization. (default true) + -overrides-exporter.ring.memberlist.dead-node-reclaim-time duration + How soon can dead node's name be reclaimed with new address. 0 to disable. + -overrides-exporter.ring.memberlist.gossip-interval duration + How often to gossip. (default 200ms) + -overrides-exporter.ring.memberlist.gossip-nodes int + How many nodes to gossip to. (default 3) + -overrides-exporter.ring.memberlist.gossip-to-dead-nodes-time duration + How long to keep gossiping to dead nodes, to give them chance to refute their death. (default 30s) + -overrides-exporter.ring.memberlist.join string + Other cluster members to join. Can be specified multiple times. It can be an IP, hostname or an entry specified in the DNS Service Discovery format. + -overrides-exporter.ring.memberlist.leave-timeout duration + Timeout for leaving memberlist cluster. (default 20s) + -overrides-exporter.ring.memberlist.left-ingesters-timeout duration + How long to keep LEFT ingesters in the ring. (default 5m0s) + -overrides-exporter.ring.memberlist.max-concurrent-writes int + Maximum number of concurrent writes to other nodes. (default 3) + -overrides-exporter.ring.memberlist.max-join-backoff duration + Max backoff duration to join other cluster members. (default 1m0s) + -overrides-exporter.ring.memberlist.max-join-retries int + Max number of retries to join other cluster members. (default 10) + -overrides-exporter.ring.memberlist.message-history-buffer-bytes int + How much space to use for keeping received and sent messages in memory for troubleshooting (two buffers). 0 to disable. + -overrides-exporter.ring.memberlist.min-join-backoff duration + Min backoff duration to join other cluster members. (default 1s) + -overrides-exporter.ring.memberlist.nodename string + Name of the node in memberlist cluster. Defaults to hostname. + -overrides-exporter.ring.memberlist.notify-interval duration + How frequently to notify watchers when a key changes. Can reduce CPU activity in large memberlist deployments. 0 to notify without delay. + -overrides-exporter.ring.memberlist.packet-dial-timeout duration + Timeout used when connecting to other nodes to send packet. (default 2s) + -overrides-exporter.ring.memberlist.packet-write-timeout duration + Timeout for writing 'packet' data. (default 5s) + -overrides-exporter.ring.memberlist.pullpush-interval duration + How often to use pull/push sync. (default 30s) + -overrides-exporter.ring.memberlist.randomize-node-name + Add random suffix to the node name. (default true) + -overrides-exporter.ring.memberlist.rejoin-interval duration + If not 0, how often to rejoin the cluster. Occasional rejoin can help to fix the cluster split issue, and is harmless otherwise. For example when using only few components as a seed nodes (via -memberlist.join), then it's recommended to use rejoin. If -memberlist.join points to dynamic service that resolves to all gossiping nodes (eg. Kubernetes headless service), then rejoin is not needed. + -overrides-exporter.ring.memberlist.retransmit-factor int + Multiplication factor used when sending out messages (factor * log(N+1)). (default 4) + -overrides-exporter.ring.memberlist.stream-timeout duration + The timeout for establishing a connection with a remote node, and for read/write operations. (default 2s) + -overrides-exporter.ring.memberlist.tls-ca-path string + Path to the CA certificates to validate server certificate against. If not set, the host's root CA certificates are used. + -overrides-exporter.ring.memberlist.tls-cert-path string + Path to the client certificate, which will be used for authenticating with the server. Also requires the key path to be configured. + -overrides-exporter.ring.memberlist.tls-cipher-suites string + Override the default cipher suite list (separated by commas). + -overrides-exporter.ring.memberlist.tls-enabled + Enable TLS on the memberlist transport layer. + -overrides-exporter.ring.memberlist.tls-insecure-skip-verify + Skip validating server certificate. + -overrides-exporter.ring.memberlist.tls-key-path string + Path to the key for the client certificate. Also requires the client certificate to be configured. + -overrides-exporter.ring.memberlist.tls-min-version string + Override the default minimum TLS version. Allowed values: VersionTLS10, VersionTLS11, VersionTLS12, VersionTLS13 + -overrides-exporter.ring.memberlist.tls-server-name string + Override the expected name on the server certificate. + -overrides-exporter.ring.memberlist.transport-debug + Log debug transport messages. Note: global log.level must be at debug level as well. -overrides-exporter.ring.multi.mirror-enabled Mirror writes to secondary store. -overrides-exporter.ring.multi.mirror-timeout duration @@ -2523,6 +3083,86 @@ Usage of ./cmd/mimir/mimir: List of network interface names to look up when finding the instance IP address. (default []) -query-scheduler.ring.instance-port int Port to advertise in the ring (defaults to -server.grpc-listen-port). + -query-scheduler.ring.memberlist.abort-if-join-fails + If this node fails to join memberlist cluster, abort. + -query-scheduler.ring.memberlist.acquire-writer-timeout duration + Timeout for acquiring one of the concurrent write slots. After this time, the message will be dropped. (default 250ms) + -query-scheduler.ring.memberlist.advertise-addr string + Gossip address to advertise to other members in the cluster. Used for NAT traversal. + -query-scheduler.ring.memberlist.advertise-port int + Gossip port to advertise to other members in the cluster. Used for NAT traversal. (default 7946) + -query-scheduler.ring.memberlist.bind-addr string + IP address to listen on for gossip messages. Multiple addresses may be specified. Defaults to 0.0.0.0 + -query-scheduler.ring.memberlist.bind-port int + Port to listen on for gossip messages. (default 7946) + -query-scheduler.ring.memberlist.broadcast-timeout-for-local-updates-on-shutdown duration + Timeout for broadcasting all remaining locally-generated updates to other nodes when shutting down. Only used if there are nodes left in the memberlist cluster, and only applies to locally-generated updates, not to broadcast messages that are result of incoming gossip updates. 0 = no timeout, wait until all locally-generated updates are sent. (default 10s) + -query-scheduler.ring.memberlist.cluster-label string + The cluster label is an optional string to include in outbound packets and gossip streams. Other members in the memberlist cluster will discard any message whose label doesn't match the configured one, unless the 'cluster-label-verification-disabled' configuration option is set to true. + -query-scheduler.ring.memberlist.cluster-label-verification-disabled + When true, memberlist doesn't verify that inbound packets and gossip streams have the cluster label matching the configured one. This verification should be disabled while rolling out the change to the configured cluster label in a live memberlist cluster. + -query-scheduler.ring.memberlist.compression-enabled + Enable message compression. This can be used to reduce bandwidth usage at the cost of slightly more CPU utilization. (default true) + -query-scheduler.ring.memberlist.dead-node-reclaim-time duration + How soon can dead node's name be reclaimed with new address. 0 to disable. + -query-scheduler.ring.memberlist.gossip-interval duration + How often to gossip. (default 200ms) + -query-scheduler.ring.memberlist.gossip-nodes int + How many nodes to gossip to. (default 3) + -query-scheduler.ring.memberlist.gossip-to-dead-nodes-time duration + How long to keep gossiping to dead nodes, to give them chance to refute their death. (default 30s) + -query-scheduler.ring.memberlist.join string + Other cluster members to join. Can be specified multiple times. It can be an IP, hostname or an entry specified in the DNS Service Discovery format. + -query-scheduler.ring.memberlist.leave-timeout duration + Timeout for leaving memberlist cluster. (default 20s) + -query-scheduler.ring.memberlist.left-ingesters-timeout duration + How long to keep LEFT ingesters in the ring. (default 5m0s) + -query-scheduler.ring.memberlist.max-concurrent-writes int + Maximum number of concurrent writes to other nodes. (default 3) + -query-scheduler.ring.memberlist.max-join-backoff duration + Max backoff duration to join other cluster members. (default 1m0s) + -query-scheduler.ring.memberlist.max-join-retries int + Max number of retries to join other cluster members. (default 10) + -query-scheduler.ring.memberlist.message-history-buffer-bytes int + How much space to use for keeping received and sent messages in memory for troubleshooting (two buffers). 0 to disable. + -query-scheduler.ring.memberlist.min-join-backoff duration + Min backoff duration to join other cluster members. (default 1s) + -query-scheduler.ring.memberlist.nodename string + Name of the node in memberlist cluster. Defaults to hostname. + -query-scheduler.ring.memberlist.notify-interval duration + How frequently to notify watchers when a key changes. Can reduce CPU activity in large memberlist deployments. 0 to notify without delay. + -query-scheduler.ring.memberlist.packet-dial-timeout duration + Timeout used when connecting to other nodes to send packet. (default 2s) + -query-scheduler.ring.memberlist.packet-write-timeout duration + Timeout for writing 'packet' data. (default 5s) + -query-scheduler.ring.memberlist.pullpush-interval duration + How often to use pull/push sync. (default 30s) + -query-scheduler.ring.memberlist.randomize-node-name + Add random suffix to the node name. (default true) + -query-scheduler.ring.memberlist.rejoin-interval duration + If not 0, how often to rejoin the cluster. Occasional rejoin can help to fix the cluster split issue, and is harmless otherwise. For example when using only few components as a seed nodes (via -memberlist.join), then it's recommended to use rejoin. If -memberlist.join points to dynamic service that resolves to all gossiping nodes (eg. Kubernetes headless service), then rejoin is not needed. + -query-scheduler.ring.memberlist.retransmit-factor int + Multiplication factor used when sending out messages (factor * log(N+1)). (default 4) + -query-scheduler.ring.memberlist.stream-timeout duration + The timeout for establishing a connection with a remote node, and for read/write operations. (default 2s) + -query-scheduler.ring.memberlist.tls-ca-path string + Path to the CA certificates to validate server certificate against. If not set, the host's root CA certificates are used. + -query-scheduler.ring.memberlist.tls-cert-path string + Path to the client certificate, which will be used for authenticating with the server. Also requires the key path to be configured. + -query-scheduler.ring.memberlist.tls-cipher-suites string + Override the default cipher suite list (separated by commas). + -query-scheduler.ring.memberlist.tls-enabled + Enable TLS on the memberlist transport layer. + -query-scheduler.ring.memberlist.tls-insecure-skip-verify + Skip validating server certificate. + -query-scheduler.ring.memberlist.tls-key-path string + Path to the key for the client certificate. Also requires the client certificate to be configured. + -query-scheduler.ring.memberlist.tls-min-version string + Override the default minimum TLS version. Allowed values: VersionTLS10, VersionTLS11, VersionTLS12, VersionTLS13 + -query-scheduler.ring.memberlist.tls-server-name string + Override the expected name on the server certificate. + -query-scheduler.ring.memberlist.transport-debug + Log debug transport messages. Note: global log.level must be at debug level as well. -query-scheduler.ring.multi.mirror-enabled Mirror writes to secondary store. -query-scheduler.ring.multi.mirror-timeout duration @@ -3033,6 +3673,86 @@ Usage of ./cmd/mimir/mimir: List of network interface names to look up when finding the instance IP address. (default []) -ruler.ring.instance-port int Port to advertise in the ring (defaults to -server.grpc-listen-port). + -ruler.ring.memberlist.abort-if-join-fails + If this node fails to join memberlist cluster, abort. + -ruler.ring.memberlist.acquire-writer-timeout duration + Timeout for acquiring one of the concurrent write slots. After this time, the message will be dropped. (default 250ms) + -ruler.ring.memberlist.advertise-addr string + Gossip address to advertise to other members in the cluster. Used for NAT traversal. + -ruler.ring.memberlist.advertise-port int + Gossip port to advertise to other members in the cluster. Used for NAT traversal. (default 7946) + -ruler.ring.memberlist.bind-addr string + IP address to listen on for gossip messages. Multiple addresses may be specified. Defaults to 0.0.0.0 + -ruler.ring.memberlist.bind-port int + Port to listen on for gossip messages. (default 7946) + -ruler.ring.memberlist.broadcast-timeout-for-local-updates-on-shutdown duration + Timeout for broadcasting all remaining locally-generated updates to other nodes when shutting down. Only used if there are nodes left in the memberlist cluster, and only applies to locally-generated updates, not to broadcast messages that are result of incoming gossip updates. 0 = no timeout, wait until all locally-generated updates are sent. (default 10s) + -ruler.ring.memberlist.cluster-label string + The cluster label is an optional string to include in outbound packets and gossip streams. Other members in the memberlist cluster will discard any message whose label doesn't match the configured one, unless the 'cluster-label-verification-disabled' configuration option is set to true. + -ruler.ring.memberlist.cluster-label-verification-disabled + When true, memberlist doesn't verify that inbound packets and gossip streams have the cluster label matching the configured one. This verification should be disabled while rolling out the change to the configured cluster label in a live memberlist cluster. + -ruler.ring.memberlist.compression-enabled + Enable message compression. This can be used to reduce bandwidth usage at the cost of slightly more CPU utilization. (default true) + -ruler.ring.memberlist.dead-node-reclaim-time duration + How soon can dead node's name be reclaimed with new address. 0 to disable. + -ruler.ring.memberlist.gossip-interval duration + How often to gossip. (default 200ms) + -ruler.ring.memberlist.gossip-nodes int + How many nodes to gossip to. (default 3) + -ruler.ring.memberlist.gossip-to-dead-nodes-time duration + How long to keep gossiping to dead nodes, to give them chance to refute their death. (default 30s) + -ruler.ring.memberlist.join string + Other cluster members to join. Can be specified multiple times. It can be an IP, hostname or an entry specified in the DNS Service Discovery format. + -ruler.ring.memberlist.leave-timeout duration + Timeout for leaving memberlist cluster. (default 20s) + -ruler.ring.memberlist.left-ingesters-timeout duration + How long to keep LEFT ingesters in the ring. (default 5m0s) + -ruler.ring.memberlist.max-concurrent-writes int + Maximum number of concurrent writes to other nodes. (default 3) + -ruler.ring.memberlist.max-join-backoff duration + Max backoff duration to join other cluster members. (default 1m0s) + -ruler.ring.memberlist.max-join-retries int + Max number of retries to join other cluster members. (default 10) + -ruler.ring.memberlist.message-history-buffer-bytes int + How much space to use for keeping received and sent messages in memory for troubleshooting (two buffers). 0 to disable. + -ruler.ring.memberlist.min-join-backoff duration + Min backoff duration to join other cluster members. (default 1s) + -ruler.ring.memberlist.nodename string + Name of the node in memberlist cluster. Defaults to hostname. + -ruler.ring.memberlist.notify-interval duration + How frequently to notify watchers when a key changes. Can reduce CPU activity in large memberlist deployments. 0 to notify without delay. + -ruler.ring.memberlist.packet-dial-timeout duration + Timeout used when connecting to other nodes to send packet. (default 2s) + -ruler.ring.memberlist.packet-write-timeout duration + Timeout for writing 'packet' data. (default 5s) + -ruler.ring.memberlist.pullpush-interval duration + How often to use pull/push sync. (default 30s) + -ruler.ring.memberlist.randomize-node-name + Add random suffix to the node name. (default true) + -ruler.ring.memberlist.rejoin-interval duration + If not 0, how often to rejoin the cluster. Occasional rejoin can help to fix the cluster split issue, and is harmless otherwise. For example when using only few components as a seed nodes (via -memberlist.join), then it's recommended to use rejoin. If -memberlist.join points to dynamic service that resolves to all gossiping nodes (eg. Kubernetes headless service), then rejoin is not needed. + -ruler.ring.memberlist.retransmit-factor int + Multiplication factor used when sending out messages (factor * log(N+1)). (default 4) + -ruler.ring.memberlist.stream-timeout duration + The timeout for establishing a connection with a remote node, and for read/write operations. (default 2s) + -ruler.ring.memberlist.tls-ca-path string + Path to the CA certificates to validate server certificate against. If not set, the host's root CA certificates are used. + -ruler.ring.memberlist.tls-cert-path string + Path to the client certificate, which will be used for authenticating with the server. Also requires the key path to be configured. + -ruler.ring.memberlist.tls-cipher-suites string + Override the default cipher suite list (separated by commas). + -ruler.ring.memberlist.tls-enabled + Enable TLS on the memberlist transport layer. + -ruler.ring.memberlist.tls-insecure-skip-verify + Skip validating server certificate. + -ruler.ring.memberlist.tls-key-path string + Path to the key for the client certificate. Also requires the client certificate to be configured. + -ruler.ring.memberlist.tls-min-version string + Override the default minimum TLS version. Allowed values: VersionTLS10, VersionTLS11, VersionTLS12, VersionTLS13 + -ruler.ring.memberlist.tls-server-name string + Override the expected name on the server certificate. + -ruler.ring.memberlist.transport-debug + Log debug transport messages. Note: global log.level must be at debug level as well. -ruler.ring.multi.mirror-enabled Mirror writes to secondary store. -ruler.ring.multi.mirror-timeout duration @@ -3217,6 +3937,86 @@ Usage of ./cmd/mimir/mimir: List of network interface names to look up when finding the instance IP address. (default []) -store-gateway.sharding-ring.instance-port int Port to advertise in the ring (defaults to -server.grpc-listen-port). + -store-gateway.sharding-ring.memberlist.abort-if-join-fails + If this node fails to join memberlist cluster, abort. + -store-gateway.sharding-ring.memberlist.acquire-writer-timeout duration + Timeout for acquiring one of the concurrent write slots. After this time, the message will be dropped. (default 250ms) + -store-gateway.sharding-ring.memberlist.advertise-addr string + Gossip address to advertise to other members in the cluster. Used for NAT traversal. + -store-gateway.sharding-ring.memberlist.advertise-port int + Gossip port to advertise to other members in the cluster. Used for NAT traversal. (default 7946) + -store-gateway.sharding-ring.memberlist.bind-addr string + IP address to listen on for gossip messages. Multiple addresses may be specified. Defaults to 0.0.0.0 + -store-gateway.sharding-ring.memberlist.bind-port int + Port to listen on for gossip messages. (default 7946) + -store-gateway.sharding-ring.memberlist.broadcast-timeout-for-local-updates-on-shutdown duration + Timeout for broadcasting all remaining locally-generated updates to other nodes when shutting down. Only used if there are nodes left in the memberlist cluster, and only applies to locally-generated updates, not to broadcast messages that are result of incoming gossip updates. 0 = no timeout, wait until all locally-generated updates are sent. (default 10s) + -store-gateway.sharding-ring.memberlist.cluster-label string + The cluster label is an optional string to include in outbound packets and gossip streams. Other members in the memberlist cluster will discard any message whose label doesn't match the configured one, unless the 'cluster-label-verification-disabled' configuration option is set to true. + -store-gateway.sharding-ring.memberlist.cluster-label-verification-disabled + When true, memberlist doesn't verify that inbound packets and gossip streams have the cluster label matching the configured one. This verification should be disabled while rolling out the change to the configured cluster label in a live memberlist cluster. + -store-gateway.sharding-ring.memberlist.compression-enabled + Enable message compression. This can be used to reduce bandwidth usage at the cost of slightly more CPU utilization. (default true) + -store-gateway.sharding-ring.memberlist.dead-node-reclaim-time duration + How soon can dead node's name be reclaimed with new address. 0 to disable. + -store-gateway.sharding-ring.memberlist.gossip-interval duration + How often to gossip. (default 200ms) + -store-gateway.sharding-ring.memberlist.gossip-nodes int + How many nodes to gossip to. (default 3) + -store-gateway.sharding-ring.memberlist.gossip-to-dead-nodes-time duration + How long to keep gossiping to dead nodes, to give them chance to refute their death. (default 30s) + -store-gateway.sharding-ring.memberlist.join string + Other cluster members to join. Can be specified multiple times. It can be an IP, hostname or an entry specified in the DNS Service Discovery format. + -store-gateway.sharding-ring.memberlist.leave-timeout duration + Timeout for leaving memberlist cluster. (default 20s) + -store-gateway.sharding-ring.memberlist.left-ingesters-timeout duration + How long to keep LEFT ingesters in the ring. (default 5m0s) + -store-gateway.sharding-ring.memberlist.max-concurrent-writes int + Maximum number of concurrent writes to other nodes. (default 3) + -store-gateway.sharding-ring.memberlist.max-join-backoff duration + Max backoff duration to join other cluster members. (default 1m0s) + -store-gateway.sharding-ring.memberlist.max-join-retries int + Max number of retries to join other cluster members. (default 10) + -store-gateway.sharding-ring.memberlist.message-history-buffer-bytes int + How much space to use for keeping received and sent messages in memory for troubleshooting (two buffers). 0 to disable. + -store-gateway.sharding-ring.memberlist.min-join-backoff duration + Min backoff duration to join other cluster members. (default 1s) + -store-gateway.sharding-ring.memberlist.nodename string + Name of the node in memberlist cluster. Defaults to hostname. + -store-gateway.sharding-ring.memberlist.notify-interval duration + How frequently to notify watchers when a key changes. Can reduce CPU activity in large memberlist deployments. 0 to notify without delay. + -store-gateway.sharding-ring.memberlist.packet-dial-timeout duration + Timeout used when connecting to other nodes to send packet. (default 2s) + -store-gateway.sharding-ring.memberlist.packet-write-timeout duration + Timeout for writing 'packet' data. (default 5s) + -store-gateway.sharding-ring.memberlist.pullpush-interval duration + How often to use pull/push sync. (default 30s) + -store-gateway.sharding-ring.memberlist.randomize-node-name + Add random suffix to the node name. (default true) + -store-gateway.sharding-ring.memberlist.rejoin-interval duration + If not 0, how often to rejoin the cluster. Occasional rejoin can help to fix the cluster split issue, and is harmless otherwise. For example when using only few components as a seed nodes (via -memberlist.join), then it's recommended to use rejoin. If -memberlist.join points to dynamic service that resolves to all gossiping nodes (eg. Kubernetes headless service), then rejoin is not needed. + -store-gateway.sharding-ring.memberlist.retransmit-factor int + Multiplication factor used when sending out messages (factor * log(N+1)). (default 4) + -store-gateway.sharding-ring.memberlist.stream-timeout duration + The timeout for establishing a connection with a remote node, and for read/write operations. (default 2s) + -store-gateway.sharding-ring.memberlist.tls-ca-path string + Path to the CA certificates to validate server certificate against. If not set, the host's root CA certificates are used. + -store-gateway.sharding-ring.memberlist.tls-cert-path string + Path to the client certificate, which will be used for authenticating with the server. Also requires the key path to be configured. + -store-gateway.sharding-ring.memberlist.tls-cipher-suites string + Override the default cipher suite list (separated by commas). + -store-gateway.sharding-ring.memberlist.tls-enabled + Enable TLS on the memberlist transport layer. + -store-gateway.sharding-ring.memberlist.tls-insecure-skip-verify + Skip validating server certificate. + -store-gateway.sharding-ring.memberlist.tls-key-path string + Path to the key for the client certificate. Also requires the client certificate to be configured. + -store-gateway.sharding-ring.memberlist.tls-min-version string + Override the default minimum TLS version. Allowed values: VersionTLS10, VersionTLS11, VersionTLS12, VersionTLS13 + -store-gateway.sharding-ring.memberlist.tls-server-name string + Override the expected name on the server certificate. + -store-gateway.sharding-ring.memberlist.transport-debug + Log debug transport messages. Note: global log.level must be at debug level as well. -store-gateway.sharding-ring.multi.mirror-enabled Mirror writes to secondary store. -store-gateway.sharding-ring.multi.mirror-timeout duration diff --git a/cmd/mimir/help.txt.tmpl b/cmd/mimir/help.txt.tmpl index be995ba312e..ac119ee7911 100644 --- a/cmd/mimir/help.txt.tmpl +++ b/cmd/mimir/help.txt.tmpl @@ -119,6 +119,18 @@ Usage of ./cmd/mimir/mimir: Etcd username. -alertmanager.sharding-ring.instance-interface-names string List of network interface names to look up when finding the instance IP address. (default []) + -alertmanager.sharding-ring.memberlist.abort-if-join-fails + If this node fails to join memberlist cluster, abort. + -alertmanager.sharding-ring.memberlist.advertise-addr string + Gossip address to advertise to other members in the cluster. Used for NAT traversal. + -alertmanager.sharding-ring.memberlist.advertise-port int + Gossip port to advertise to other members in the cluster. Used for NAT traversal. (default 7946) + -alertmanager.sharding-ring.memberlist.bind-addr string + IP address to listen on for gossip messages. Multiple addresses may be specified. Defaults to 0.0.0.0 + -alertmanager.sharding-ring.memberlist.bind-port int + Port to listen on for gossip messages. (default 7946) + -alertmanager.sharding-ring.memberlist.join string + Other cluster members to join. Can be specified multiple times. It can be an IP, hostname or an entry specified in the DNS Service Discovery format. -alertmanager.sharding-ring.store string Backend storage to use for the ring. Supported values are: consul, etcd, inmemory, memberlist, multi. (default "memberlist") -alertmanager.storage.path string @@ -335,6 +347,18 @@ Usage of ./cmd/mimir/mimir: Etcd username. -compactor.ring.instance-interface-names string List of network interface names to look up when finding the instance IP address. (default []) + -compactor.ring.memberlist.abort-if-join-fails + If this node fails to join memberlist cluster, abort. + -compactor.ring.memberlist.advertise-addr string + Gossip address to advertise to other members in the cluster. Used for NAT traversal. + -compactor.ring.memberlist.advertise-port int + Gossip port to advertise to other members in the cluster. Used for NAT traversal. (default 7946) + -compactor.ring.memberlist.bind-addr string + IP address to listen on for gossip messages. Multiple addresses may be specified. Defaults to 0.0.0.0 + -compactor.ring.memberlist.bind-port int + Port to listen on for gossip messages. (default 7946) + -compactor.ring.memberlist.join string + Other cluster members to join. Can be specified multiple times. It can be an IP, hostname or an entry specified in the DNS Service Discovery format. -compactor.ring.store string Backend storage to use for the ring. Supported values are: consul, etcd, inmemory, memberlist, multi. (default "memberlist") -compactor.split-and-merge-shards int @@ -361,6 +385,18 @@ Usage of ./cmd/mimir/mimir: Etcd username. -distributor.ha-tracker.max-clusters int Maximum number of clusters that HA tracker will keep track of for a single tenant. 0 to disable the limit. (default 100) + -distributor.ha-tracker.memberlist.abort-if-join-fails + If this node fails to join memberlist cluster, abort. + -distributor.ha-tracker.memberlist.advertise-addr string + Gossip address to advertise to other members in the cluster. Used for NAT traversal. + -distributor.ha-tracker.memberlist.advertise-port int + Gossip port to advertise to other members in the cluster. Used for NAT traversal. (default 7946) + -distributor.ha-tracker.memberlist.bind-addr string + IP address to listen on for gossip messages. Multiple addresses may be specified. Defaults to 0.0.0.0 + -distributor.ha-tracker.memberlist.bind-port int + Port to listen on for gossip messages. (default 7946) + -distributor.ha-tracker.memberlist.join string + Other cluster members to join. Can be specified multiple times. It can be an IP, hostname or an entry specified in the DNS Service Discovery format. -distributor.ha-tracker.replica string Prometheus label to look for in samples to identify a Prometheus HA replica. (default "__replica__") -distributor.ha-tracker.store string @@ -385,6 +421,18 @@ Usage of ./cmd/mimir/mimir: Etcd username. -distributor.ring.instance-interface-names string List of network interface names to look up when finding the instance IP address. (default []) + -distributor.ring.memberlist.abort-if-join-fails + If this node fails to join memberlist cluster, abort. + -distributor.ring.memberlist.advertise-addr string + Gossip address to advertise to other members in the cluster. Used for NAT traversal. + -distributor.ring.memberlist.advertise-port int + Gossip port to advertise to other members in the cluster. Used for NAT traversal. (default 7946) + -distributor.ring.memberlist.bind-addr string + IP address to listen on for gossip messages. Multiple addresses may be specified. Defaults to 0.0.0.0 + -distributor.ring.memberlist.bind-port int + Port to listen on for gossip messages. (default 7946) + -distributor.ring.memberlist.join string + Other cluster members to join. Can be specified multiple times. It can be an IP, hostname or an entry specified in the DNS Service Discovery format. -distributor.ring.store string Backend storage to use for the ring. Supported values are: consul, etcd, inmemory, memberlist, multi. (default "memberlist") -h @@ -475,6 +523,18 @@ Usage of ./cmd/mimir/mimir: Etcd password. -ingester.partition-ring.etcd.username string Etcd username. + -ingester.partition-ring.memberlist.abort-if-join-fails + If this node fails to join memberlist cluster, abort. + -ingester.partition-ring.memberlist.advertise-addr string + Gossip address to advertise to other members in the cluster. Used for NAT traversal. + -ingester.partition-ring.memberlist.advertise-port int + Gossip port to advertise to other members in the cluster. Used for NAT traversal. (default 7946) + -ingester.partition-ring.memberlist.bind-addr string + IP address to listen on for gossip messages. Multiple addresses may be specified. Defaults to 0.0.0.0 + -ingester.partition-ring.memberlist.bind-port int + Port to listen on for gossip messages. (default 7946) + -ingester.partition-ring.memberlist.join string + Other cluster members to join. Can be specified multiple times. It can be an IP, hostname or an entry specified in the DNS Service Discovery format. -ingester.partition-ring.min-partition-owners-count int Minimum number of owners to wait before a PENDING partition gets switched to ACTIVE. (default 1) -ingester.partition-ring.min-partition-owners-duration duration @@ -489,6 +549,18 @@ Usage of ./cmd/mimir/mimir: Etcd password. -ingester.ring.etcd.username string Etcd username. + -ingester.ring.memberlist.abort-if-join-fails + If this node fails to join memberlist cluster, abort. + -ingester.ring.memberlist.advertise-addr string + Gossip address to advertise to other members in the cluster. Used for NAT traversal. + -ingester.ring.memberlist.advertise-port int + Gossip port to advertise to other members in the cluster. Used for NAT traversal. (default 7946) + -ingester.ring.memberlist.bind-addr string + IP address to listen on for gossip messages. Multiple addresses may be specified. Defaults to 0.0.0.0 + -ingester.ring.memberlist.bind-port int + Port to listen on for gossip messages. (default 7946) + -ingester.ring.memberlist.join string + Other cluster members to join. Can be specified multiple times. It can be an IP, hostname or an entry specified in the DNS Service Discovery format. -ingester.ring.replication-factor int Number of ingesters that each time series is replicated to. This option needs be set on ingesters, distributors, queriers, and rulers when running in microservices mode. (default 3) -ingester.ring.store string @@ -529,6 +601,18 @@ Usage of ./cmd/mimir/mimir: Etcd username. -overrides-exporter.ring.instance-interface-names string List of network interface names to look up when finding the instance IP address. (default []) + -overrides-exporter.ring.memberlist.abort-if-join-fails + If this node fails to join memberlist cluster, abort. + -overrides-exporter.ring.memberlist.advertise-addr string + Gossip address to advertise to other members in the cluster. Used for NAT traversal. + -overrides-exporter.ring.memberlist.advertise-port int + Gossip port to advertise to other members in the cluster. Used for NAT traversal. (default 7946) + -overrides-exporter.ring.memberlist.bind-addr string + IP address to listen on for gossip messages. Multiple addresses may be specified. Defaults to 0.0.0.0 + -overrides-exporter.ring.memberlist.bind-port int + Port to listen on for gossip messages. (default 7946) + -overrides-exporter.ring.memberlist.join string + Other cluster members to join. Can be specified multiple times. It can be an IP, hostname or an entry specified in the DNS Service Discovery format. -overrides-exporter.ring.store string Backend storage to use for the ring. Supported values are: consul, etcd, inmemory, memberlist, multi. (default "memberlist") -print.config @@ -617,6 +701,18 @@ Usage of ./cmd/mimir/mimir: Etcd username. -query-scheduler.ring.instance-interface-names string List of network interface names to look up when finding the instance IP address. (default []) + -query-scheduler.ring.memberlist.abort-if-join-fails + If this node fails to join memberlist cluster, abort. + -query-scheduler.ring.memberlist.advertise-addr string + Gossip address to advertise to other members in the cluster. Used for NAT traversal. + -query-scheduler.ring.memberlist.advertise-port int + Gossip port to advertise to other members in the cluster. Used for NAT traversal. (default 7946) + -query-scheduler.ring.memberlist.bind-addr string + IP address to listen on for gossip messages. Multiple addresses may be specified. Defaults to 0.0.0.0 + -query-scheduler.ring.memberlist.bind-port int + Port to listen on for gossip messages. (default 7946) + -query-scheduler.ring.memberlist.join string + Other cluster members to join. Can be specified multiple times. It can be an IP, hostname or an entry specified in the DNS Service Discovery format. -query-scheduler.ring.store string Backend storage to use for the ring. Supported values are: consul, etcd, inmemory, memberlist, multi. (default "memberlist") -ruler-storage.azure.account-key string @@ -743,6 +839,18 @@ Usage of ./cmd/mimir/mimir: Etcd username. -ruler.ring.instance-interface-names string List of network interface names to look up when finding the instance IP address. (default []) + -ruler.ring.memberlist.abort-if-join-fails + If this node fails to join memberlist cluster, abort. + -ruler.ring.memberlist.advertise-addr string + Gossip address to advertise to other members in the cluster. Used for NAT traversal. + -ruler.ring.memberlist.advertise-port int + Gossip port to advertise to other members in the cluster. Used for NAT traversal. (default 7946) + -ruler.ring.memberlist.bind-addr string + IP address to listen on for gossip messages. Multiple addresses may be specified. Defaults to 0.0.0.0 + -ruler.ring.memberlist.bind-port int + Port to listen on for gossip messages. (default 7946) + -ruler.ring.memberlist.join string + Other cluster members to join. Can be specified multiple times. It can be an IP, hostname or an entry specified in the DNS Service Discovery format. -ruler.ring.store string Backend storage to use for the ring. Supported values are: consul, etcd, inmemory, memberlist, multi. (default "memberlist") -ruler.rule-path string @@ -791,6 +899,18 @@ Usage of ./cmd/mimir/mimir: The availability zone where this instance is running. Required if zone-awareness is enabled. -store-gateway.sharding-ring.instance-interface-names string List of network interface names to look up when finding the instance IP address. (default []) + -store-gateway.sharding-ring.memberlist.abort-if-join-fails + If this node fails to join memberlist cluster, abort. + -store-gateway.sharding-ring.memberlist.advertise-addr string + Gossip address to advertise to other members in the cluster. Used for NAT traversal. + -store-gateway.sharding-ring.memberlist.advertise-port int + Gossip port to advertise to other members in the cluster. Used for NAT traversal. (default 7946) + -store-gateway.sharding-ring.memberlist.bind-addr string + IP address to listen on for gossip messages. Multiple addresses may be specified. Defaults to 0.0.0.0 + -store-gateway.sharding-ring.memberlist.bind-port int + Port to listen on for gossip messages. (default 7946) + -store-gateway.sharding-ring.memberlist.join string + Other cluster members to join. Can be specified multiple times. It can be an IP, hostname or an entry specified in the DNS Service Discovery format. -store-gateway.sharding-ring.store string Backend storage to use for the ring. Supported values are: consul, etcd, inmemory, memberlist, multi. (default "memberlist") -store-gateway.sharding-ring.tokens-file-path string diff --git a/pkg/distributor/ha_tracker_test.go b/pkg/distributor/ha_tracker_test.go index c8b2c20869c..839ff6827c5 100644 --- a/pkg/distributor/ha_tracker_test.go +++ b/pkg/distributor/ha_tracker_test.go @@ -28,7 +28,6 @@ import ( "github.com/prometheus/prometheus/model/timestamp" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "gopkg.in/yaml.v3" "github.com/grafana/mimir/pkg/mimirpb" utiltest "github.com/grafana/mimir/pkg/util/test" @@ -133,26 +132,6 @@ func TestHATrackerCacheSyncOnStart(t *testing.T) { assert.ErrorIs(t, err, replicasDidNotMatchError{replica: "r2", elected: "r1"}) } -func TestHATrackerConfig_RegisterFlags_memberlist(t *testing.T) { - cfg := ` -enable_ha_tracker: false -ha_tracker_update_timeout: 2s -ha_tracker_update_timeout_jitter_max: 2s -kvstore: - store: memberlist - memberlist: - node_name: testNode - randomize_node_name: true - stream_timeout: 2s -` - config := HATrackerConfig{} - err := yaml.Unmarshal([]byte(cfg), &config) - assert.NoError(t, err) - assert.Equal(t, "testNode", config.KVStore.MemberlistKVConfig.NodeName) - assert.Equal(t, true, config.KVStore.MemberlistKVConfig.RandomizeNodeName) - assert.Equal(t, 2*time.Second, config.KVStore.MemberlistKVConfig.StreamTimeout) -} - func TestHATrackerConfig_Validate(t *testing.T) { t.Parallel() From 6657cb812ccd3313b1963780de8d58ffb31d5a13 Mon Sep 17 00:00:00 2001 From: Nikos Angelopoulos Date: Wed, 20 Nov 2024 17:52:51 +0100 Subject: [PATCH 4/4] make docs --- .../configuration-parameters/index.md | 139 +++++++++++++----- 1 file changed, 99 insertions(+), 40 deletions(-) diff --git a/docs/sources/mimir/configure/configuration-parameters/index.md b/docs/sources/mimir/configure/configuration-parameters/index.md index e889cb32192..5fa31b99c85 100644 --- a/docs/sources/mimir/configure/configuration-parameters/index.md +++ b/docs/sources/mimir/configure/configuration-parameters/index.md @@ -382,6 +382,11 @@ overrides_exporter: # overrides-exporter.ring [etcd: ] + # The memberlist block configures the Gossip memberlist. + # The CLI flags prefix for this block configuration is: + # overrides-exporter.ring + [memberlist: ] + multi: # (advanced) Primary backend storage used by multi-client. # CLI flag: -overrides-exporter.ring.multi.primary @@ -827,6 +832,11 @@ ha_tracker: # distributor.ha-tracker [etcd: ] + # The memberlist block configures the Gossip memberlist. + # The CLI flags prefix for this block configuration is: + # distributor.ha-tracker + [memberlist: ] + multi: # (advanced) Primary backend storage used by multi-client. # CLI flag: -distributor.ha-tracker.multi.primary @@ -884,6 +894,10 @@ ring: # The CLI flags prefix for this block configuration is: distributor.ring [etcd: ] + # The memberlist block configures the Gossip memberlist. + # The CLI flags prefix for this block configuration is: distributor.ring + [memberlist: ] + multi: # (advanced) Primary backend storage used by multi-client. # CLI flag: -distributor.ring.multi.primary @@ -992,6 +1006,10 @@ ring: # The CLI flags prefix for this block configuration is: ingester.ring [etcd: ] + # The memberlist block configures the Gossip memberlist. + # The CLI flags prefix for this block configuration is: ingester.ring + [memberlist: ] + multi: # (advanced) Primary backend storage used by multi-client. # CLI flag: -ingester.ring.multi.primary @@ -1141,6 +1159,11 @@ partition_ring: # ingester.partition-ring [etcd: ] + # The memberlist block configures the Gossip memberlist. + # The CLI flags prefix for this block configuration is: + # ingester.partition-ring + [memberlist: ] + multi: # (advanced) Primary backend storage used by multi-client. # CLI flag: -ingester.partition-ring.multi.primary @@ -1767,6 +1790,10 @@ ring: # The CLI flags prefix for this block configuration is: query-scheduler.ring [etcd: ] + # The memberlist block configures the Gossip memberlist. + # The CLI flags prefix for this block configuration is: query-scheduler.ring + [memberlist: ] + multi: # (advanced) Primary backend storage used by multi-client. # CLI flag: -query-scheduler.ring.multi.primary @@ -1993,6 +2020,10 @@ ring: # The CLI flags prefix for this block configuration is: ruler.ring [etcd: ] + # The memberlist block configures the Gossip memberlist. + # The CLI flags prefix for this block configuration is: ruler.ring + [memberlist: ] + multi: # (advanced) Primary backend storage used by multi-client. # CLI flag: -ruler.ring.multi.primary @@ -2240,6 +2271,11 @@ sharding_ring: # alertmanager.sharding-ring [etcd: ] + # The memberlist block configures the Gossip memberlist. + # The CLI flags prefix for this block configuration is: + # alertmanager.sharding-ring + [memberlist: ] + multi: # (advanced) Primary backend storage used by multi-client. # CLI flag: -alertmanager.sharding-ring.multi.primary @@ -2922,102 +2958,116 @@ The `consul` block configures the consul client. The supported CLI flags `` used to reference this configuration block are: + +- _no prefix_ +- `alertmanager.sharding-ring` +- `compactor.ring` +- `distributor.ha-tracker` +- `distributor.ring` +- `ingester.partition-ring` +- `ingester.ring` +- `overrides-exporter.ring` +- `query-scheduler.ring` +- `ruler.ring` +- `store-gateway.sharding-ring` + +  ```yaml # (advanced) Name of the node in memberlist cluster. Defaults to hostname. -# CLI flag: -memberlist.nodename +# CLI flag: -.memberlist.nodename [node_name: | default = ""] # (advanced) Add random suffix to the node name. -# CLI flag: -memberlist.randomize-node-name +# CLI flag: -.memberlist.randomize-node-name [randomize_node_name: | default = true] # (advanced) The timeout for establishing a connection with a remote node, and # for read/write operations. -# CLI flag: -memberlist.stream-timeout +# CLI flag: -.memberlist.stream-timeout [stream_timeout: | default = 2s] # (advanced) Multiplication factor used when sending out messages (factor * # log(N+1)). -# CLI flag: -memberlist.retransmit-factor +# CLI flag: -.memberlist.retransmit-factor [retransmit_factor: | default = 4] # (advanced) How often to use pull/push sync. -# CLI flag: -memberlist.pullpush-interval +# CLI flag: -.memberlist.pullpush-interval [pull_push_interval: | default = 30s] # (advanced) How often to gossip. -# CLI flag: -memberlist.gossip-interval +# CLI flag: -.memberlist.gossip-interval [gossip_interval: | default = 200ms] # (advanced) How many nodes to gossip to. -# CLI flag: -memberlist.gossip-nodes +# CLI flag: -.memberlist.gossip-nodes [gossip_nodes: | default = 3] # (advanced) How long to keep gossiping to dead nodes, to give them chance to # refute their death. -# CLI flag: -memberlist.gossip-to-dead-nodes-time +# CLI flag: -.memberlist.gossip-to-dead-nodes-time [gossip_to_dead_nodes_time: | default = 30s] # (advanced) How soon can dead node's name be reclaimed with new address. 0 to # disable. -# CLI flag: -memberlist.dead-node-reclaim-time +# CLI flag: -.memberlist.dead-node-reclaim-time [dead_node_reclaim_time: | default = 0s] # (advanced) Enable message compression. This can be used to reduce bandwidth # usage at the cost of slightly more CPU utilization. -# CLI flag: -memberlist.compression-enabled +# CLI flag: -.memberlist.compression-enabled [compression_enabled: | default = true] # (advanced) How frequently to notify watchers when a key changes. Can reduce # CPU activity in large memberlist deployments. 0 to notify without delay. -# CLI flag: -memberlist.notify-interval +# CLI flag: -.memberlist.notify-interval [notify_interval: | default = 0s] # Gossip address to advertise to other members in the cluster. Used for NAT # traversal. -# CLI flag: -memberlist.advertise-addr +# CLI flag: -.memberlist.advertise-addr [advertise_addr: | default = ""] # Gossip port to advertise to other members in the cluster. Used for NAT # traversal. -# CLI flag: -memberlist.advertise-port +# CLI flag: -.memberlist.advertise-port [advertise_port: | default = 7946] # (advanced) The cluster label is an optional string to include in outbound # packets and gossip streams. Other members in the memberlist cluster will # discard any message whose label doesn't match the configured one, unless the # 'cluster-label-verification-disabled' configuration option is set to true. -# CLI flag: -memberlist.cluster-label +# CLI flag: -.memberlist.cluster-label [cluster_label: | default = ""] # (advanced) When true, memberlist doesn't verify that inbound packets and # gossip streams have the cluster label matching the configured one. This # verification should be disabled while rolling out the change to the configured # cluster label in a live memberlist cluster. -# CLI flag: -memberlist.cluster-label-verification-disabled +# CLI flag: -.memberlist.cluster-label-verification-disabled [cluster_label_verification_disabled: | default = false] # Other cluster members to join. Can be specified multiple times. It can be an # IP, hostname or an entry specified in the DNS Service Discovery format. -# CLI flag: -memberlist.join +# CLI flag: -.memberlist.join [join_members: | default = []] # (advanced) Min backoff duration to join other cluster members. -# CLI flag: -memberlist.min-join-backoff +# CLI flag: -.memberlist.min-join-backoff [min_join_backoff: | default = 1s] # (advanced) Max backoff duration to join other cluster members. -# CLI flag: -memberlist.max-join-backoff +# CLI flag: -.memberlist.max-join-backoff [max_join_backoff: | default = 1m] # (advanced) Max number of retries to join other cluster members. -# CLI flag: -memberlist.max-join-retries +# CLI flag: -.memberlist.max-join-retries [max_join_retries: | default = 10] # If this node fails to join memberlist cluster, abort. -# CLI flag: -memberlist.abort-if-join-fails +# CLI flag: -.memberlist.abort-if-join-fails [abort_if_cluster_join_fails: | default = false] # (advanced) If not 0, how often to rejoin the cluster. Occasional rejoin can @@ -3026,15 +3076,15 @@ The `memberlist` block configures the Gossip memberlist. # it's recommended to use rejoin. If -memberlist.join points to dynamic service # that resolves to all gossiping nodes (eg. Kubernetes headless service), then # rejoin is not needed. -# CLI flag: -memberlist.rejoin-interval +# CLI flag: -.memberlist.rejoin-interval [rejoin_interval: | default = 0s] # (advanced) How long to keep LEFT ingesters in the ring. -# CLI flag: -memberlist.left-ingesters-timeout +# CLI flag: -.memberlist.left-ingesters-timeout [left_ingesters_timeout: | default = 5m] # (advanced) Timeout for leaving memberlist cluster. -# CLI flag: -memberlist.leave-timeout +# CLI flag: -.memberlist.leave-timeout [leave_timeout: | default = 20s] # (advanced) Timeout for broadcasting all remaining locally-generated updates to @@ -3042,65 +3092,65 @@ The `memberlist` block configures the Gossip memberlist. # memberlist cluster, and only applies to locally-generated updates, not to # broadcast messages that are result of incoming gossip updates. 0 = no timeout, # wait until all locally-generated updates are sent. -# CLI flag: -memberlist.broadcast-timeout-for-local-updates-on-shutdown +# CLI flag: -.memberlist.broadcast-timeout-for-local-updates-on-shutdown [broadcast_timeout_for_local_updates_on_shutdown: | default = 10s] # (advanced) How much space to use for keeping received and sent messages in # memory for troubleshooting (two buffers). 0 to disable. -# CLI flag: -memberlist.message-history-buffer-bytes +# CLI flag: -.memberlist.message-history-buffer-bytes [message_history_buffer_bytes: | default = 0] # IP address to listen on for gossip messages. Multiple addresses may be # specified. Defaults to 0.0.0.0 -# CLI flag: -memberlist.bind-addr +# CLI flag: -.memberlist.bind-addr [bind_addr: | default = []] # Port to listen on for gossip messages. -# CLI flag: -memberlist.bind-port +# CLI flag: -.memberlist.bind-port [bind_port: | default = 7946] # (advanced) Timeout used when connecting to other nodes to send packet. -# CLI flag: -memberlist.packet-dial-timeout +# CLI flag: -.memberlist.packet-dial-timeout [packet_dial_timeout: | default = 2s] # (advanced) Timeout for writing 'packet' data. -# CLI flag: -memberlist.packet-write-timeout +# CLI flag: -.memberlist.packet-write-timeout [packet_write_timeout: | default = 5s] # (advanced) Maximum number of concurrent writes to other nodes. -# CLI flag: -memberlist.max-concurrent-writes +# CLI flag: -.memberlist.max-concurrent-writes [max_concurrent_writes: | default = 3] # (advanced) Timeout for acquiring one of the concurrent write slots. After this # time, the message will be dropped. -# CLI flag: -memberlist.acquire-writer-timeout +# CLI flag: -.memberlist.acquire-writer-timeout [acquire_writer_timeout: | default = 250ms] # (advanced) Enable TLS on the memberlist transport layer. -# CLI flag: -memberlist.tls-enabled +# CLI flag: -.memberlist.tls-enabled [tls_enabled: | default = false] # (advanced) Path to the client certificate, which will be used for # authenticating with the server. Also requires the key path to be configured. -# CLI flag: -memberlist.tls-cert-path +# CLI flag: -.memberlist.tls-cert-path [tls_cert_path: | default = ""] # (advanced) Path to the key for the client certificate. Also requires the # client certificate to be configured. -# CLI flag: -memberlist.tls-key-path +# CLI flag: -.memberlist.tls-key-path [tls_key_path: | default = ""] # (advanced) Path to the CA certificates to validate server certificate against. # If not set, the host's root CA certificates are used. -# CLI flag: -memberlist.tls-ca-path +# CLI flag: -.memberlist.tls-ca-path [tls_ca_path: | default = ""] # (advanced) Override the expected name on the server certificate. -# CLI flag: -memberlist.tls-server-name +# CLI flag: -.memberlist.tls-server-name [tls_server_name: | default = ""] # (advanced) Skip validating server certificate. -# CLI flag: -memberlist.tls-insecure-skip-verify +# CLI flag: -.memberlist.tls-insecure-skip-verify [tls_insecure_skip_verify: | default = false] # (advanced) Override the default cipher suite list (separated by commas). @@ -3134,12 +3184,12 @@ The `memberlist` block configures the Gossip memberlist. # - TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA # - TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256 # - TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 -# CLI flag: -memberlist.tls-cipher-suites +# CLI flag: -.memberlist.tls-cipher-suites [tls_cipher_suites: | default = ""] # (advanced) Override the default minimum TLS version. Allowed values: # VersionTLS10, VersionTLS11, VersionTLS12, VersionTLS13 -# CLI flag: -memberlist.tls-min-version +# CLI flag: -.memberlist.tls-min-version [tls_min_version: | default = ""] ``` @@ -4605,6 +4655,10 @@ sharding_ring: # The CLI flags prefix for this block configuration is: compactor.ring [etcd: ] + # The memberlist block configures the Gossip memberlist. + # The CLI flags prefix for this block configuration is: compactor.ring + [memberlist: ] + multi: # (advanced) Primary backend storage used by multi-client. # CLI flag: -compactor.ring.multi.primary @@ -4704,6 +4758,11 @@ sharding_ring: # store-gateway.sharding-ring [etcd: ] + # The memberlist block configures the Gossip memberlist. + # The CLI flags prefix for this block configuration is: + # store-gateway.sharding-ring + [memberlist: ] + multi: # (advanced) Primary backend storage used by multi-client. # CLI flag: -store-gateway.sharding-ring.multi.primary