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