关于 Grafana Mimir 版本控制
本主题介绍了本 Grafana Mimir 主要版本的保证。
Flag、配置和次版本升级
将 Grafana Mimir 从一个次版本升级到下一个次版本应该可以工作,但我们不想每次删除配置参数时都增加主版本号。我们将保留 弃用的功能 两个次版本。您可以使用 deprecated_flags_inuse_total
指标生成告警,帮助您确定您是否正在使用已弃用的 flag。
这些保证不适用于 实验性功能。
读取旧数据
Grafana Mimir 维护者承诺确保未来版本可以读取过去两年内由旧版本写入的数据。实际上,我们期望能够读取两年多前写入的数据,但最低两年的承诺是我们的保证。
API 兼容性
Grafana Mimir 努力与 Prometheus HTTP API 保持 100% 兼容,该 API 默认由带有 /prometheus/*
HTTP 路径前缀的端点提供服务。
我们认为任何偏离此 100% API 兼容性的行为都是一个 bug,但以下情况除外
- 用于创建、移除、修改告警和记录规则的额外 API 端点。
- 推送指标的额外 API (位于
/prometheus/api/push
下)。 - 用于管理 Grafana Mimir 的额外 API 端点,例如 ring。这些 API 不包含在任何兼容性保证中。
- 删除序列 API.
实验性功能
Grafana Mimir 是一个正在积极开发中的项目,我们鼓励引入新功能和新能力。Grafana Mimir 的每个版本中的所有内容都不一定都被认为是生产环境就绪的。我们将所有我们认为非生产环境就绪的功能和 flag 标记为“实验性”。
我们不保证实验性功能和 flag 的向后兼容性。实验性配置和 flag 可能会发生变化。
以下功能目前是实验性的
- 成本归因
- 配置成本归因标签
-validation.cost-attribution-labels
- 配置成本归因限制,例如标签基数和最大成本归因标签数量
-validation.max-cost-attribution-labels-per-user
-validation.max-cost-attribution-cardinality-per-user
- 配置成本归因的冷却期和驱逐间隔
-validation.cost-attribution-cooldown
-cost-attribution.eviction-interval
- 配置专用于成本归因的指标端点
-cost-attribution.registry-path
- 配置成本归因清理过程的运行间隔
-cost-attribution.cleanup-interval
- 配置成本归因标签
- Alertmanager
- 启用一组实验性 API 端点,以帮助支持 Grafana Alertmanager 迁移到 Mimir Alertmanager。
-alertmanager.grafana-alertmanager-compatibility-enabled
- 启用对 Alertmanager 配置/API 匹配器和标签中任意 UTF-8 字符的支持。
-alertmanager.utf8-strict-mode-enabled
- 启用一组实验性 API 端点,以帮助支持 Grafana Alertmanager 迁移到 Mimir Alertmanager。
- Compactor
- 当 bucket 索引中没有剩余的数据块时,启用清理租户 bucket 中的剩余文件。
-compactor.no-blocks-file-cleanup-enabled
- 用于解析 meta.json 文件的内存缓存
-compactor.in-memory-tenant-meta-cache-size
- 限制每个压缩周期处理的数据块数量。在最大回溯期之前上传的数据块不会被处理。
-compactor.max-lookback
- 允许 Compactor 在压缩周期中将稀疏索引头上传到对象存储。
-compactor.upload-sparse-index-headers
- 当 bucket 索引中没有剩余的数据块时,启用清理租户 bucket 中的剩余文件。
- Ruler
- 评估时间戳在间隔上对齐 (
align_evaluation_time_on_interval
) - 允许按命名空间定义规则组中允许的最大规则数量限制,以及按命名空间定义最大规则组数量。如果设置,这将覆盖
-ruler.max-rules-per-rule-group
和-ruler.max-rule-groups-per-tenant
限制。 -ruler.max-rules-per-rule-group-by-namespace
-ruler.max-rule-groups-per-tenant-by-namespace
- 允许按命名空间保护规则组免受修改。规则组始终可以读取,您可以使用带有命名空间名称作为值的
X-Mimir-Ruler-Override-Namespace-Protection
头来覆盖修改保护。 -ruler.protected-namespaces
- 允许控制独立规则并发评估,只要它们的规则组上次运行时长与间隔相比超过一定阈值。我们对每个 ruler 和每个租户可执行的规则数量都有限制
-ruler.max-independent-rule-evaluation-concurrency
-ruler.max-independent-rule-evaluation-concurrency-per-tenant
-ruler.independent-rule-evaluation-concurrency-min-duration-percentage
-ruler.rule-evaluation-write-enabled
- 允许控制规则同步间隔。
ruler.outbound-sync-queue-poll-interval
ruler.inbound-sync-queue-poll-interval
- 缓存规则组内容。
-ruler-storage.cache.rule-group-enabled
- 评估时间戳在间隔上对齐 (
- Distributor
- Influx 摄入
/api/v1/push/influx/write
端点-distributor.influx-endpoint-enabled
-distributor.max-influx-request-size
- 指标重贴标签
-distributor.metric-relabeling-enabled
- 在速率限制耗尽时使用状态码 529 而非 429。
-distributor.service-overload-status-code-on-rate-limit-enabled
- 限制每个请求中每个序列的 Exemplar 数量
-distributor.max-exemplars-per-series-per-request
- 限制 OTLP 写入请求字节大小
-distributor.max-otlp-request-size
- 强制写入请求的最大池缓冲区大小
-distributor.max-request-pool-buffer-size
- 启用将 OTel 启动时间戳转换为 Prometheus 零样本以标记序列开始
-distributor.otel-created-timestamp-zero-ingestion-enabled
- 将某些 OTel 资源属性提升为标签
-distributor.promote-otel-resource-attributes
- 为 ha_tracker 添加实验性的
memberlist
键值存储。请注意,此功能是实验性
的,因为传播时间的上限尚未验证。此外,memberlist 条目的清理操作尚未实现。-distributor.ha-tracker.kvstore.store
- 允许在将 OpenTelemetry 的
service.instance.id
、service.name
和service.namespace
资源属性转换为instance
和job
标签的同时,将其保留在target_info
中。-distributor.otel-keep-identifying-resource-attributes
- Influx 摄入
- 哈希环
- 禁用 ring 心跳超时
-distributor.ring.heartbeat-timeout=0
-ingester.ring.heartbeat-timeout=0
-ruler.ring.heartbeat-timeout=0
-alertmanager.sharding-ring.heartbeat-timeout=0
-compactor.ring.heartbeat-timeout=0
-store-gateway.sharding-ring.heartbeat-timeout=0
-overrides-exporter.ring.heartbeat-timeout=0
- 禁用 ring 心跳
-distributor.ring.heartbeat-period=0
-ingester.ring.heartbeat-period=0
-ruler.ring.heartbeat-period=0
-alertmanager.sharding-ring.heartbeat-period=0
-compactor.ring.heartbeat-period=0
-store-gateway.sharding-ring.heartbeat-period=0
-overrides-exporter.ring.heartbeat-period=0
- 禁用 ring 心跳超时
- Ingester
- 为块结束时间添加方差,以将写入分散在时间上 (
-blocks-storage.tsdb.head-chunks-end-time-variance
) - 关闭时将内存中的 TSDB 数据快照到磁盘 (
-blocks-storage.tsdb.memory-snapshot-on-shutdown
) - 乱序样本摄入 (
-ingester.ooo-native-histograms-ingestion-enabled
) - 乱序原生直方图样本摄入 (
-ingester.out-of-order-time-window
) - Shipper 在上传到云存储前为乱序数据块打标签 (
-ingester.out-of-order-blocks-external-label-enabled
) - 匹配器倒排索引缓存配置
-blocks-storage.tsdb.head-postings-for-matchers-cache-ttl
-blocks-storage.tsdb.head-postings-for-matchers-cache-size
(已弃用)-blocks-storage.tsdb.head-postings-for-matchers-cache-max-bytes
-blocks-storage.tsdb.head-postings-for-matchers-cache-force
-blocks-storage.tsdb.block-postings-for-matchers-cache-ttl
-blocks-storage.tsdb.block-postings-for-matchers-cache-size
(已弃用)-blocks-storage.tsdb.block-postings-for-matchers-cache-max-bytes
-blocks-storage.tsdb.block-postings-for-matchers-cache-force
- 基于 CPU/内存利用率的读取请求限制
-ingester.read-path-cpu-utilization-limit
-ingester.read-path-memory-utilization-limit"
- 提前进行 TSDB Head 压缩以减少内存中的序列
-blocks-storage.tsdb.early-head-compaction-min-in-memory-series
-blocks-storage.tsdb.early-head-compaction-min-estimated-series-reduction-percentage
- 及时进行 Head 压缩 (
-blocks-storage.tsdb.timely-head-compaction-enabled
) - 计算拥有的序列并使用它们来强制执行序列限制
-ingester.track-ingester-owned-series
-ingester.use-ingester-owned-series-for-limits
-ingester.owned-series-update-interval
- 基于请求超时或达到每个实例限制的 Ingster 断路器
-ingester.push-circuit-breaker.circuit-breaker.enabled
-ingester.push-circuit-breaker.failure-threshold-percentage
-ingester.push-circuit-breaker.failure-execution-threshold
-ingester.push-circuit-breaker.thresholding-period
-ingester.push-circuit-breaker.cooldown-period
-ingester.push-circuit-breaker.initial-delay
-ingester.push-circuit-breaker.request-timeout
-ingester.read-circuit-breaker.circuit-breaker.enabled
-ingester.read-circuit-breaker.failure-threshold-percentage
-ingester.read-circuit-breaker.failure-execution-threshold
-ingester.read-circuit-breaker.thresholding-period
-ingester.read-circuit-breaker.cooldown-period
-ingester.read-circuit-breaker.initial-delay
-ingester.read-circuit-breaker.request-timeout
- 响应式并发限制器
-ingester.push-reactive-limiter.enabled
-ingester.push-reactive-limiter.short-window-min-duration
-ingester.push-reactive-limiter.short-window-max-duration
-ingester.push-reactive-limiter.short-window-min-samples
-ingester.push-reactive-limiter.long-window
-ingester.push-reactive-limiter.sample-quantile
-ingester.push-reactive-limiter.min-inflight-limit
-ingester.push-reactive-limiter.max-inflight-limit
-ingester.push-reactivereactive-limiter.initial-inflight-limit
-ingester.push-reactive-limiter.max-limit-factor
-ingester.push-reactive-limiter.correlation-window
-ingester.push-reactive-limiter.initial-rejection-factor
-ingester.push-reactive-limiter.max-rejection-factor
-ingester.read-reactive-limiter.enabled
-ingester.read-reactive-limiter.short-window-min-duration
-ingester.read-reactive-limiter.short-window-max-duration
-ingester.read-reactive-limiter.short-window-min-samples
-ingester.read-reactive-limiter.long-window
-ingester.read-reactive-limiter.sample-quantile
-ingester.read-reactive-limiter.min-inflight-limit
-ingester.read-reactive-limiter.max-inflight-limit
-ingester.read-reactive-limiter.initial-inflight-limit
-ingester.read-reactive-limiter.max-limit-factor
-ingester.read-reactive-limiter.correlation-window
-ingester.read-reactive-limiter.initial-rejection-factor
-ingester.read-reactive-limiter.max-rejection-factor
-ingester.rejection-prioritizer.calibration-interval
- 为块结束时间添加方差,以将写入分散在时间上 (
- Querier
- 根据预估将使用的块数量限制查询 (
-querier.max-estimated-fetched-chunks-per-query-multiplier
) - 租户联合查询的最大并发数 (
-tenant-federation.max-concurrent
) - 活跃序列查询的最大响应大小 (
-querier.active-series-results-max-size-bytes
) - 允许将
/active_series
响应流式传输到前端 (-querier.response-streaming-enabled
) - Mimir 查询引擎 (
-querier.query-engine=mimir
和-querier.enable-query-engine-fallback
,以及所有以-querier.mimir-query-engine
开头的 flag) - 每个查询的最大预估内存消耗限制 (
-querier.max-estimated-memory-consumption-per-query
) - 查询延迟时忽略删除标记 (
-blocks-storage.bucket-store.ignore-deletion-marks-while-querying-delay
)
- 根据预估将使用的块数量限制查询 (
- Query-frontend
-query-frontend.querier-forget-delay
- 即时查询拆分 (
-query-frontend.split-instant-queries-by-interval
) - 对于与乱序样本摄入窗口重叠的缓存条目降低 TTL (重用来自 ingester 的
-ingester.out-of-order-window
) - 基于每个租户的查询阻止 (通过限制
blocked_queries
配置) - 活跃序列查询的分片 (
-query-frontend.shard-active-series-queries
) - 活跃序列请求响应的服务器端写入超时 (
-query-frontend.active-series-write-timeout
) - 非瞬时错误响应的缓存 (
-query-frontend.cache-errors
,-query-frontend.results-cache-ttl-for-errors
) - 基于每个租户的 HTTP 请求阻止 (通过限制
blocked_requests
配置) - 从即时查询中分拆 (作为实际范围查询) 子查询 (
-query-frontend.instant-queries-with-subquery-spin-off
和每个租户限制instant_queries_with_subquery_spin_off
) - 按租户启用实验性 PromQL 函数 (
-query-frontend.enabled-promql-experimental-functions
和每个租户限制enabled_promql_experimental_functions
)
- Query-scheduler
-query-scheduler.querier-forget-delay
- Store-gateway
- 即使启用了惰性加载,启动时也急切加载一些数据块
-blocks-storage.bucket-store.index-header.eager-loading-startup-enabled
- 允许超过默认的 3 个 store-gateway 拥有最新数据块
-store-gateway.dynamic-replication
- 即使启用了惰性加载,启动时也急切加载一些数据块
- 读写部署模式
- API 端点
/api/v1/user_limits
/api/v1/cardinality/active_series
- 按额外配置的组标签分隔指标
-validation.separate-metrics-group-label
-max-separate-metrics-groups-per-user
- Vault
- 从 Vault 获取各种客户端的 TLS 密钥 (
-vault.enabled
) - Vault 客户端认证令牌生命周期监视器。通过续订令牌租约或重新认证,确保客户端令牌始终有效。包括以下指标
cortex_vault_token_lease_renewal_active
cortex_vault_token_lease_renewal_success_total
cortex_vault_auth_success_total
- 从 Vault 获取各种客户端的 TLS 密钥 (
- 日志记录器
- 支持速率限制日志记录器
log.rate-limit-enabled
log.rate-limit-logs-per-second
log.rate-limit-logs-burst-size
- 支持速率限制日志记录器
- Memcached 客户端
- 自定义写入和读取缓冲区大小
-<prefix>.memcached.write-buffer-size-bytes
-<prefix>.memcached.read-buffer-size-bytes
- 备用 DNS 服务发现后端
-<prefix>.memcached.addresses-provider
- 自定义写入和读取缓冲区大小
- Distributor 中的时间序列 Unmarshal 缓存优化 (
-timeseries-unmarshal-caching-optimization-enabled
) - 在 distributor 中重用缓冲区来 marshaling 写入请求 (
-distributor.write-requests-buffer-pooling-enabled
) - 记录未发送任何 HTTP 请求的连接:
-server.http-log-closed-connections-without-response-enabled
。 - Ingester:追踪“拥有的序列”,并使用拥有的序列代替内存中的序列来执行租户限制。
-ingester.use-ingester-owned-series-for-limits
-ingester.track-ingester-owned-series
-ingester.owned-series-update-interval
- 服务器
- PROXY protocol 支持
-server.proxy-protocol-enabled
- gRPC 通信的跨集群验证支持
-server.cluster-validation.label
-server.cluster-validation.grpc.enabled
-server.cluster-validation.grpc.soft-validation
- PROXY protocol 支持
- gRPC 客户端
- gRPC 通信的跨集群验证支持
- 假设 gRPC 客户端配置可以通过
-<grpc-client-config-path>
访问,则集群验证标签配置如下:-<grpc-client-config-path>.cluster-validation.label
。 - 所有 gRPC 客户端的集群验证标签可以通过
-common.client-cluster-validation.label
配置。 - 无效的集群验证通过
cortex_client_request_invalid_cluster_validation_labels_total
指标进行追踪。
- 假设 gRPC 客户端配置可以通过
- gRPC 通信的跨集群验证支持
- 基于 Kafka 的摄入存储
-ingest-storage.*
-ingester.partition-ring.*
弃用的功能
弃用的功能在指明它们移除的发布版本之前可用。有关 弃用 的详细信息,请参阅参数生命周期。
以下功能或配置参数目前已弃用,并将在未来发布版本中移除(待公布)
- 规则组配置文件
evaluation_delay
字段:请改用query_offset
- 对基于 Redis 的缓存的支持