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

 

posted @ 2023-01-12 22:10  PunchLinux  阅读(786)  评论(0编辑  收藏  举报