VictoriaMetrics 1.146.0 源码专题【左扬精讲】—— 版本演进:1.146.0 LTS 重大更新解析

VictoriaMetrics 1.146.0 源码专题【左扬精讲】—— 版本演进:1.146.0 LTS 重大更新解析

VictoriaMetrics 自 2019 年开源以来,保持着每两周一个版本的快速迭代节奏。1.146.0 是最新的 Release Candidate 版本,包含了多项重要的功能增强和 bug 修复。本篇文章将从 CHANGELOG 出发,分析 1.146.0 版本的重大更新,以及近几个版本的演进趋势。

一、版本体系与 LTS 策略

思考记忆提示理解 VictoriaMetrics 的版本策略,有助于生产环境选型

  • VictoriaMetrics 采用"语义版本 + LTS"策略
  • LTS 版本每 6 个月发布一次,稳定支持 12 个月
  • 面试高频提问:生产环境应该选择哪个版本?

1.1 版本号语义

VictoriaMetrics 采用语义化版本(Semantic Versioning):

  版本号格式:v{major}.{minor}.{patch}

示例:
v1.146.0
│   │    │
│   │    └── patch 版本:bug 修复,向后兼容
│   │
│   └── minor 版本:新功能,API 可能扩展
│
└── major 版本:目前固定为 1

版本生命周期:
v1.146.0-rc    →  Release Candidate(发布候选)
v1.146.0       →  正式发布
v1.146.x       →  持续小版本更新(每 2 周)

1.2 LTS 版本策略

VictoriaMetrics 提供 LTS(Long-Term Support)版本:

LTS 版本发布日期支持截止状态
v1.143.0 2026-05-08 2027-05-08 当前 LTS
v1.119.0 2025-11 2026-11 LTS
v1.95.0 2025-05 2026-05 LTS(即将 EOL)

注意

建议生产环境使用 LTS 版本。如果需要最新功能,可以使用 RC 版本,但需要做好充分测试。

二、v1.146.0 新特性解析

思考记忆提示v1.146.0 是 Release Candidate,重点关注新功能和破坏性变更

  • 新增 -http.header.disableServerHostname 参数
  • delete_series API 增加日志记录
  • vmctl 支持自定义认证头
  • stream aggregation 优化

2.1 HTTP 响应头控制

v1.146.0 新增 -http.header.disableServerHostname 参数,用于禁用 X-Server-Hostname HTTP 响应头。

 # 默认情况:HTTP 响应包含 X-Server-Hostname 头
$ curl -I http://localhost:8428
HTTP/1.1 200 OK
X-Server-Hostname: vm-001
Content-Type: text/plain
...

# 禁用后:不再暴露服务器主机名
$ ./victoria-metrics -http.header.disableServerHostname
$ curl -I http://localhost:8428
HTTP/1.1 200 OK
Content-Type: text/plain
...

# PR: #11067, 作者: @zasdaym
源码视角:X-Server-Hostname 头的实现

lib/httpserver/httpserver.go 中实现:

  • disableServerHostname flag 控制是否添加响应头
  • w.Header().Set("X-Server-Hostname", hostname) 设置响应头
  • 用途:安全加固,防止泄露服务器信息

2.2 delete_series API 日志增强

v1.146.0 开始,调用 /api/v1/admin/tsdb/delete_series API 时会记录详细日志。

 # 调用 delete_series API
$ curl -X POST 'http://localhost:8428/api/v1/admin/tsdb/delete_series?match[]={job="test"}'

# 服务端日志(v1.146.0 新增)
# INFO[] delete_series API called ...
#    matchers: {job="test"}
#    source: 192.168.1.100
#    user-agent: curl/7.68.0

# PR: #11104

小贴士审计价值

这个变更对于安全审计非常有价值。可以追踪谁在什么时间删除了哪些指标,帮助定位数据丢失的原因。

2.3 vmctl 认证增强

vmctl 新增 -vm-headers-vm-bearer-token 参数,支持自定义认证头。

 # 使用 Bearer Token 认证
vmctl migrate prometheus \
    --vm-addr=http://victoriametrics:8428 \
    --vm-bearer-token="your-token-here"

# 使用自定义 Header
vmctl migrate prometheus \
    --vm-addr=http://victoriametrics:8428 \
    --vm-headers="Authorization:Bearer xxx,X-Custom-Header:value"

# 支持的子命令:
# - opentsdb
# - influx
# - remote-read
# - prometheus
# - mimir
# - thanos

# PR: #8897

2.4 vmagent 内存队列优化

vmagent 新增 -remoteWrite.inmemoryQueues 参数,优先发送最近写入的数据。

 # 默认行为:按先进先出(FIFO)顺序发送
# 问题:历史数据堆积时,新数据也被延迟

