VictoriaMetricsn 原理入门
简介
VictoriaMetrics,是一个快速高效、经济并且可扩展的监控解决方案和时序数据库。
谈到VictoriaMetrics就必须要提到Prometheus,VictoriaMetrics是一个新兴的监控解决方案。它借助Prometheus强大的exporter生态、成熟的规范、服务发现等优点等,融入到Prometheus生态中。VictoriaMetrics官网很多兼容Prometheus参数解释都是直接跳转到Prometheus官网。
VictoriaMetrics可以作为Prometheus的长期远程存储方案,当然 VictoriaMetrics 也可以完全取代 Prometheus,因为 VictoriaMetrics 基本支持 Prometheus配置文件、PromQL、各类API、数据格式等等。
VictoriaMetrics 优点
- 远程存储:可作为单一或多个Prometheus的远程存储
- 安装简单:单节点架构一条命令就可以部署完毕(集群方式稍微复杂一些,但也很好理解)
- 兼容性:PromQL兼容和增强的MetricsQL
- Grafana兼容:VM可替换Grafana的Prometheus数据源(经测试,线上数据源直接替换后100%兼容)
- 低内存:更低的内存占用,官方对比Prometheus,可以释放7倍左右内存空间(线上对比大概4倍)
- 高压缩比:提供存储数据高压缩,官方说可以比Prometheus减少7倍的存储空间(线上对比大概是4~5倍)
- 高性能:查询性能比Prometheus更快
- 支持水平扩容&HA:基于VM集群版实现
- 支持多租户:主要针对集群版
VictoriaMetrics 缺点
- 图形化做的不好,虽然有vmui,但功能很少
- 告警功能需要单独配置vmalert,而且vmalert只有api管理和查看,暂时没用图形界面
- 没有类似Prometheus的WAL日志,突然故障可能会丢失部分数据
VictoriaMetrics 分类
VM分为,单节点(single-node)版和集群(cluster)版,两套方案,根据业务需求选择即可。
单节点版:直接运行一个二进制文件,既可以运行,官方建议采集数据点(data points)低于100w/s,推荐VM单节点版,简单好维护,但不支持告警。
集群版:支持数据水平拆分,把功能拆分为vmstorage、 vminsert、vmselect,如果要替换Prometheus,还需要vmagent、vmalert。
- 每个服务都可以进行独立扩展,
vmstorage
节点之间互不了解、互不通信,并且不共享任何数据。这样可以增加集群的可用性,并且简化了集群的维护和扩展。
VictoriaMetrics 架构
VM 分为单节点和集群两个方案,根据业务需求选择即可。单节点版直接运行一个二进制文件既,官方建议采集数据点(data points)低于 100w/s,推荐 VM 单节点版,简单好维护,但不支持告警。集群版支持数据水平拆分。下图是 VictoriaMetrics 集群版官方的架构图。
主要包含以下几个组件:
- vmstorage:数据存储以及查询结果返回,默认端口为 8482。
- vminsert:数据录入,可实现类似分片、副本功能,默认端口 8480。
- vmselect:数据查询,汇总和数据去重,默认端口 8481。
- vmagent:数据指标抓取,支持多种后端存储,会占用本地磁盘缓存,默认端口 8429。
- vmalert:报警相关组件,不如果不需要告警功能可以不使用该组件,默认端口为 8880。
集群方案把功能拆分为 vmstorage、 vminsert、vmselect 组件,如果要替换 Prometheus,还需要使用 vmagent、vmalert。从上图也可以看出 vminsert 以及 vmselect 都是无状态的,所以扩展很简单,只有 vmstorage 是有状态的。
vmagent 的主要目的是用来收集指标数据然后存储到 VM 以及 Prometheus 兼容的存储系统中(支持 remote_write 协议即可)。
下图是 vmagent 的一个简单架构图,可以看出该组件也实现了 metrics 的 push 功能,此外还有很多其他特性:
vmagent:主要负责数据指标的抓取,并将它们存储在VictoriaMetrics或其他支持remote write协议的Prometheus兼容的存储系统中,会占用本地磁盘缓存。它是一个可选组件,位于图1的Writers那层Load balancer与各个采集源之间,类似于Prometheus中pushgateway的地位。是一个可选组件,默认占用端口8429。其组件作用如图2所示:
- 替换 prometheus 的 scraping target
- 支持基于 prometheus relabeling 的模式添加、移除、修改 labels,可以方便在数据发送到远端存储之前进行数据的过滤
- 支持多种数据协议,influx line 协议,graphite 文本协议,opentsdb 协议,prometheus remote write 协议,json lines 协议,csv 数据
- 支持收集数据的同时,并复制到多种远端存储系统
- 支持不可靠远端存储(通过本地存储 -remoteWrite.tmpDataPath ),同时支持最大磁盘占用相比 prometheus 使用较少的内存、cpu、磁盘 io 以及网络带宽
VictoriaMetrics 单机版安装
|
|
平替 prometheus
|
|
树莓派指标监控案例
导入VictoriaMetrics 服务地址
Push gateway 简介
Push gateway 为 Prometheus 整体监控方案的功能组件之一,并做为一个独立的工具存在。
它主要用于 Prometheus 无法直接拿到监控指标的场景,如监控源位于防火墙之后,Prometheus 无法穿透防火墙;目标服务没有可抓取监控数据的端点等多种情况。在类似场景中,可通过部署 Pushgateway 的方式解决问题。
当部署该组件后,监控源通过主动发送监控数据到Pushgateway,再由Prometheus定时获取信息,实现资源的状态监控。
工作流程:
- 监控源通过Post方式,发送数据到Pushgateway,路径为/metrics。
- Prometheus服务端设置任务,定时获取Pushgateway上面的监控指标。
- Prometheus获取监控指标后,会根据告警规则进行计算,如果匹配将触发告警到Alertmanager;同时,Grafana可配置数据源调用Prometheus数据,做为数据展示。
注意事项
通过Pushgateway方式,Prometheus无法直接检测到监控源服务的状态,故此种方式不适用于监控服务的存活状态等场景。
Pushgateway属于静态代理,它接收的指标不存在过期时间,故会一直保留直到该指标被更新或删除。此种情况下,不再使用的指标可能存在于网关中。
如上所言,Pushgateway并不算是完美的解决方案,在监控中更多做为辅助方案存在,用于解决Prometheus无法直接获取数据的场景。