菜单
开源

关于 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
  • 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
  • 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.idservice.nameservice.namespace 资源属性转换为 instancejob 标签的同时,将其保留在 target_info 中。
      • -distributor.otel-keep-identifying-resource-attributes
  • 哈希环
    • 禁用 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
  • 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
  • 日志记录器
    • 支持速率限制日志记录器
      • 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
  • 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 指标进行追踪。
  • 基于 Kafka 的摄入存储
    • -ingest-storage.*
    • -ingester.partition-ring.*

弃用的功能

弃用的功能在指明它们移除的发布版本之前可用。有关 弃用 的详细信息,请参阅参数生命周期

以下功能或配置参数目前已弃用,并将在未来发布版本中移除(待公布)

  • 规则组配置文件
    • evaluation_delay 字段:请改用 query_offset
  • 对基于 Redis 的缓存的支持