VictoriaMetrics,是一个快速高效、经济并且可扩展的监控解决方案和时序数据库。
谈到VictoriaMetrics就必须要提到Prometheus,VictoriaMetrics是一个新兴的监控解决方案。它借助Prometheus强大的exporter生态、成熟的规范、服务发现等优点等,融入到Prometheus生态中。VictoriaMetrics官网很多兼容Prometheus参数解释都是直接跳转到Prometheus官网。
VictoriaMetrics可以作为Prometheus的长期远程存储方案,当然VictoriaMetrics也可以完全取代Prometheus,因为VictoriaMetrics基本支持Prometheus配置文件、PromQL、各类API、数据格式等等。
作为一款新兴TSDB,参考DB-Engines的TSDB排行,最近两年VictoriaMetrics热度很高:
VM分为,单节点(single-node)版和集群(cluster)版,两套方案,根据业务需求选择即可。
单节点版:直接运行一个二进制文件,既可以运行,官方建议采集数据点(data points)低于100w/s,推荐VM单节点版,简单好维护,但不支持告警。
集群版:支持数据水平拆分,把功能拆分为vmstorage、 vminsert、vmselect,如果要替换Prometheus,还需要vmagent、vmalert。
VM 分为单节点和集群两个方案,根据业务需求选择即可。单节点版直接运行一个二进制文件既,官方建议采集数据点(data points)低于 100w/s,推荐 VM 单节点版,简单好维护,但不支持告警。集群版支持数据水平拆分。下图是 VictoriaMetrics 集群版官方的架构图。
主要包含以下几个组件:
集群方案把功能拆分为 vmstorage、 vminsert、vmselect 组件,如果要替换 Prometheus,还需要使用 vmagent、vmalert。从上图也可以看出 vminsert 以及 vmselect 都是无状态的,所以扩展很简单,只有 vmstorage 是有状态的。
vmagent 的主要目的是用来收集指标数据然后存储到 VM 以及 Prometheus 兼容的存储系统中(支持 remote_write 协议即可)。
下图是 vmagent 的一个简单架构图,可以看出该组件也实现了 metrics 的 push 功能,此外还有很多其他特性:
下面模拟1个node-exporter,被Prometheus采集数据,然后Prometheus把数据写到VM远程存储。通过Grafana分别对2种数据源(Prometheus、VictoriaMetrics)进行展示,验证VM的兼容性。最终使用VM完全替换Prometheus,可以达到架构简单、更低的资源占用。
1、VM支持Prometheus querying API,主要如下:
/api/v1/query
/api/v1/query_range
/api/v1/series
/api/v1/labels
/api/v1/label/…/values
/api/v1/status/tsdb
/api/v1/targets
2、也有(query和query_range)部分增强功能,如下:
查询细化:/api/v1/query_range?extra_label=user_id=123&query=<query>
相对时间:/api/v1/query_range?start=-30m&query=...
小数取舍:/api/v1/query?query=avg_over_time(temperature[1h])&round_digits=2
注:除非必要,建议不用,这样就算回到Prometheus技术栈也没问题
3、还新增部分VM自身数据统计API:
/api/v1/series/count :返回VM时间序列的总数
/api/v1/labels/count :列出VM所有label数量统计,如上面的instance、ip、job等就是label
/api/v1/status/active_queries :返回当前VM运行的查询语句
/api/v1/status/top_queries:返回查询TopN,展示维度topByCount(查询次数)、topByAvgDuration(平均查询时间)、topBySumDuration(总查询时间)
VM基本兼容Prometheus大多数常用的服务发现与抓取类型,部分线上已测试,更多可兼容类型如下:
static_config(已测试)
file_sd_config(已测试)
kubernetes_sd_config
ec2_sd_config
gce_sd_config
consul_sd_config(已测试)
dns_sd_config
openstack_sd_config
docker_sd_config
dockerswarm_sd_config
eureka_sd_config
digitalocean_sd_config
http_sd_config