VictoriaMetrics 是一个快速、经济高效且可扩展的监控解决方案和时间序列数据库,不仅可以作为 Prometheus 的远程存储,还可以使用其组件完全替换 Prometheus.它主要有以下特性:
- 支持 Prometheus querying API,Graphite API. 可以在 Grafana 中直接使用
- 实现了基于 PromQL 的查询语言 - MetricsQL,提供了一些高级功能
- 提供了全局视图,支持多个 Prometheus 实例或任何其他数据源同时向 VictoriaMetrics 写入数据,查询时数据可以保证唯一
- 占用资源少,且高性能.
- 支持多种方式获取 metrics. 如:
- 从 exporter 直接获取.与prometheus 完全兼容.除 static_config 外,还支持多种服务发现方式,如:
- 通过 Prometheus 远程写入
- 通过 Post 请求将指定 JSON 格式的数据直接写入
- 支持 metrics relabel.与 prometheus 完全兼容
- 支持单机模式与集群模式
单机模式
单机模式比较简单,直接下载二进制或 Docker 镜像 并使用指定的命令行启动.
单机模式可能用到的组件.
- victoria-metrics: metrics 数据抓取或存储
- vmalert: 按照指定的规则将 metrics 数据聚合或向 alertmanager 发送告警
- vmauth: 启用用户认证功能
以二进制为例,可以通过
-storageDataPath
参数指定数据存储的目录.默认为victoria-metrics-data
-retentionPeriod
参数指定数据保存的时长.默认为1 month
-httpListenAddr
参数指定监听的 HTTP 套接字.默认为:8428
-loggerTimezon
参数指定日志的时区,默认为UTC
.建议设置为Asia/Shanghai
-maxInsertRequestSize
参数限制 Prometheus remote_write API 的请求大小. 默认为33554432 byte
.支持可选的单位为KB, MB, GB, KiB, MiB, GiB
-promscrape.config
参数指定 Prometheus 配置文件路径.该配置文件只需要包含scrape_configs
部分配置即可.(经测试 VictoriaMetrics 支持scrape_configs
中的relabel_configs
和metric_relabel_configs
)-promscrape.config.strictParse
参数设置是否会严格校验-promscrape.config
指定的配置文件.默认情况下,不支持的字段会跳过,兼容 Prometheus 的配置文件-promscrape.configCheckInterval
参数设置检查 Prometheus 配置文件是否变更的时间间隔.若变更,则重新加载.默认关闭-relabelConfig
参数指定 relabel 的规则.-relabelDebug
参数指定日志中是否指定 relabel 前后的 metrics.多用于调试.-selfScrapeInstance
参数设置抓取自身 metrics 时,instance
标签的值.默认self
-selfScrapeInterval
参数设置抓取自身 metrics 的时间间隔-selfScrapeJob
参数设置设置抓取自身 metrics 时,instance
标签的值.默认victoria-metrics
从参数看来,单机模式下的 VictoriaMetrics
可以
- 作为 Prometheus 的远程存储
启动 VictoriaMetrics 脚本如下:
1 | # start_VictoriaMetrics.sh |
Prometheus 远程写入相关配置如下:
1 | # prometheus.yml |
- 指定
promscrape.config
直接抓取并存储 metrics.
这种方式启动与作为远程存储启动方式基本与存储方式大同小异,只需要指定对应配置文件即可.在直接抓取 metrics 过程中,VictoriaMetrics 需要一些其他的组件去实现 Prometheus 中的功能.比如
- Prometheus 中规则(包括 metrics 聚合规则与告警规则) 需要
vmalert
组件来实现.且vmalert
只是发送告警到Alertmanager
.vmalert
支持的规则与 Prometheus 的规则一致.有关vmalert
的使用,参见官方文档 - Prometheus 中认证相配置 需要
vmauth
组件来实现,参见官方文档
1 | cd ${victoria-metrics-home} |
为了加强数据的安全性,可以将 victoria-metrics 存储监听在 localhost.启用 auth. 配置一些自定义用户信息. vmauth
配置文件示例如下. Grafana 可使用该用户获取数据.
1 | users: |
集群模式
VictoriaMetrics 集群模式相对来说比较复杂.主要由 vmstorage
,vminsert
,vmselect
三部分组成, 这三个组件每个组件都可以单独进行扩展.其中:
- vmstorage 负责提供数据存储服务
- vminsert 是数据存储 vmstorage 的代理,使用一致性 hash 算法进行写入分片
- vmselect 负责数据查询,根据输入的查询条件从 vmstorage 中查询数据
vmstorage 采用 shared-nothing 架构,优点是 vmstorage 的节点相互之间无感知,相互之间无需通信,不共享任何数据,增加了集群的可用性,简化了集群的扩展的难度与运维工作.
特性
VictoriaMetrics 集群模式支持
vminsert
和vmselect
是无状态的.可以随时添加/删除.添加更多的vminsert
和vmselect
节点可以扩展数据写入与查询的效率vmstorage
节点保存抓取的数据,因此无法在不丢失数据的情况下删除它们.添加更多vmstorage
节点可扩展集群容量.添加vmstorage
的步骤如下:
1 | 1. 使用与集群中现有节点相同的 -retentionPeriod 启动新的 vmstorage 节点 |
- 支持时间序列数据的多个名称空间(租户).多个租户之间相互隔离
VictoriaMetrics 集群支持多个独立的租户.租户由 accountID
或 accountID:projectID
标识,他们放在 url 中.如 http://<vminsert>:8480/insert/<accountID>/<suffix>
,http://<vmselect>:8481/select/<accountID>/prometheus/<suffix>
等.
- 每个 accountID 和 projectID 由范围 [0 .. 2^32) 中的任意 32 位整数标识.如果不指定,则默自动分配为 0.
- 当第一个数据点写入给定租户时,会自动创建租户
- 所有租户的数据均匀分布在可用的 vmstorage 节点中.这保证了当不同租户具有不同的数据量和不同的查询负载时,vmstorage 节点之间的负载均匀
- 数据库性能依赖于租户的数量,主要取决于所有租户中活动的时间序列的总数.
- VictoriaMetrics 不支持在单个请求中查询多个租户
默认情况下,VictoriaMetrics 将副本写入到 -storageDataPath
指向的底层存储.
可以通过 vminsert
指定 -replicationFactor=N
标志位来启用数据副本.这保证在最多 N-1
个 vmstorage 节点不可用时,所有数据扔可用于查询.集群必须至少包含 2*N-1
个 vmstorage 节点.
启用复制后,vmselect
必须指定 -dedup.minScrapeInterval=1ms
命令行标志.
快速部署
使用 3 个节点部署相关服务.节点 IP 分别为 IP1, IP2, IP3
在每个节点上运行如下脚本来启动 vmstroage
,vminsert
,vmselect
1 |
|
启动后,可以分别配置 Prometheus 和 Grafana 对 metrics 数据写入读取.详见官方文档
1 | # prometheus.yml |
Grafana 数据源地址可配置为 http://<vmselect>:8481/select/<accountID>/prometheus
.此时 accountID
必须与 prometheus.yml
中配置的 accountID
一致.
最后可使用 vmauth
对数据读取时进行验证,保证数据安全性.
参考: