VictoriaMetrics —— 高性能、低成本、兼容 Prometheus 的时序数据库与监控套件
VictoriaMetrics —— 高性能、低成本、兼容 Prometheus 的时序数据库与监控套件
分类:01 指标采集与时序存储 适用:Linux / 容器 / Kubernetes;从单机边缘节点到千万级活跃时序的大型集群 一句话:以单二进制或水平扩展集群提供 Prometheus 兼容的写入、查询与告警全链路,压缩比与资源成本显著优于原生 Prometheus 官方:https://docs.victoriametrics.com/ | https://github.com/VictoriaMetrics/VictoriaMetrics 授权:Apache-2.0(开源版),另有企业版与云托管版
版本、镜像 tag、二进制资产名均以官方最新稳定版为准(见 releases 页);生产固定版本,勿用 latest。
1. 它解决什么问题
| 痛点(原生 Prometheus 单点) | VictoriaMetrics 的应对 |
|---|---|
| 本地 TSDB 无副本、无法水平扩展 | 集群版 vmstorage 多副本 + vminsert/vmselect 无状态扩容 |
| 保留期受本地盘限制、长期存储贵 | 高压缩比 + -retentionPeriod,vmbackup 落地对象存储 |
| 多 Prometheus / 多集群无统一视图 | vmselect 聚合所有 vmstorage,Grafana 只配一个数据源 |
| 高基数下内存暴涨、查询变慢 | 更省内存的索引/合并策略 + 基数与资源限制参数 |
不负责:日志/链路追踪(VictoriaLogs / VictoriaTraces)、通知落地(交 Alertmanager);vmagent 复用 Prometheus SD 语法而非自研服务发现。
2. 核心概念与架构
关键术语
| 术语 | 含义 |
|---|---|
单节点版 vmsingle |
一体化二进制 victoria-metrics-prod,写入/查询/存储/压缩全包,垂直扩展 |
| 集群版 | vminsert 写入路由、vmselect 查询聚合、vmstorage 数据存储 |
vmagent |
轻量采集代理,兼容 scrape_configs,支持 relabel、分片、多远端、流聚合 |
vmalert |
执行告警/记录规则,兼容 Prometheus rule YAML,通知发往 Alertmanager |
vmauth / vmctl |
鉴权路由反代 / 迁移工具(Prometheus、Thanos、InfluxDB、OpenTSDB、VM 原生互迁) |
vmbackup / vmrestore |
基于即时快照的备份与恢复 |
| MetricsQL | 兼容并扩展 PromQL,新增时间序列专用函数 |
| active series / churn rate / cardinality | 活跃时序数 / 时序更替率 / 标签基数,容量三要素 |
组件与数据流
写入侧 单节点版 查询侧
Prometheus --remote_write--> /api/v1/write --+--> vmsingle(8428) --/api/v1/query--> Grafana/VMUI
Exporter --scrape--> vmagent ----------------+ | 本地盘 storageDataPath
Influx/Graphite/OpenTSDB -------------------+ +-- vmbackup --> s3/gcs 快照
集群版:写 --> vminsert(8480) --一致性哈希--> vmstorage(:8400)
读 --> vmselect(8481) --扇出合并----> vmstorage(:8401)
vmalert --查询--> vmselect/vmsingle --告警--> Alertmanager --> 邮件/Slack/Webhook
vmauth --> 统一入口,按 token/路径做认证与租户路由
与 Prometheus 的兼容边界(重点)
| 维度 | 兼容情况 |
|---|---|
| 查询 API | ✅ /api/v1/query、query_range、series、labels、label/<name>/values;Grafana 直接选 Prometheus 数据源 |
| 写入 | ✅ remote write /api/v1/write;✅ remote read(单节点与 vmselect 前缀路径,具体以官方文档为准) |
| 抓取配置 | ✅ vmagent 复用 scrape_configs / relabel_configs / *_sd_configs |
| 规则 | ✅ vmalert 复用 groups/rules YAML;记录规则经 -remoteWrite.url 回写 |
| 查询语言 | ✅ 主体 PromQL;➕ MetricsQL 扩展函数与更宽松的 rollup 行为 |
| 差异 / 不兼容 | ❌ 无内置抓取与本地 WAL(需 vmagent 或外部 remote write);❌ 无内置告警通知;❌ 不支持全部 /api/v1/admin/tsdb/*;⚠️ staleness、lookback delta 与部分函数边界行为有差异;❌ 不实现 Thanos StoreAPI / Sidecar 协议 |
3. 安装与部署
3.1 环境准备
| 项 | 要求 |
|---|---|
| 架构 | x86_64 / ARM64,Linux 为主,或用 Docker 镜像 |
| 磁盘 | 本地 SSD;⚠️ 不建议 NFS 等网络盘(IOPS 与锁语义拖垮合并) |
| 文件描述符 | LimitNOFILE ≥ 65535(systemd 需显式设置) |
| 时钟 / 端口 / 权限 | 全组件 NTP 同步;仅放通内网端口(见第 12 章);专用非 root 用户、数据目录属主一致 |
3.2 多种安装方式
A. Docker 单节点(官方 Quick Start)
docker pull victoriametrics/victoria-metrics:latest
docker run -d --name vmsingle -p 8428:8428 \
-v "$(pwd)/victoria-metrics-data:/victoria-metrics-data" \
victoriametrics/victoria-metrics:latest -retentionPeriod=3 \
-storageDataPath=/victoria-metrics-data
B. docker compose(vmsingle + vmagent + vmalert 最小套件)
services:
vmsingle:
image: victoriametrics/victoria-metrics:<version>
command: ["-storageDataPath=/data", "-retentionPeriod=3"]
volumes: ["./data:/data"]
ports: ["8428:8428"]
vmagent:
image: victoriametrics/vmagent:<version>
volumes: ["./scrape.yml:/etc/vmagent/scrape.yml:ro"]
command: ["-promscrape.config=/etc/vmagent/scrape.yml", "-remoteWrite.url=http://vmsingle:8428/api/v1/write"]
vmalert:
image: victoriametrics/victoria-metrics:<version>
volumes: ["./rules:/etc/rules:ro"]
command: ["-rule=/etc/rules/*.yml", "-datasource.url=http://vmsingle:8428", "-notifier.url=http://alertmanager:9093"]
C. 二进制 + systemd
curl -LO "https://github.com/VictoriaMetrics/VictoriaMetrics/releases/latest/download/victoria-metrics-linux-amd64-<version>.tar.gz"
tar xzf victoria-metrics-linux-amd64-<version>.tar.gz
install -m 0755 victoria-metrics-prod /usr/local/bin/
useradd -r -s /sbin/nologin vm
mkdir -p /var/lib/victoria-metrics && chown vm:vm /var/lib/victoria-metrics
systemctl daemon-reload && systemctl enable --now vmsingle
# /etc/systemd/system/vmsingle.service
[Unit]
[Service]
User=vm
LimitNOFILE=65535
ExecStart=/usr/local/bin/victoria-metrics-prod -storageDataPath=/var/lib/victoria-metrics -retentionPeriod=3 -httpListenAddr=:8428 -memory.allowedBytes=4GB
Restart=on-failure
[Install]
WantedBy=multi-user.target
D. 包仓库(RPM/DEB)
sudo dnf -y install dnf-plugins-core
sudo dnf -y copr enable victoriametrics/VictoriaMetrics-LTS-rpm
sudo dnf makecache && sudo dnf -y install vmsingle vmagent vmalert vmctl
DEB / APT 仓库配置以官方文档为准(包名同上)。
E. Kubernetes Helm
helm repo add vm https://victoriametrics.github.io/helm-charts/ && helm repo update
helm install vms vm/victoria-metrics-k8s-stack -n monitoring --create-namespace
一体化套件含 vmagent/vmalert/Grafana 等;也可单独装 single / cluster / operator chart。
F. 集群版:镜像 victoriametrics/vminsert、vmselect、vmstorage;vminsert -storageNode=<st>:8400 接写入、vmselect -storageNode=<st>:8401 接查询、vmstorage 存本地盘;同类实例的 -storageNode 列表必须完全一致,端口见第 12 章。
3.3 首次启动与验证
curl -s http://localhost:8428/health && echo
curl -s http://localhost:8428/metrics | head
curl -s -X POST 'http://localhost:8428/api/v1/import/prometheus' --data-binary 'smoke_test{job="init"} 1'
curl -sG 'http://localhost:8428/api/v1/query' --data-urlencode 'query=smoke_test'
浏览器打开 http://<host>:8428/vmui 进入 VMUI 图形查询界面。
4. 配置文件详解
主配置:VictoriaMetrics 无单一主配置文件,以命令行 flag 为主;数据落在 -storageDataPath,附属配置如下。
| 载体 | 路径 / flag | 说明 |
|---|---|---|
| 单节点参数 | 启动 flag / systemd unit / compose command | 无独立 conf |
| 数据目录 | -storageDataPath(默认 victoria-metrics-data) |
全部时序数据与索引 |
vmagent 抓取 |
-promscrape.config |
语法同 prometheus.yml |
vmalert 规则 |
-rule=/etc/vmalert/rules/*.yml |
支持通配符、URL、S3/GCS |
vmauth 鉴权 |
-auth.config |
用户/token/路由规则 |
| 集群路由 | vminsert/vmselect 的 -storageNode |
⚠️ 同类实例列表必须完全一致 |
| flag | 含义 | 建议 |
|---|---|---|
-httpListenAddr |
HTTP 监听 | :8428 |
-storageDataPath |
数据目录 | 独立 SSD 挂载点 |
-retentionPeriod |
保留期,默认单位「月」 | 3 = 3 个月;带单位写法以官方文档为准 |
-memory.allowedBytes |
缓存内存上限 | 物理内存 50%~60% |
-maxLabelsPerTimeseries |
单时序最大 label 数 | 默认 30,异常时勿盲目调大 |
-search.maxUniqueTimeseries / -search.maxQueryDuration |
单查询扫描时序上限 / 最长耗时 | 防 OOM、防长查询 |
-dedup.minScrapeInterval |
去重窗口(多副本同写) | 双写场景设为抓取间隔 |
完整可运行最小示例(三件套)
# scrape.yml —— vmagent 抓取配置
global:
scrape_interval: 15s
scrape_configs:
- job_name: node
static_configs:
- targets: ["<node-exporter-host>:9100"]
---
# rules/alert.yml —— vmalert 告警 + 记录规则
groups:
- name: host
interval: 15s
rules:
- alert: InstanceDown
expr: up == 0
for: 2m
- record: job:up:avg
expr: avg by (job) (up)
vmalert -rule=rules/*.yml -dryRun
vmalert -rule=rules/*.yml -datasource.url=http://<vm>:8428 -remoteWrite.url=http://<vm>:8428 -notifier.url=http://<am>:9093
5. 核心使用方法(CLI / HTTP API / MetricsQL / VMUI)
HTTP API · 写入(remote write 由 Prometheus/vmagent 发起:remote_write.url: http://<vm>:8428/api/v1/write;remote read 路径以官方文档为准)
curl -X POST 'http://<vm>:8428/api/v1/import/prometheus' --data-binary @metrics.txt
curl -X POST 'http://<vm>:8428/api/v1/import' --data-binary '{"metric":{"__name__":"room_temp","room":"101"},"values":[23.5],"timestamps":[<unix_ms>]}'
curl -X POST 'http://<vm>:8428/influx/write' --data-binary 'cpu,host=web01 usage=42.5 <unix_ns>'
curl -X POST 'http://<vm>:8428/api/v1/import/csv' --data-binary @data.csv
curl -X POST 'http://<vminsert>:8480/insert/0/prometheus/api/v1/write' --data-binary @payload
HTTP API · 查询与管理
curl -sG 'http://<vm>:8428/api/v1/query' --data-urlencode 'query=up'
curl -sG 'http://<vm>:8428/api/v1/query_range' --data-urlencode 'query=rate(node_cpu_seconds_total[5m])' --data-urlencode 'start=<unix_s>' --data-urlencode 'end=<unix_s>' --data-urlencode 'step=60s'
curl -sG 'http://<vm>:8428/api/v1/series' --data-urlencode 'match[]=up{job="node"}'
curl -sG 'http://<vm>:8428/api/v1/labels'
curl -sG 'http://<vm>:8428/api/v1/label/job/values'
curl -sG 'http://<vm>:8428/api/v1/export' --data-urlencode 'match[]={__name__=~".+"}' -o dump.jsonl
curl -s 'http://<vm>:8428/snapshot/create'
curl -s 'http://<vm>:8428/snapshot/delete?snapshot=<name>'
curl -s 'http://<vmalert>:8880/api/v1/rules'
curl -s -X POST 'http://<vmalert>:8880/-/reload'
curl -s 'http://<vm>:8428/metrics' | grep -E 'vm_(rows|free_disk_space_bytes)'
MetricsQL / PromQL(在 VMUI 或 query= 参数中使用;前 4 条标准 PromQL 完全兼容,后 7 条为 MetricsQL 扩展)
sum by (job) (rate(http_requests_total[5m]))
histogram_quantile(0.99, sum by (le) (rate(http_request_duration_seconds_bucket[5m])))
up == 0 or absent(up)
topk(10, rate(node_network_receive_bytes_total[5m]))
median_over_time(node_load1[1h])
quantiles("quantile", 0.5, 0.9, 0.99, rate(http_request_duration_seconds_bucket[5m]))
outlierIQR(cpu_usage[1h])
running_max(process_resident_memory_bytes)
keep_last_value(up[5m])
increase_pure(http_requests_total[5m])
CLI 工具
vmagent -promscrape.config=scrape.yml -promscrape.configCheck
vmagent -promscrape.config=scrape.yml -remoteWrite.url=http://<vm1>:8428/api/v1/write -remoteWrite.url=http://<vm2>:8428/api/v1/write
vmctl prometheus --prom-snapshot=<snapshot-dir> --vm-addr=http://<vm>:8428
vmctl vm-native --src-addr=http://<src>:8428 --dst-addr=http://<dst>:8428 --vm-native-filter.time-start=<RFC3339> --vm-native-filter.time-end=<RFC3339>
vmbackup -storageDataPath=/var/lib/victoria-metrics -snapshot.createURL=http://<vm>:8428/snapshot/create -dst=s3://<bucket>/vm/<date>
vmrestore -src=s3://<bucket>/vm/<date> -storageDataPath=/var/lib/victoria-metrics
VMUI:
http://<vm>:8428/vmui支持图形查询、瞬时/区间切换、Prettify 与查询分析。以上共 40+ 条可用命令。
6. 告警与通知
链路:vmalert(评估)→ Alertmanager(分组/抑制/静默/路由)→ 邮件 / Slack / Webhook;VM 自身不发通知。
# alertmanager.yml 最小示例
route:
receiver: default
repeat_interval: 4h
receivers:
- name: default
webhook_configs:
- url: "http://<webhook-host>/alert"
vmalert -rule=/etc/vmalert/rules/*.yml -datasource.url=http://<vmselect>:8481/select/0/prometheus \
-notifier.url=http://<am>:9093 \
-remoteWrite.url=http://<vminsert>:8480/insert/0/prometheus/api/v1/write \
-remoteRead.url=http://<vmselect>:8481/select/0/prometheus \
-external.label=cluster=cn-east -evaluationInterval=15s
| 对接对象 | 方式 |
|---|---|
| Alertmanager | -notifier.url,可配多副本、Consul/DNS SD;邮件/Slack/Webhook 在其 receiver 配置 |
| Grafana 查询 | Prometheus 数据源 URL 填 http://<vm>:8428(集群填 vmselect 的 /select/0/prometheus) |
| Grafana Alerting | 单节点加 -vmalert.proxyURL=http://<vmalert>:8880,使 Grafana 可读写规则 |
| 记录规则降采样 | -remoteWrite.url 指向长期存储,实现"高频短留 → 低频长留" |
7. 实战场景
场景一:把现有 Prometheus 数据平滑接入 / 迁移(零停机双写)
目标:不停机、不丢历史,最终切读到 VM,且随时可回退。
curl -s http://<vm>:8428/health
# ② 源 Prometheus 追加 remote_write「双写」(本地 TSDB 保留),reload 不重启
curl -s -X POST http://<prom>:9090/-/reload
curl -s -X POST 'http://<prom>:9090/api/v1/admin/tsdb/snapshot'
vmctl prometheus --prom-snapshot=<prom-data-dir>/snapshots/<name> --vm-addr=http://<vm>:8428 --vm-concurrency=4
# 备选:已有 VM 时原生互迁
vmctl vm-native --src-addr=http://<old-vm>:8428 --dst-addr=http://<vm>:8428 --vm-native-filter.time-start=<RFC3339> --vm-native-filter.time-end=<RFC3339>
# ④ 双端对比 ⑤ 切读:Grafana 数据源 URL 改为 http://<vm>:8428
curl -sG 'http://<prom>:9090/api/v1/query' --data-urlencode 'query=count(up)'
curl -sG 'http://<vm>:8428/api/v1/query' --data-urlencode 'query=count(up)'
# prometheus.yml 追加片段
remote_write:
- url: http://<vm>:8428/api/v1/write
queue_config:
max_samples_per_send: 10000
capacity: 20000
max_shards: 30
验证:两端 count(up) 与关键 rate() 曲线重合、VM /health 正常。回滚:删 remote_write 并 reload、Grafana 数据源改回 Prometheus、VM 数据保留不删;源 TSDB 全程未动,无数据风险。
场景二:vmagent 替换抓取 + 多远端 + 高基数标签治理
目标:降低抓取内存,一份数据双写主备 VM,入口拦截高基数标签。
global:
scrape_interval: 15s
scrape_configs:
- job_name: k8s-pods
kubernetes_sd_configs:
- role: pod
relabel_configs:
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
action: keep
regex: "true"
metric_relabel_configs:
- source_labels: [__name__]
regex: ".*(user_id|request_id|session_id).*"
action: labeldrop
vmagent -promscrape.config=scrape.yml -promscrape.configCheck
vmagent -promscrape.config=scrape.yml -remoteWrite.url=http://<vm-primary>:8428/api/v1/write -remoteWrite.url=http://<vm-dr>:8428/api/v1/write -remoteWrite.tmpDataPath=/var/lib/vmagent
验证:curl -s http://<vmagent>:8429/metrics | grep vmagent_remotewrite 两远端字节数均增长、两端 up 一致。回滚:停 vmagent、恢复原 Prometheus scrape_configs 并 reload;已写数据不受影响。
场景三:集群版多租户 + vmalert 记录规则降采样长留
目标:按业务线隔离租户,秒级明细聚合成 5 分钟均值写入冷实例。
vminsert -storageNode=<st1>:8400 -storageNode=<st2>:8400 -httpListenAddr=:8480
vmselect -storageNode=<st1>:8401 -storageNode=<st2>:8401 -httpListenAddr=:8481
curl -sG 'http://<vmselect>:8481/select/42/prometheus/api/v1/query' --data-urlencode 'query=up'
vmalert -rule=downsample.yml -datasource.url=http://<vm-hot>:8428 -remoteWrite.url=http://<vm-cold>:8428 -evaluationInterval=5m
groups:
- name: downsample
interval: 5m
rules:
- record: http:requests:rate5m
expr: sum by (job) (rate(http_requests_total[5m]))
验证:租户 42/43 查询互不可见、vmselect 日志无 cannot connect to storageNode、cold 实例查 http:requests:rate5m 有点。回滚:Grafana 指回单节点双写实例、停 vmalert(cold 数据保留);-storageNode 全量一致后滚动重启。
8. 日常运维与故障排查
systemctl status vmsingle vmagent vmalert && systemctl restart vmsingle
journalctl -u vmsingle -f --since "10 min ago"
docker logs -f vmsingle 2>&1 | grep -iE 'error|warn'
curl -s http://<vm>:8428/health
curl -s http://<vm>:8428/metrics | grep -E 'vm_(active_merges|rows|free_disk_space_bytes)'
curl -s 'http://<vm>:8428/debug/pprof/' | head
| 现象 | 原因 | 处置 |
|---|---|---|
写入 400 too many labels |
高基数标签 / 超限 | metric_relabel_configs 去标签;勿盲目调大上限 |
| 查询超时或进程 OOM | 大范围 + 高基数扫描 | 缩小时间窗/加 label 过滤;调 -search.maxUniqueTimeseries、加内存 |
| 磁盘增长超预期 | 保留期单位误读(月)、churn rate 过高 | 核对单位;查 vm_new_timeseries_created_total 定位爆炸源 |
| remote_write 断档 | Prometheus 队列积压 / 网络不通 | 看 prometheus_remote_storage_*、调 queue_config、确认 /api/v1/write 路径 |
| 集群结果时多时少 | 各 vmselect 的 -storageNode 不一致 |
全量统一后滚动重启 |
| vmalert 告警不触发 | 数据源不通 / 规则语法错 / 漏配 -notifier.url |
-dryRun 校验、查日志、确认 Alertmanager 可达 |
| 重启后"历史不见了" | 查询超保留期,或数据目录被换 | 核对 -storageDataPath 与 retention;从快照恢复 |
9. 性能、容量与高可用
| 项 | 公式 / 经验 |
|---|---|
| 日采样点数 | samples/day ≈ active_series × 86400 / scrape_interval |
| 磁盘 | disk ≈ samples/day × retention_days × bytes_per_sample;VM 压缩后经验 0.4~1 Byte/样本,须用自身样本压测校准 |
| 内存 | mem ≈ active_series × ~1KB(量级),由 -memory.allowedBytes 硬限,建议物理内存 50%~60% |
| 写入带宽 | 与「活跃时序 × 抓取频率」线性相关,另为 churn rate 预留 30%+ 缓冲 |
| 调优参数 | -memory.allowedBytes、-search.maxUniqueTimeseries、-search.maxQueryDuration、-retentionPeriod、-dedup.minScrapeInterval、-maxLabelsPerTimeseries、-storageDataPath(本地 SSD)、vmagent -remoteWrite.* 削峰续传 |
- 单节点 HA:2+
vmsingle+vmagent多-remoteWrite.url双写 +vmauth/LB 读均衡 +-dedup.minScrapeInterval去重。 - 集群 HA:
vmstorage多节点 +vminsert/vmselect无状态多副本;复制类参数以官方文档为准;⚠️ 勿同时重启全部vmstorage。 - 降采样 / 对象存储:
vmagent流聚合、vmalert记录规则回写冷实例、热/冷两套 VM;开源版数据落本地盘,用vmbackup -dst=s3://.../gcs://...异地快照,企业版/云版支持更深分层。 - 自监控:每组件
/metrics+ 官方 Grafana dashboard;用一套独立小型 VM 监控生产 VM,避免自监控自瞎。
10. 安全加固、备份与升级
| 项 | 做法 |
|---|---|
| 认证 | 开源单节点默认无认证:用 vmauth -auth.config、-httpAuth.username/-httpAuth.password 或 Nginx Basic/OAuth2 反代;集群用租户路径隔离 |
| TLS | 推荐反代终止;组件原生 -tls / -tlsCertFile / -tlsKeyFile 以官方文档为准 |
| 最小权限 | 非 root 运行、数据目录 750、只放通内网端口、限制 /snapshot/* 与删除类 API 来源 |
| 备份 / 恢复 | 即时快照 + vmbackup 到对象存储;vmrestore 恢复前停服 |
| 升级 | 读 CHANGELOG → 备份 → 停服替换二进制/镜像 tag → 验证 /health 与查询;集群先滚动 vmselect/vminsert,最后逐个 vmstorage |
| 回滚 | 保留旧二进制与备份按反向还原;⚠️ 跨大版本数据目录格式可能不兼容,必要时走 vmctl 导出导入 |
vmbackup -storageDataPath=/var/lib/victoria-metrics -snapshot.createURL=http://<vm>:8428/snapshot/create -dst=s3://<bucket>/vm/$(date +%F)
systemctl stop vmsingle
vmrestore -src=s3://<bucket>/vm/<date> -storageDataPath=/var/lib/victoria-metrics
chown -R vm:vm /var/lib/victoria-metrics && systemctl start vmsingle
⚠️ 恢复目标目录必须为空且版本与备份时一致。
11. 常见坑
| # | 现象 | 原因 | 解决 |
|---|---|---|---|
| 1 | ⚠️ 数据被全网读取/篡改 | 8428 无认证暴露公网 | 前置 vmauth/反代加认证,防火墙只放内网 |
| 2 | remote_write 报 404/400 | URL 漏 /api/v1/write,或集群误用 /insert/<id>/... |
区分单节点与集群写入路径 |
| 3 | ⚠️ 设 -retentionPeriod=12 后磁盘撑满 |
默认单位是「月」,12 = 12 个月 | 按官方支持的带单位写法配置或换算;上线前算容量 |
| 4 | 索引膨胀、查询变慢 | user_id/request_id 等高基数标签入库 |
metric_relabel_configs: labeldrop 入口拦截 |
| 5 | 集群结果"飘" | 各 vmselect 的 -storageNode 不一致 |
全量统一后滚动重启 |
| 6 | ⚠️ 全部 vmstorage 同时重启后数据查不到 |
多副本同时离线 | 逐个滚动重启并确认健康 |
| 7 | ⚠️ 生产用 :latest 升级后行为突变 |
镜像自动飘版本 | 固定具体 tag,先过预发 |
| 8 | ⚠️ 直接 rm -rf storageDataPath "清数据" |
误删数据目录 | 用删除序列 API(支持情况以官方文档为准)或调 retention 自动回收 |
| 14 | ⚠️ 未备份就升级大版本 | 目录格式变更可能无法降级 | 强制先备份 + 预发演练 + 保留旧二进制 |
12. 速查表
| 类别 | 项 | 值 / 命令 |
|---|---|---|
| 端口 | vmsingle / vmagent / vmalert / vmauth |
8428 / 8429 / 8880 / 8427 |
| 端口 | vminsert / vmselect |
8480 / 8481 |
| 端口 | vmstorage HTTP / 写入 / 查询 |
8482 / 8400 / 8401 |
| 数据/配置 | 目录、抓取、规则、鉴权、路由 | -storageDataPath、-promscrape.config、-rule、-auth.config、-storageNode |
| 参数 | 保留期/内存/查询闸门/去重 | -retentionPeriod、-memory.allowedBytes、-search.maxUniqueTimeseries、-dedup.minScrapeInterval |
| API | 健康 / 自监控 | GET /health、GET /metrics |
| API | remote write | POST /api/v1/write |
| API | 查询 | GET /api/v1/query、/api/v1/query_range |
| API | 序列 / 标签 | GET /api/v1/series、/api/v1/labels、/api/v1/label/<name>/values |
| API | 导入 | POST /api/v1/import、/api/v1/import/prometheus、/influx/write |
| API | 导出 / 快照 | GET /api/v1/export、/snapshot/create、/snapshot/list、/snapshot/delete |
| 集群路径 | 多租户写 / 读 | /insert/<id>/prometheus/api/v1/write、/select/<id>/prometheus/api/v1/query |
| CLI | 迁移 / 备份 / 恢复 | vmctl / vmbackup / vmrestore |
| CLI | 规则校验 | vmalert -rule=*.yml -dryRun |
13. 选型建议与同类对比
| 维度 | VictoriaMetrics | Prometheus | Thanos | Grafana Mimir | InfluxDB |
|---|---|---|---|---|---|
| 定位 | 一体化远程 TSDB + 套件 | 单机抓取 + 本地 TSDB | 长期存储/全局查询层 | 大规模多租户后端 | 通用时序库 + TICK 栈 |
| 长期存储 | 本地高压缩盘 + 快照到对象存储 | 本地盘有限 | 对象存储是核心 | 对象存储是核心 | 本地/企业版 |
| 全局查询 | vmselect 原生 |
无 | Query 扇出 |
原生 | 无(需自建) |
| 部署复杂度 | 低(单二进制)/ 中(集群) | 最低 | 高(组件多) | 高 | 低~中 |
| 资源成本 | 低(高压缩、省内存) | 中 | 中(对象存储便宜但组件多) | 中~高 | 中 |
| 查询语言 | MetricsQL ⊃ PromQL | PromQL | PromQL | PromQL | InfluxQL / Flux |
| 多租户 | 集群版账号 ID 路径 | 无 | 靠 external_labels | 原生强 | bucket/org |
何时选:已有 Prometheus 生态想低成本获得长期存储/全局查询;资源受限但基数高;希望单机起步、集群按需演进;需多协议写入与轻量 vmagent。
何时不选:只需单机短周期监控(原生 Prometheus 足够);已重度投入 Thanos/Mimir 对象存储架构;核心诉求是日志或链路追踪;需要关系型/事务查询。
14. 参考链接
- 官网:https://victoriametrics.com/
- 官方文档:https://docs.victoriametrics.com/
- GitHub 仓库:https://github.com/VictoriaMetrics/VictoriaMetrics
- Releases(下载与版本):https://github.com/VictoriaMetrics/VictoriaMetrics/releases
- Quick Start:https://github.com/VictoriaMetrics/VictoriaMetrics/blob/master/docs/Quick-Start.md
- vmalert 文档:https://github.com/VictoriaMetrics/VictoriaMetrics/blob/master/docs/vmalert.md
- 单节点版:https://docs.victoriametrics.com/Single-server-VictoriaMetrics.html
- 集群版:https://docs.victoriametrics.com/Cluster-VictoriaMetrics.html
- MetricsQL:https://docs.victoriametrics.com/MetricsQL.html
- Helm Charts:https://github.com/VictoriaMetrics/helm-charts