# 启用新参数后:优先发送最近数据(LIFO)
vmagent \
    -remoteWrite.url=http://victoriametrics:8428/api/v1/write \
    -remoteWrite.inmemoryQueues=true

# 适用场景:
# - 实时监控优先
# - 历史数据可以延迟
# - 远程写入偶尔中断

# PR: #8833

2.5 stream aggregation 优化

stream aggregation 有两项重要改进:

  1. 去重采样丢弃统计:新增 vm_streamaggr_dedup_dropped_samples_total 指标,可追踪去重过程中丢弃的旧采样
  2. staleness_interval 优化:默认值从 2*interval 改为 interval,减少数据间隙导致的抖动
 # stream aggregation 配置示例
stream_aggr_config:
  - name: dedup_aggr
    interval: 30s
    dedup_interval: 10s
    # 新的 staleness_interval 默认值 = interval(30s)
    # 之前默认 = 2*interval(60s)
    output:
      - name: aggregated_metrics
        aggr:
          - sum
          - count

# 监控新增的丢弃指标
vm_streamaggr_dedup_dropped_samples_total{aggr="dedup_aggr"}

三、近版本演进趋势分析

思考记忆提示通过分析近几个版本的 CHANGELOG,可以看出 VM 的发展方向

  • 安全性增强:认证、审计、日志
  • 可观测性增强:更多 metrics、更好的 debug 信息
  • 企业特性下放:部分企业功能进入开源版本

3.1 版本演进时间线

  VictoriaMetrics 版本演进(2026)
┌─────────────────────────────────────────────────────────────────────────────┐
│                                                                             │
│  v1.140.0 (04-10)  │  ◄━━━ Go 1.26.2 安全更新                          │
│                      │       vm_filestream_fsync_duration_seconds 新指标    │
│                      │       Mimir 迁移支持                                  │
│                      │       二元运算 bug(已知问题)                        │
│  ──────────────────────────────────────────────────────────────             │
│  v1.141.0 (04-24)  │  ◄━━━ 未来时间戳支持(-futureRetention)            │
│                      │       systemd slice 检测                             │
│                      │       Stream aggregation 增强                        │
│  ──────────────────────────────────────────────────────────────             │
│  v1.142.0 (04-28)  │  ◄━━━ Bugfix 版本                                  │
│                      │       vminsert 自动发现 bug                          │
│  ──────────────────────────────────────────────────────────────             │
│  v1.143.0 (05-08)  │  ◄━━━ Go 1.26.3 安全更新                           │
│                      │       OTel Native Histogram 支持                     │
│                      │       filesystem type 指标                           │
│                      │       CORS 修复                                     │
│  ──────────────────────────────────────────────────────────────             │
│  v1.144.0 (05-22)  │  ◄━━━ vmagent 关闭优化                             │
│                      │       OpenTelemetry 标签处理                         │
│                      │       vmui Top Queries 改进                          │
│                      │       敏感信息隐藏(headers/proxyURL)                │
│  ──────────────────────────────────────────────────────────────             │
│  v1.145.0 (06-08)  │  ◄━━━ Go 1.26.4 安全更新                           │
│                      │       Prometheus 原生直方图解析修复                   │
│                      │       Mimir 迁移正式支持                            │
│                      │       integrate() 修复                              │
│  ──────────────────────────────────────────────────────────────             │
│  v1.146.0 (06-??)  │  ◄━━━ 当前 RC 版本                                 │
│                      │       X-Server-Hostname 控制                        │
│                      │       delete_series 日志                            │
│                      │       vmctl 认证增强                                │
│                      │       vmagent 内存队列优化                          │
│                      │       Cluster 多租户修复                            │
│                                                                             │
└─────────────────────────────────────────────────────────────────────────────┘

3.2 核心演进趋势

领域趋势具体变化
安全性 持续增强 敏感信息隐藏、delete 日志、认证增强
可观测性 指标丰富化 更多 /metrics、Top Queries、fsync 指标
协议支持 持续扩展 Mimir 迁移、OTel Native Histogram
性能 稳定优化 内存队列优化、合并策略调优
稳定性 Bug 修复密集 Go 版本同步、并发问题修复
源码视角:安全相关的代码变更

从 CHANGELOG 可以看出安全相关的变更集中在 lib/httpserver/lib/promauth/

  • v1.144.0:隐藏 -remoteWrite.headers-remoteWrite.proxyURL 在日志和 metrics 中的值
  • v1.146.0:新增 -http.header.disableServerHostname
  • 趋势:VM 越来越重视企业级安全需求

3.3 Bug 修复模式分析

通过分析近版本 BUGFIX,可以看出 VM 的测试覆盖和发布流程:

  BUGFIX 分类统计(v1.143.0 ~ v1.146.0)

