prometheus学习笔记之prometheus存储系统

一、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模板查看数据

查看数据

 

 

posted @ 2024-09-25 15:13  百衲本  阅读(468)  评论(0编辑  收藏  举报
cnblogs_post_body { color: black; font: 0.875em/1.5em "微软雅黑" , "PTSans" , "Arial" ,sans-serif; font-size: 15px; } cnblogs_post_body h1 { text-align:center; background: #333366; border-radius: 6px 6px 6px 6px; box-shadow: 0 0 0 1px #5F5A4B, 1px 1px 6px 1px rgba(10, 10, 0, 0.5); color: #FFFFFF; font-family: "微软雅黑" , "宋体" , "黑体" ,Arial; font-size: 23px; font-weight: bold; height: 25px; line-height: 25px; margin: 18px 0 !important; padding: 8px 0 5px 5px; text-shadow: 2px 2px 3px #222222; } cnblogs_post_body h2 { text-align:center; background: #006699; border-radius: 6px 6px 6px 6px; box-shadow: 0 0 0 1px #5F5A4B, 1px 1px 6px 1px rgba(10, 10, 0, 0.5); color: #FFFFFF; font-family: "微软雅黑" , "宋体" , "黑体" ,Arial; font-size: 20px; font-weight: bold; height: 25px; line-height: 25px; margin: 18px 0 !important; padding: 8px 0 5px 5px; text-shadow: 2px 2px 3px #222222; } cnblogs_post_body h3 { background: #2B6695; border-radius: 6px 6px 6px 6px; box-shadow: 0 0 0 1px #5F5A4B, 1px 1px 6px 1px rgba(10, 10, 0, 0.5); color: #FFFFFF; font-family: "微软雅黑" , "宋体" , "黑体" ,Arial; font-size: 18px; font-weight: bold; height: 25px; line-height: 25px; margin: 18px 0 !important; padding: 8px 0 5px 5px; text-shadow: 2px 2px 3px #222222; } 回到顶部 博客侧边栏 回到顶部 页首代码 回到顶部 页脚代码