VictoriaMetrics 是一个高效、可扩展的开源时序数据库和监控系统,它可以处理大量的时间序列数据,以满足各种监控和分析需求,并提供快速的查询和可视化工具
原理
VictoriaMetrics基于TSDB(Time Series Database)架构,其核心原理是将大量的时间序列数据存储在磁盘上,并按照时间顺序进行索引。在写入数据时,数据会被拆分成多个数据块,每个数据块都有一个时间范围。每个数据块包含多个数据点,每个数据点包含时间戳和值。在读取数据时,VictoriaMetrics会根据查询时间范围和时间序列标识符来查找相应的数据块,并将它们合并为一个结果集。
VictoriaMetrics支持多种数据格式,包括Prometheus、InfluxDB等,可以通过HTTP API进行数据的读写和查询。
除此之外,VictoriaMetrics 还使用了一些优化技术,例如:
压缩:VictoriaMetrics 支持多种数据压缩算法,可以减少数据的存储空间和网络传输量。
数据分片:VictoriaMetrics 可以将大数据集分成多个小的数据块,以方便数据的管理和查询。
并发查询:VictoriaMetrics 可以同时处理多个查询请求,以提高系统的吞吐量和响应速度。
架构
VictoriaMetrics的集群主要由vmstorage、vminsert、vmselect等三部分组成
vmstorage
vmstorage是VictoriaMetrics的核心组件,负责存储和管理时间序列数据。它使用基于LSM树(Log-Structured Merge Tree)的存储引擎,能够高效地处理大量的写入请求,并提供快速的查询性能。
vmstorage的数据模型是按照时间顺序进行存储的,即先按照时间戳排序,再按照标识符进行索引。数据被分成多个数据块,每个数据块包含一定时间范围内的多个时间序列数据点。数据块被分成不同的时间段,以便进行数据的滚动删除和压缩。vmstorage支持多种数据格式,包括Prometheus、InfluxDB等,能够接收来自不同数据源的数据,并提供HTTP API进行数据的读写和查询。
vminsert
vminsert是VictoriaMetrics的数据接收器,负责接收来自不同数据源的时间序列数据,并将其写入vmstorage中。vminsert支持多种协议,包括Prometheus Remote Write协议、InfluxDB Line Protocol等,能够快速地处理大量的写入请求,并提供缓存机制,避免数据重复写入。
vmselect
vmselect是VictoriaMetrics的查询引擎,负责快速地查询vmstorage中的时间序列数据。它支持多种查询语言,包括PromQL、InfluxQL等,能够处理大量的时间序列数据,并提供快速的查询性能。vmselect支持多种查询优化技术,包括数据剪枝、索引合并等,能够提高查询效率。同时,vmselect还提供HTTP API进行数据的读取和查询,并支持多种输出格式,包括JSON、CSV等。
单机版部署
将vmstorage、vminsert和vmselect三个组件部署在同一台服务器上的部署方式。
下载安装包
wget https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v1.89.1/victoria-metrics-linux-amd64-v1.89.1.tar.gztar zxvf victoria-metrics-linux-amd64-v1.89.1.tar.gz参数解析
-httpListenAddr=0.0.0.0:8428 #监听地址及端口-storageDataPath #VictoriaMetrics 将所有数据存储在此目录中,默认为执行启动 victoria 的当前目录下的 victoria-metrics-data 目录中。-retentionPeriod #存储数据的保留,较旧的数据会自动删除,默认保留期为 1 个月,默认单位为 m(月),支持的单位有 h (hour), d (day), w (week), y (year)。
接入systemd 管理
cat </etc/systemd/system/victoria-metrics-prod.service [Unit]Description=For Victoria-metrics-prod ServiceAfter=network.target[Service]ExecStart=/data/victoriametrics/victoria-metrics-prod -httpListenAddr=0.0.0.0:8428 -storageDataPath=/data/victoriametrics-retentionPeriod=3[Install]WantedBy=multi-user.targetEOF
启动
systemctl daemon-reload && systemctl enable victoria-metrics-prod.service && systemctl start victoria-metrics-prod.service访问web页面

点击vmui
配置Prometheus,的远程读写在vm
vim prometheus.yml# my global configglobal:scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.# scrape_timeout is set to the global default (10s).#remote_write:- url: http://127.0.0.1:8428/api/v1/writeremote_read:- url: "http://127.0.0.1:8428/api/v1/read"
reload Prometheus server
systemctl reload prometheus.service可以在vm查看到数据
也可以在prom查看到数据

添加grafana 的vm 数据源
查看数据

至此我们已经实现了使用VictoriaMetrics作为Prometheus的远程存储。
集群版的部署 就不在这里介绍,有兴趣可以留言下个博文安排。