VictoriaMetrics —— 高性能、低成本、兼容 Prometheus 的时序数据库与监控套件

运维监控软件手册 01-指标采集与时序存储 19.6 KB 原文

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. 参考链接

VictoriaMetrics —— 高性能、低成本、兼容 Prometheus 的时序数据库与监控套件 - 知识库 - 起航社区