一、prometheus本地存储系统
1.本地存储架构
默认情况下, prometheus 将采集到的数据存储在本地的 TSDB 数据库中, 路径默认为 prometheus 安装目录的 data 目录, 数据写入过程为先把数据写入 wal 日志并放在内存, 然后 2 小时后将内存数据保存至一个
新的 block 块, 同时再把新采集的数据写入内存并在 2 小时后再保存至一个新的 block 块, 以此类推。
2. block简介
每个 block 为一个 data 目录中以 01 开头的存储目录, 如下:
[root@k8s-master prometheus]# ll /data/prometheus/
total 9
drwxr-xr-x 3 root root 68 Sep 24 07:00 01J8GHT1AQ6CA1V206XYHYECWT
drwxr-xr-x 3 root root 68 Sep 24 11:00 01J8GZHF3N69JKR6AAG8H84RT7
drwxr-xr-x 3 root root 68 Sep 24 13:00 01J8H6D6BJHK2V77BH7A70R3WS
drwxr-xr-x 3 root root 68 Sep 24 13:00 01J8H6D6F09Y4XZ4A4JQ652STX
drwxr-xr-x 3 root root 68 Sep 24 15:00 01J8HD8XKHBFVB768R40NAY9F0
drwxr-xr-x 2 root root 48 Sep 24 16:00 chunks_head
-rw-r--r-- 1 root root 0 Sep 24 15:41 lock
-rw-r--r-- 1 root root 20001 Sep 24 16:31 queries.active
drwxr-xr-x 3 root root 4096 Sep 24 15:41 wal
3.block 的特性
block 会压缩、 合并历史数据块, 以及删除过期的块, 随着压缩、 合并, block 的数量会减少, 在压缩过程中会发生三件事: 定期执行压缩、 合并小的 block 到大的 block、 清理过期的块。
每个块有 4 部分组成,如下:
tree 01J8GHT1AQ6CA1V206XYHYECWT
01J8GHT1AQ6CA1V206XYHYECWT
├── chunks
│ └── 000001 #数据目录,每个大小为 512MB 超过会被切分为多个
├── index #索引文件, 记录存储的数据的索引信息, 通过文件内的几个表来查找时序数据
├── meta.json #block 元数据信息, 包含了样本数、 采集数据数据的起始时间、 压缩历史
└── tombstones #逻辑数据, 主要记载删除记录和标记要删除的内容, 删除标记, 可在查询块时排除样本
4.本地存储配置参数
--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= #数据保存时长, 默认 15 天
--query.timeout=2m #最大查询超时时间
-query.max-concurrency=20 #最大查询并发数
--web.read-timeout=5m #最大空闲超时时间
--web.max-connections=512 #最大并发连接数
--web.enable-lifecycle #启用 API 动态加载配置功能
二、远端存储之victoriametrics(单机)
项目地址:https://github.com/VictoriaMetrics/VictoriaMetrics
官方文档:https://docs.victoriametrics.com/single-server-victoriametrics/
1.单机部署victoriametrics
wget https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v1.88.0/victoria-metrics-linux-amd64-v1.88.0.tar.gz
tar xf victoria-metrics-linux-amd64-v1.88.0.tar.gz
mv victoria-metrics-prod /usr/bin/
victoria-metrics-prod -h
vim /etc/systemd/system/victoria-metrics.service
[Unit]
Description=For Victoria-metrics Service
After=network.target
[Service]
ExecStart=/usr/bin/victoria-metrics-prod -httpListenAddr=0.0.0.0:8428 -storageDataPath=/data/victoria -retentionPeriod=3 #保留3个月 如果不写单位则为m(月)
[Install]
WantedBy=multi-user.targ
#启动参数简介
-httpListenAddr=0.0.0.0:8428 #监听地址及端口
-storageDataPath #VictoriaMetrics 将所有数据存储在此目录中, 默认为执行启动 victoria 的当前目录下的 victoria-metrics-data 目录中。
-retentionPeriod #存储数据的保留, 较旧的数据会自动删除, 默认保留期为 1 个月, 默认单位为 m(月),支持的单位有 h (hour), d (day), w (week), y (year)
systemctl daemon-reload && systemctl restart victoria-metrics.service
systemctl status victoria-metrics.service
web端验证
2.配置prometheus写入 victoriametrics
参考文档:https://prometheus.io/docs/prometheus/latest/configuration/configuration/#remote_write
vim prometheus.yml
#只添加该2行即可,其他参考文档按实际需要添加
remote_write:
- url: http://192.168.100.135:8428/api/v1/write
systemctl restart prometheus
3.web端验证
访问victoriametrics UI界面
可以看到 victoriametrics已经可以看到,并可以查询(语法与PQL一致)
4.配置grafana读取victoriametrics
添加数据源,类型依然为prometheus
配置连接信息
保存并测试连接
创建dashboard,导入ID为1860的模板
如图,dashboard可以正常展示
三、远端存储之victoriametrics(集群)
1.集群组件简介
必须组件:
1.vminsert #写入组件(写), vminsert 负责接收数据写入并根据对度量名称及其所有标签的一致 hash 结果将数据分散写入不同的后端 vmstorage 节点之间 vmstorage, vminsert 默认端口 8480
2.vmstorage #(存)存储原始数据并返回给定时间范围内给定标签过滤器的查询数据, 默认端口 8482
3.vmselect #查询组件(读), 连接 vmstorage , 默认端口 8481
其它可选组件:
1.vmagent #是一个很小但功能强大的代理, 它可以从 node_exporter 各种来源收集度量数据, 并将它们存储在 VictoriaMetrics 或任何其他支持远程写入协议的与 prometheus 兼容的存储系统中, 有替代prometheus server 的意向
2.vmalert: 替换 prometheus server, 以 VictoriaMetrics 为数据源, 基于兼容 prometheus 的告警规则, 判断数据是否异常, 并将产生的通知发送给 alertermanager
3.Vmgateway: 读写 VictoriaMetrics 数据的代理网关, 可实现限速和访问控制等功能, 目前为企业版组件
4.vmctl: VictoriaMetrics 的命令行工具, 目前主要用于将 prometheus、 opentsdb 等数据源的数据迁移到VictoriaMetrics。
2.部署vmstorage
#清理上一步的操作,避免对后面的实验产生影响
#集群需要先安装vmstorage ,应为vmstorage 被其他两个组件依赖
#在集群中每台服务器上都执行以下操作 当前集群机器为 100.131 100.132 100.133
wget https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v1.88.0/victoria-metrics-linux-amd64-v1.88.0-cluster.tar.gz #注意下载的为cluster版本
tar xf victoria-metrics-linux-amd64-v1.88.0-cluster.tar.gz
mv vm* /usr/bin/
vim /etc/systemd/system/vmstorage.service
[Unit]
Description=Vmstorage Server
After=network.target
[Service]
Restart=on-failure
WorkingDirectory=/tmp
ExecStart=/usr/bin/vmstorage-prod -loggerTimezone Asia/Shanghai -storageDataPath /data/vmstorage-data -httpListenAddr :8482 -vminsertAddr :8400 -vmselectAddr :8401
[Install]
WantedBy=multi-user.target
#启动参数介绍
-httpListenAddr vmstorage web页面监听端口-vminsertAddr vminsert服务写入时连接的端口-vmselectAddr vmselect服务查询时连接的端口
systemctl restart vmstorage.service && systemctl enable vmstorage.service && systemctl status vmstorage.service
netstat -tnlp
3.部署vminsert组件
vim /etc/systemd/system/vminsert.service
[Unit]
Description=Vminsert Server
After=network.target
[Service]
Restart=on-failure
WorkingDirectory=/tmp
ExecStart=/usr/bin/vminsert-prod -httpListenAddr :8480 -storageNode=192.168.100.131:8400,192.168.100.132:8400,192.168.100.133:8400 #注意该值为vmstorage节点的vmimsertAddr参数指定的端口
[Install]
WantedBy=multi-user.target
systemctl daemon-reload && systemctl restart vminsert && systemctl enable vminsert && systemctl status vminsert
netstat -tnlp
4.部署 vmselect组件
vim /etc/systemd/system/vmselect.service
[Unit]
Description=Vminsert Server
After=network.target
[Service]
Restart=on-failure
WorkingDirectory=/tmp
ExecStart=/usr/bin/vmselect-prod -httpListenAddr :8481 -storageNode=192.168.100.131:8401,192.168.100.132:8401,192.168.100.133:8401 #注意该值为vmstorage节点的vmselectAddr参数指定的端口
[Install]
WantedBy=multi-user.target
systemctl daemon-reload && systemctl restart vmselect && systemctl enable vmselect && systemctl status vmselect
netstat -tnlp
5.配置prometheu远程写入
#仅在prometheus或联邦中prometheus 中心server上配置
vim prometheus.yml
remote_write:
- url: http://192.168.100.131:8480/insert/0/prometheus #vminsert服务监听端口 /insert 为固定路径 /0/prometheus为自定义路径,其中/0的值不能为字符串
- url: http://192.168.100.132:8480/insert/0/prometheus
- url: http://192.168.100.133:8480/insert/0/prometheus
curl -X POST http://127.0.0.1:9090/-/reload
5.配置grafana 数据源及dashboard
数据源类型prometheus
确保测试通过
导入1860模板查看数据
查看数据
"一劳永逸" 的话,有是有的,而 "一劳永逸" 的事却极少