prometheus单机存储与victoriametrics远程存储
prometheus 存储系统
Prometheus 有着非常高效的时间序列数据存储方法,每个采样数据仅仅占用3.5 byte 左右空间,上百万条时间序列,30秒间隔,保留60天,大概200多G空间。
默认情况下,prometheus 将采集到的数据存储在本地的 TSDB 数据库中,路径默认为 prometheus 安装目录的 data 目录,数据写入过程为先把数据写入 wal 日志并放在内存,然后 2 小时后将内存数据保存至一个新的 block 块,同时再把新采集的数据写入内存并在 2 小时后再保存至一个新的 block 块,以此类推。
block 简介:
每个 block 为一个 data 目录中以 01 开头的存储目录,如下:
block 的特性:
block 会压缩、合并历史数据块,以及删除过期的块,随着压缩、合并,block 的数量会减少,在压缩过程中会发生三件事:定期执行压缩、合并小的 block 到大的 block、清理过期的块。
每个块有 4 部分组成:
root@prometheus:/usr/local/prometheus/data# tree 01GDF6NKPFYK8RG37J7Y0K1JNM/ 01GDF6NKPFYK8RG37J7Y0K1JNM/ ├── chunks │ └── 000001 #数据目录,每个大小为 512MB 超过会被切分为多个 ├── index #索引文件,记录存储的数据的索引信息,通过文件内的几个表来查找时序数据 ├── meta.json #block 元数据信息,包含了样本数、采集数据数据的起始时间、压缩历史 └── tombstones #逻辑数据,主要记载删除记录和标记要删除的内容,删除标记,可在查询块时排除样本。
本地存储配置参数
./prometheus --help --config.file="prometheus.yml" #指定配置文件 --web.listen-address="0.0.0.0:9090" #指定监听地址 --storage.tsdb.path="data/" #指定数存储目录 --storage.tsdb.retention.size=B, KB, MB, GB, TB, PB, EB #指定 chunk 大小,默认 512MB --storage.tsdb.retention.time=15d #数据保存时长,默认 15 天 --query.timeout=2m #最大查询超时时间 --query.max-concurrency=20 #最大查询并发数 --web.read-timeout=5m #最大空闲超时时间 --web.max-connections=512 #最大并发连接数 --web.enable-lifecycle #启用 API 动态加载配置功能
victoriametrics
使用victoriametrics作为prometheus的数据存储服务,将prometheus采集的数据统一存储在victoriametrics上。
grafana就只需在victoriametrics上读取数据,不需要从prometheus上获取,这样可以减轻prometheus的读压力。并且grafana需要配置将数据源从prometheus修改为victoriametrics。
服务流程图
victoriametrics的项目和官网
github项目地址:https://github.com/VictoriaMetrics/VictoriaMetrics
官网文档:https://docs.victoriametrics.com/Single-server-VictoriaMetrics.html
单机版部署
安装victoriametrics
访问github项目地址,下载 https://github.com/VictoriaMetrics/VictoriaMetrics
解压部署
root@victoriametrics:~# tar xf victoria-metrics-linux-amd64-v1.81.2.tar.gz -C /usr/local/bin/
参数:
-httpListenAddr=0.0.0.0:8428 #监听地址及端口 -storageDataPath #VictoriaMetrics 将所有数据存储在此目录中,默认为执行启动 victoria 的当前目录下的 victoria-metrics-data 目录中。 -retentionPeriod #存储数据的保留,较旧的数据会自动删除,默认保留期为 1 个月,默认单位为 m(月),支持的单位有 h (hour), d (day), w (week), y (year)。
创建service启动文件
root@victoriametrics:~# vim /etc/systemd/system/victoria-metrics-prod.service [Unit] Description=For Victoria-metrics-prod Service After=network.target [Service] ExecStart=/usr/local/bin/victoria-metrics-prod -httpListenAddr=0.0.0.0:8428 -storageDataPath=/data/victoria -retentionPeriod=3 [Install] WantedBy=multi-user.target
启动victoriametrics
systemctl daemon-reload && systemctl enable victoria-metrics-prod.service && systemctl start victoria-metrics-prod.service
验证
浏览器访问IP:8428
prometheus-server 配置
配置prometheus-server,指定remote_write将数据远端存储在victorirmetrics
root@prometheus:/usr/local/prometheus# vim prometheus.yml global: 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://192.168.100.24:8428/api/v1/write
重启prometheus-server
root@prometheus:/usr/local/prometheus# systemctl restart prometheus
查看victoriametircs的 vmui 执行promql语句结果
grafana 添加victormetrics为数据源
添加数据源,类型为 prometheus,地址及端口为 VictoriaMetrics的地址与端口
导入dashboard验证数据
验证dashboard数据
docker-compose版部署
github项目地址:https://github.com/VictoriaMetrics/VictoriaMetrics/tree/cluster/deployment/docker
确保服务器安装了docker和docker-compose
root@victoriametrics:~# git clone https://github.com/VictoriaMetrics/VictoriaMetrics.git root@victoriametrics:~# cd VictoriaMetrics/deployment/docker/ root@victoriametrics:~/VictoriaMetrics/deployment/docker# docker-compose up -d
集群版部署
组件介绍
vminsert:写入组件(写),vminsert 负责接收数据写入并根据对度量名称及其所有标签的一致 hash 结果将数据分散写入不同的后端 vmstorage 节点之间 vmstorage,vminsert 默认端口 8480。
vmstorage:存储原始数据并返回给定时间范围内给定标签过滤器的查询数据,默认端口 8482
vmselect:查询组件(读),连接 vmstorage ,默认端口 8481
其它可选组件:
vmagent:是一个很小但功能强大的代理,它可以从 node_exporter 各种来源收集度量数据,并将它们存储在 VictoriaMetrics 或任何其他支持远程写入协议的与 prometheus 兼容的存储系统中,有替代prometheus server 的意向。
vmalert: 替换 prometheus server,以 VictoriaMetrics 为数据源,基于兼容 prometheus 的告警规则,判断数据是否异常,并将产生的通知发送给 alertermanager
Vmgateway:读写 VictoriaMetrics 数据的代理网关,可实现限速和访问控制等功能,目前为企业版组件
vmctl: VictoriaMetrics 的命令行工具,目前主要用于将 prometheus、opentsdb 等数据源的数据迁移到VictoriaMetrics。
部署集群版本
访问github项目地址,下载 https://github.com/VictoriaMetrics/VictoriaMetrics
集群节点信息:
victoriametrics1:192.168.100.24
victoriametrics2:192.168.100.25
victoriametrics3:192.168.100.26
解压部署
root@victoriametrics1:/usr/local/src# tar xf victoria-metrics-linux-amd64-v1.81.2-cluster.tar.gz -C /usr/local/bin/ root@victoriametrics1:/usr/local/src# ll /usr/local/bin/vm* -rwxr-xr-x 1 lxh lxh 11927096 Sep 8 11:15 /usr/local/bin/vminsert-prod* -rwxr-xr-x 1 lxh lxh 13460552 Sep 8 11:15 /usr/local/bin/vmselect-prod* -rwxr-xr-x 1 lxh lxh 12261992 Sep 8 11:15 /usr/local/bin/vmstorage-prod*
部署vmstorage-prod组件
负责数据的持久化,监听端口:API 8482 ,数据写入端口:8400,数据读取端口:8401。
主要参数:
-httpListenAddr string Address to listen for http connections (default ":8482") -vminsertAddr string TCP address to accept connections from vminsert services (default ":8400") -vmselectAddr string TCP address to accept connections from vmselect services (default ":8401")
创建vmstorage service启动文件
root@victoriametrics1:/usr/local/src# vim /etc/systemd/system/vmstorage.service [Unit] Description=Vmstorage Server After=network.target [Service] Restart=on-failure WorkingDirectory=/tmp ExecStart=/usr/local/bin/vmstorage-prod -loggerTimezone Asia/Shanghai -storageDataPath /data/vmstorage-data -httpListenAddr :8482 -vminsertAddr :8400 -vmselectAddr :8401 [Install] WantedBy=multi-user.target
所有节点启动vmstorage
systemctl daemon-reload && systemctl enable vmstorage.service && systemctl restart vmstorage.service
部署vminsert-prod 组件
创建vminsert 启动service文件,端口监听在8480,并指定集群所有vminsert组件ip端口
root@victoriametrics1:/usr/local/src# vim /etc/systemd/system/vminsert.service [Unit] Description=Vminsert Server After=network.target [Service] Restart=on-failure WorkingDirectory=/tmp ExecStart=/usr/local/bin/vminsert-prod -httpListenAddr :8480 -storageNode=192.168.100.24:8400,192.168.100.25 :8400,192.168.100.26:8400 [Install] WantedBy=multi-user.target
所有节点启动vminsert
systemctl daemon-reload && systemctl enable vminsert.service && systemctl restart vminsert.service
部署vmselect-prod 组件
创建vminsert 启动service文件,端口监听在8481,并指定集群所有vmselect组件ip端口
root@victoriametrics1:/usr/local/src# vim /etc/systemd/system/vmselect.service [Unit] Description=Vminsert Server After=network.target [Service] Restart=on-failure WorkingDirectory=/tmp ExecStart=/usr/local/bin/vmselect-prod -httpListenAddr :8481 -storageNode=192.168.100.24:8401,192.168.100.25 :8401,192.168.100.26:8401 [Install] WantedBy=multi-user.target
所有节点启动vmselect
systemctl daemon-reload && systemctl enable vmselect.service && systemctl restart vmselect.service
验证集群组件服务端口
victoriametrics1:192.168.100.24
curl http://192.168.100.24:8480/metrics curl http://192.168.100.24:8481/metrics curl http://192.168.100.24:8482/metrics
victoriametrics2:192.168.100.25
curl http://192.168.100.25:8480/metrics curl http://192.168.100.25:8481/metrics curl http://192.168.100.25:8482/metrics
victoriametrics3:192.168.100.26
curl http://192.168.100.26:8480/metrics curl http://192.168.100.26:8481/metrics curl http://192.168.100.26:8482/metrics
配置prometheus-server添加集群配置
修改prometheus-server,指定vminsert服务集群为远端存储数据
root@prometheus:/usr/local/prometheus# vim prometheus.yml global: 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). #添加victormetrics insert组件服务地址 remote_write: - url: http://192.168.100.24:8480/insert/1/prometheus - url: http://192.168.100.25:8480/insert/1/prometheus - url: http://192.168.100.26:8480/insert/1/prometheus
注意:如果victormetrics部署了多套集群,URI可以将0指定为其他数字如1,类似于容器命名空间的隔离
验证prometheus-server配置
grafana 数据源配置
可以部署LB负载均衡器来负载vminsert服务地址,并做到vminsert的集群高可用。因为grafana只能添加其中一台vminsert作为数据源,如果添加的这台vminsert宕机就会造成数据无法读取。
在grafana添加的数据源vmselect地址确保与vminsert是同属于一个集群中
数据源地址为vmselect服务地址API:http://192.168.100.24:8481/select/1/prometheus
导入dashboard验证数据
开启vminsert数据复制
官网文档介绍:https://docs.victoriametrics.com/Cluster-VictoriaMetrics.html#replication-and-data-safety
默认情况下,数据被 vminsert 的组件基于 hash 算法分别将数据持久化到不同的vmstorage 节点,可以启用 vminsert 组件支持的-replicationFactor=N 复制功能,将数据分别在各节点保存一份完整的副本以实现数据的高可用。
修改vminsert service启动文件
在每个vminsert节点中的service启动文件中添加-replicationFactor=N启动参数,N表示副本数量,-replicationFactor=的默认数量为1副本,不要超过集群节点的数量
root@victoriametrics1:/data# vim /etc/systemd/system/vminsert.service ExecStart=/usr/local/bin/vminsert-prod -httpListenAddr :8480 -storageNode=192.168.100.24:8400,192.168.100.25 :8400,192.168.100.26:8400 -replicationFactor=3
重启各个节点vminsert服务
systemctl daemon-reload systemctl restart vminsert.service
本文来自博客园,作者:PunchLinux,转载请注明原文链接:https://www.cnblogs.com/punchlinux/p/17047975.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)