
在国内 IT 监控领域,上规模的公司很大概率会选型 VictoriaMetrics 作为时序存储。但 VictoriaMetrics 的中文教程相对较少,我们希望通过这个系列文章,帮助大家更好地了解 VictoriaMetrics。
本文是 VictoriaMetrics 中文教程第 01 篇,重点介绍 VictoriaMetrics 是什么、它和 Prometheus 的关系、它的核心特点以及生态组件。
核心摘要
- VictoriaMetrics 是一个快速、经济高效、可扩展的监控解决方案和时间序列数据库。
- 它不只是 Prometheus remote storage,而是明确以替代 Prometheus 为目标,这一点从它对 remote read 接口的态度上也能看出来。
- VictoriaMetrics 分为社区版和商业版;后续文章会标注商业版功能,未标注的默认按社区版理解。
- VictoriaMetrics 支持 Prometheus、Graphite、InfluxDB、OpenTSDB、Datadog、NewRelic、OpenTelemetry 等多种协议的数据接入。
- 除单节点 VictoriaMetrics 外,生态里还有 vmagent、vmalert、vmauth、vmctl、vmbackup、集群组件和 VictoriaLogs 等工具。
VictoriaMetrics 简介
VictoriaMetrics 是一种快速、经济高效且可扩展的监控解决方案和时间序列数据库。它的目标是替换 Prometheus。
这里要注意,大部分 Prometheus 生态里的时序库都会把自己定位为 Prometheus 的远端存储;但 VictoriaMetrics 不是,它的目标是替代 Prometheus。从 VictoriaMetrics 对待 remote read 接口的态度上,也能看到这个定位差异。
VictoriaMetrics 分为社区版和商业版。对大部分企业来说,社区版已经够用。后续文章中会标注哪些是商业版功能;如果没有标注,就表示按社区版功能理解。
VictoriaMetrics 的突出特点
VictoriaMetrics 的特点可以从兼容性、性能、运维复杂度和数据接入能力几个方向理解。
兼容 Prometheus 和 Graphite 查询生态
- 可以用作 Grafana 中 Prometheus 的直接替代品,因为它支持 Prometheus 查询 API。
- 可以用作 Grafana 中 Graphite 的直接替代品,因为它支持 Graphite API。与 Graphite 相比,VictoriaMetrics 可以将基础设施成本降低 10 倍以上。
- 实现了类似 PromQL 的查询语言 MetricsQL,并在 PromQL 基础上提供了改进能力。
运维简单
VictoriaMetrics 的运维复杂度相对低:
- 由一个小型可执行文件组成,没有外部依赖。
- 所有配置都通过显式命令行参数完成,并提供合理默认值。
- 所有数据都存储在
-storageDataPath命令行参数指定的单个目录中。 - 可以使用
vmbackup、vmrestore工具基于即时快照进行备份和恢复。
支持全局查询视图
多个 Prometheus 实例或其他数据源可以把数据写入 VictoriaMetrics。之后可以通过单个查询视图查询这些数据。这对多集群、多机房、多采集源的监控场景很有价值。
性能和资源消耗表现突出
原文提到,VictoriaMetrics 为数据摄取和数据查询提供高性能以及良好的垂直、水平扩展能力:
- 性能比 InfluxDB 和 TimescaleDB 高出 20 倍。
- 在处理数百万独特时间序列,也就是高基数场景时,RAM 使用量比 InfluxDB 少 10 倍,比 Prometheus、Thanos 或 Cortex 少 7 倍。
- 针对高流失率时间序列做了优化。所谓高流失率,就是很多指标上报一段时间后就不再上报,例如 Kubernetes 环境中 Pod 频繁变化导致的短生命周期指标。
- 根据这些基准测试,相比 TimescaleDB,有限存储中可以存储多达 70 倍的数据点;相比 Prometheus、Thanos 或 Cortex,所需存储空间减少多达 7 倍。
- 针对高延迟 IO 和低 IOPS 存储做了优化,例如 AWS、Google Cloud、Microsoft Azure 中的 HDD 和网络存储。
单节点 VictoriaMetrics 可以替代使用 Thanos、M3DB、Cortex、InfluxDB 或 TimescaleDB 等方案构建的中等规模集群。相关材料包括垂直可扩展性基准、比较 Thanos 与 VictoriaMetrics 集群,以及 PromCon 2019 的远程写入存储战争演讲。
存储可靠性和数据接入能力
由于存储架构设计,VictoriaMetrics 可以在异常关闭时保护存储免受数据损坏,例如 OOM、硬件重置或 kill -9。
VictoriaMetrics 支持通过多种协议抓取或接收指标数据:
- 从 Prometheus exporter 抓取数据。
- 通过 Prometheus remote write 接收数据。
- Prometheus exposition format。
- 基于 HTTP、TCP、UDP 的 InfluxDB 行协议。
- 支持 tags 的 Graphite plaintext 协议。
- OpenTSDB put 协议。
- JSON 行协议。
- 任意 CSV 格式。
- 原生二进制协议。
- Datadog agent 或 DogStatsD。
- NewRelic infrastructure agent。
- OpenTelemetry 指标协议。
从这些协议支持可以看出,VictoriaMetrics 希望对接各种数据来源,做大一统的时序存储方案。
其他能力
- 支持强大的流聚合,可以作为 StatsD 的替代品。
- 支持 relabel。
- 支持 series limiter,用于做高基数限制和高流失率限制。
- 适合处理来自 APM、Kubernetes、物联网传感器、联网汽车、工业遥测、财务数据和各种企业工作负载的大量时间序列数据。
- 集群版本也是开源的,这一点显然是针对 InfluxDB 的,哈哈。
- 可以将数据存储在基于 NFS 的存储上,例如 Amazon EFS 和 Google Filestore。
VictoriaMetrics 的组件
除了单节点 VictoriaMetrics,VictoriaMetrics 生态系统还包含很多组件:
| 组件 | 作用 |
|---|---|
vmagent |
轻量级代理,用于通过 PULL 和 PUSH 协议接收指标,转换后发送到与 Prometheus 兼容的远程存储系统,例如 VictoriaMetrics。 |
vmalert |
用于处理与 Prometheus 兼容的告警规则和记录规则。 |
vmalert-tool |
用于验证告警规则和记录规则。 |
vmauth |
针对 VictoriaMetrics 产品优化的授权代理和负载均衡器。 |
vmgateway |
具备每租户速率限制能力的授权代理。 |
vmctl |
用于在不同存储系统之间迁移和复制指标数据。 |
vmbackup、vmrestore、vmbackupmanager |
用于创建 VictoriaMetrics 数据备份以及从备份恢复。 |
vminsert、vmselect、vmstorage |
VictoriaMetrics 集群版组件。 |
VictoriaLogs |
用户友好、经济高效的日志数据库。它和时序指标无关,是 VictoriaMetrics 公司的另一个产品。 |
FAQ
VictoriaMetrics 是 Prometheus 的远端存储吗?
它可以作为 Prometheus remote write 的后端存储使用,但 VictoriaMetrics 的定位不止于此。原文强调,它的目标是替代 Prometheus,而不是只做 Prometheus 的远端存储。
社区版 VictoriaMetrics 够用吗?
对大部分企业来说,社区版已经够用。后续教程会单独标注商业版功能,未标注的内容默认按社区版理解。
VictoriaMetrics 适合什么场景?
它适合需要低资源消耗、高性能查询、大规模时间序列存储、多协议接入和 Prometheus 生态兼容的监控场景,尤其适合高基数、高流失率指标较多的环境。
总结
VictoriaMetrics 是一个非常优秀的时序数据库,性能、稳定性、易用性都不错,也是国内很多大厂的选择。本文是 VictoriaMetrics 中文教程第 01 篇,主要介绍它的定位、特点和生态组件。后续文章会继续介绍安装、Prometheus remote write、Grafana 对接、采集器接入、容量规划和高可用方案。