┌─────────────────────────────────────────────────────────────────────────────┐
│                                                                             │
│  Cluster 相关        ████████████████████  12 个                              │
│                      占比: 35%                                              │
│                      问题: 租户过滤、元数据、多租户查询                       │
│  ────────────────────────────────────────────                               │
│  vmagent 相关       ██████████████  8 个                                   │
│                      占比: 24%                                              │
│                      问题: 序列化、EC2 凭证、relabel                          │
│  ────────────────────────────────────────────                               │
│  vmui 相关          █████████  4 个                                        │
│                      占比: 12%                                              │
│                      问题: 时区、图表、CSV 导出                              │
│  ────────────────────────────────────────────                               │
│  vmauth/vmalert     ████████  4 个                                        │
│                      占比: 12%                                              │
│                      问题: JWT、启动延迟、用户统计                           │
│  ────────────────────────────────────────────                               │
│  存储/查询          ████████  4 个                                        │
│                      占比: 12%                                              │
│                      问题: 二元运算、UTF-8、CORS                            │
│  ────────────────────────────────────────────                               │
│  其他                ████  2 个                                            │
│                      占比: 5%                                               │
│                                                                             │
└─────────────────────────────────────────────────────────────────────────────┘

四、升级建议与注意事项

升级决策框架

升级前考虑三个维度:稳定性(Bug Fix)、安全性(新功能)、功能性(新 Feature)。建议优先级:安全 > 稳定 > 功能。

4.1 版本选择建议

环境推荐版本理由
生产环境 v1.143.0 (LTS) 经过验证,稳定支持 12 个月
测试环境 v1.146.0 (RC) 提前验证新功能,测试下个 LTS
开发环境 最新 master 体验最新功能,反馈问题

警告

避免使用 v1.140.0、v1.136.4、v1.122.19,这些版本存在二元运算 Bug(#10856)。

4.2 升级检查清单

  # 升级前检查

1. 备份当前配置
   cp -r /etc/victoriametrics /backup/config-$(date +%Y%m%d)

2. 检查新增参数
   ./victoria-metrics -help | grep -E "(disableServerHostname|futureRetention)"

3. 测试配置文件兼容性
   ./victoria-metrics -configFile=/etc/vm/config.yml -dryRun

4. 检查依赖组件兼容性
   - vmagent 版本
   - Grafana 数据源版本
   - Prometheus 版本

5. 性能基线记录
   curl http://localhost:8428/metrics > baseline.metrics

6. 灰度升级策略
   - 先升级测试环境
   - 观察 24 小时无异常
   - 10% → 50% → 100% 逐步放量

4.3 回滚方案

  # 回滚操作

# Docker 场景
docker stop victoriametrics
docker rm victoriametrics
docker run ... victoriametrics:v1.143.0  # 使用旧版本镜像

# Kubernetes 场景
kubectl rollout undo deployment/victoria-metrics

# systemd 场景
systemctl stop victoriametrics
systemctl disable victoriametrics
# 重新安装旧版本
./victoria-metrics-v1.143.0 ...
systemctl enable victoriametrics
systemctl start victoriametrics

五、面试高频提问

面试问答本节精选面试高频问题

Q1:VictoriaMetrics 的发布节奏是怎样的?

每两周一个版本,每六个月发布一个 LTS 版本。版本号格式为 v{major}.{minor}.{patch}。LTS 版本(如 v1.143.0)提供 12 个月的支持。生产环境建议使用 LTS 版本,最新功能可以在测试环境先行验证。

Q2:v1.146.0 有哪些值得关注的更新?

重点关注安全性增强和可观测性改进。1)新增 -http.header.disableServerHostname 参数,可以禁用 X-Server-Hostname 响应头;2)delete_series API 调用会记录详细日志,方便安全审计;3)vmctl 新增认证参数支持;4)stream aggregation 优化了 staleness_interval 默认值。

Q3:哪些版本应该避免在生产环境使用?

v1.140.0、v1.136.4、v1.122.19 存在二元运算 Bug。这些版本中,二元运算存在排序问题,例如 10 - (3 + 3 + 4) 会被错误计算为 10 - 3 + 3 + 4。如果使用了这些版本,建议尽快升级到修复版本。

Q4:Stream Aggregation 的 staleness_interval 改动有什么影响?

默认值从 2*interval 改为 interval,减少了数据延迟感知的抖动。之前如果采样之间有间隙,需要等待 2 倍间隔才会标记为 stale,现在只需要等待 1 倍间隔。这对于间歇性数据的实时监控场景有显著改善。

全篇必记口诀

版本演进记住三条线:安全线(敏感信息隐藏、delete 日志、认证增强)、可观测线(更多 metrics、Top Queries、fsync 指标)、兼容线(Go 版本同步、Bug Fix)。升级口诀:"生产用 LTS,测试追 RC,避开问题版本"

VictoriaMetrics 版本演进 CHANGELOG LTS 升级
posted @ 2026-06-29 00:22  左扬  阅读(35)  评论(0)    收藏  举报