zl程序教程

您现在的位置是:首页 >  后端

当前栏目

【云原生 | Kubernetes 系列】---Prometheus 数据高可用

Kubernetes数据 系列 --- 原生 可用 Prometheus
2023-09-14 09:09:03 时间

Prometheus 数据高可用

默认情况下,prometheus将采集到的数据存储在本地的TSDB数据库中国,路径默认为prometheus安装目录的data目录.数据写入过程为先把数据写入wal日志并存放在内存,然后2小时候将内存数据保存至一个新的block块,同时再把新采集的数据写入内存并在2小时候再保存至一个新的block块,以此类推.

1. Block

每个Block都是一个目录,以01开头.

# ls -l data/
total 20
drwxr-xr-x 3 root root    68 Aug 30 15:00 01GBPRSMVSBPZ320WVP2WCSAYQ
drwxr-xr-x 3 root root    68 Aug 31 13:00 01GBS4AJ6FJE1VSV8GF3JX6K7C
drwxr-xr-x 3 root root    68 Sep  1 08:10 01GBV65331GM9CX1WRVYZXTAEF
drwxr-xr-x 3 root root    68 Sep  1 13:00 01GBVPQB6HKD8G5N4H6K468XSC
drwxr-xr-x 3 root root    68 Sep  2 13:00 01GBY9414DKHWZ0Z2WRYMZAGGJ
drwxr-xr-x 3 root root    68 Sep  3 13:00 01GC0VGVQ7WMJXA9PTMVS59R6F
drwxr-xr-x 3 root root    68 Sep  3 19:00 01GC1G40KSVB2WHN87W2FXY3VG
drwxr-xr-x 3 root root    68 Sep  5 13:06 01GC60P2FAWNHACKMHVMDF1HR7
drwxr-xr-x 3 root root    68 Sep  6 11:00 01GC8BV57RWVX7D3ZGPVFW83F0
drwxr-xr-x 3 root root    68 Sep  7 07:42 01GCAJY36S7WAQ4334B4G4143R
drwxr-xr-x 3 root root    68 Sep  7 13:02 01GCB584JA8G51VPH3PRCX1BS1
drwxr-xr-x 3 root root    68 Sep  8 07:47 01GCD5KDZVQJ5ACKMTJR5DZFRJ
drwxr-xr-x 3 root root    68 Sep  8 07:47 01GCD5KETT01RSA4C30N3RAHQF
drwxr-xr-x 3 root root    68 Sep  8 07:47 01GCD5KFMN9HQZQSFK6C48869E
drwxr-xr-x 2 root root    34 Sep  8 08:00 chunks_head
-rw-r--r-- 1 root root     0 Sep  7 15:34 lock
-rw-r--r-- 1 root root 20001 Sep  8 08:18 queries.active
drwxr-xr-x 3 root root   113 Sep  8 07:47 wal

1.1 block的特性

block会进行压缩,合并历史数据块,以及删除过期块,随着压缩,合并,block的数量会减少,在压缩过程中会发生三件事:定期执行压缩,合并小的block到大的block,清理过期块

每个块由5部分组成

文件/目录作用
chunks数据目录,通过–storage.tsdb.retention.size设定默认切割文件大小
chunks/000001数据文件,如果数据量大还会有000002,000003…不足512Mb就只有1个
index索引文件,记录存储的数据索引信息,通过文件内的几个表来查找时序数据
meta.jsonblock元数据信息,包含了样本数,采集数据的起始时间,压缩历史
tombstones逻辑数据,主要记载删除和标记要删除的内容,删除标记,可在查询块时排除样本
# tree data/01GBPRSMVSBPZ320WVP2WCSAYQ/
data/01GBPRSMVSBPZ320WVP2WCSAYQ/
├── chunks
│   └── 000001
├── index
├── meta.json
└── tombstones

1 directory, 4 files

1.2 prometheus常用参数

参数含义
–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数据保存时长,默认15天
–query.timeout=2m最大查询超时时间
–query.max-concurrency=20最大查询并发数
–web.read-timeout=5m最大空闲超时时间
–web.max-connections=512最大并发连接数
–web.enable-lifecycle启用API动态加载配置功能

2. victoriametrics远端存储

victoriametrics优点: 配置简单,可以实现读写分离

2.1 victoriametrics单机版

2.1.1 单机版本部署

架构图如下:

请添加图片描述

单机版本无法实现读写分离

root@logstash:/apps# wget https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v1.81.1/victoria-metrics-linux-amd64-v1.81.1.tar.gz
root@logstash:/apps# tar xf victoria-metrics-linux-amd64-v1.81.1.tar.gz  

2.1.2 创建service文件

[Unit]
Description=victoria-metrics
After=network.target

[Service]
Restart=on-failure
WorkingDirectory=/apps/
ExecStart=/apps/victoria-metrics-prod -httpListenAddr=0.0.0.0:8428 -storageDataPath=/data/victoria -retentionPeriod=3m

[Install]
WantedBy=multi-user.target

启动参数

参数含义
-httpListenAddr=0.0.0.0:8428监听地址和端口
-storageDataPath数据持久化目录,默认是victoria当前目录下的victoria-metrics-data
-retentionPeriod数据保留时间,默认为1个月.默认单位为m(月),支持h(hour),d(day),w(week),y(year)

启动服务

root@logstash:/apps# systemctl enable --now victoria-metrics.service
Created symlink /etc/systemd/system/multi-user.target.wants/victoria-metrics.service → /etc/systemd/system/victoria-metrics.service.
root@logstash:/apps# ss -ntl|grep 8428
LISTEN  0        4096             0.0.0.0:8428           0.0.0.0:* 

启动后可以通过web访问页面

请添加图片描述

2.1.3 配置prometheus远程写入

在prometheus.yml的global同级加入

global:
 xxxx 略
remote_write:
  - url: http://192.168.31.126:8428/api/v1/write

重启prometheus,此时在victoria:8428/vmui上做查询就可以看到数据了

请添加图片描述

2.1.4 grafana接入

接入数据,数据类型为Prometheus,Url写入victoria的地址

请添加图片描述

导入模板,数据源使用victoria

8919

请添加图片描述

请添加图片描述

2.2 Victoriametrics集群

请添加图片描述

集群组件:

  1. vmstorage:存储原始数据并返回给定时间范围内给定标签过滤器的查询数据,默认端口8482
  2. vmselect:查询组件(读),连接vmstorage,默认端口8401
  3. vminsert: 写入组件(写),vminsert负责接收数据写入并根据对度量名称及其所有标签的一致性hash结果,将数据分散写入不同的后端,vmstorage,vminsert默认端口8400
  4. vmagent:是一个小巧但功能强大的代理,它可以从node_exporter各种来源收集度量数据,并将它们存储在VictoriaMetrics或任何其他支持远程写入协议与prometheus兼容的存储系统中,有代替prometheus server的意向.
  5. vmalert: 替换prometheus server,以VictoriaMetrics为数据源,基于兼容prometheus的告警规则,判断数据是否异常,并将产生的通知发送给alertmanager
  6. vmgateway: 读写victoriaMetrics数据的代理网关,可实现限速和访问控制等功能.目前为企业版组件
  7. vmctl: victoriaMetrics的命令行工具,目前主要用于将prometheus,opentsdb等数据源的数据迁移到victoriametrics

2.2.1 集群安装部署

root@rabbitmq-1:/apps# wget https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v1.81.1/victoria-metrics-linux-amd64-v1.81.1-cluster.tar.gz
root@rabbitmq-1:/apps# tar xf victoria-metrics-linux-amd64-v1.81.1-cluster.tar.gz
root@rabbitmq-1:/apps# mv vm*-prod /usr/local/bin/
root@rabbitmq-1:/apps# mkdir -p /data/vmstorage-data

2.2.2 部署vmstorage-prod组件

/etc/systemd/system/vmstorage.service

[Unit]
Description=Vmstorage Server
After=network.target

[Service]
Restart=on-failure
WorkingDirectory=/apps/ExecStart=/usr/local/bin/vmstorage-prod --loggerTimezone Asia/Shanghai -storageDataPath /data/vmstorage-data

[Install]
WantedBy=multi-user.target

默认端口:

服务监听端口
vmselect8481
vmstorage8482,对 vminsert写提供8400,对vmselect读提供8401
vminsert8480
vminsert写8400
vmselect读8401

将配置同步到另外两台服务器上

# scp /etc/systemd/system/vmstorage.service rabbitmq-2:/etc/systemd/system/
# scp /etc/systemd/system/vmstorage.service rabbitmq-3:/etc/systemd/system/
# scp /usr/local/bin/vm* rabbitmq-2:/usr/local/bin/
# scp /usr/local/bin/vm* rabbitmq-3:/usr/local/bin/

启动vmstorage

root@rabbitmq-1:/apps# systemctl enable --now vmstorage.service 
Created symlink /etc/systemd/system/multi-user.target.wants/vmstorage.service → /etc/systemd/system/vmstorage.service.
root@rabbitmq-1:/apps# ss -ntl|grep 8482
LISTEN 0        20480                      0.0.0.0:8482           0.0.0.0:*

2.2.3 部署vminsert-prod组件

/etc/systemd/system/vminsert.service

[Unit]
Description=Vminsert Server
After=network.target

[Service]
Restart=on-failure
WorkingDirectory=/apps/
ExecStart=/usr/local/bin/vminsert-prod -storageNode=192.168.31.51:8400,192.168.31.52:8400,192.168.31.53:8400

[Install]
WantedBy=multi-user.target

复制到其他节点

root@rabbitmq-1:/apps# scp /etc/systemd/system/vminsert.service rabbitmq-2:/etc/systemd/system/vminsert.service
vminsert.service                                                                                               100%  257   701.7KB/s   00:00    
root@rabbitmq-1:/apps# scp /etc/systemd/system/vminsert.service rabbitmq-3:/etc/systemd/system/vminsert.service
vminsert.service                                                                                               100%  257   871.3KB/s   00:00 

启动服务

root@rabbitmq-1:/apps# systemctl enable --now vminsert
Created symlink /etc/systemd/system/multi-user.target.wants/vminsert.service → /etc/systemd/system/vminsert.service.
root@rabbitmq-1:/apps# ss -ntl|grep 8480
LISTEN 0        20480                      0.0.0.0:8480           0.0.0.0:*      

同时其他两台服务器也启动这2个服务

# systemctl enable --now vmstorage vminsert
root@rabbitmq-2:~# ss -ntl|grep 84
LISTEN 0        20480                      0.0.0.0:8400           0.0.0.0:*     
LISTEN 0        20480                      0.0.0.0:8401           0.0.0.0:*     
LISTEN 0        20480                      0.0.0.0:8480           0.0.0.0:*     
LISTEN 0        20480                      0.0.0.0:8482           0.0.0.0:*  
root@rabbitmq-3:~# ss -ntl|grep 84
LISTEN 0        20480                      0.0.0.0:8480           0.0.0.0:*     
LISTEN 0        20480                      0.0.0.0:8482           0.0.0.0:*     
LISTEN 0        20480                      0.0.0.0:8400           0.0.0.0:*     
LISTEN 0        20480                      0.0.0.0:8401           0.0.0.0:*

2.2.4 部署vmselect-prod组件

/etc/systemd/system/vmselect.service

[Unit]
Description=Vmselect Server
After=network.target

[Service]
Restart=on-failure
WorkingDirectory=/apps/
ExecStart=/usr/local/bin/vmselect-prod -storageNode=192.168.31.51:8401,192.168.31.52:8401,192.168.31.53:8401

[Install]
WantedBy=multi-user.target

启动服务

root@rabbitmq-3:~# systemctl enable --now vmselect.service
Created symlink /etc/systemd/system/multi-user.target.wants/vmselect.service → /etc/systemd/system/vmselect.service.
root@rabbitmq-3:~# ss -ntl|grep 8481
LISTEN 0        20480                      0.0.0.0:8481           0.0.0.0:* 

将服务同步到其他服务器,并启动

root@rabbitmq-1:/apps# scp /etc/systemd/system/vmselect.service rabbitmq-2:/etc/systemd/system/vmselect.service
root@rabbitmq-1:/apps# ssh rabbitmq-2 'systemctl enable --now vmselect.service&& ss -ntl|grep 8482'
Created symlink /etc/systemd/system/multi-user.target.wants/vmselect.service → /etc/systemd/system/vmselect.service.
LISTEN 0        20480                      0.0.0.0:8482           0.0.0.0:*  
root@rabbitmq-1:/apps# scp /etc/systemd/system/vmselect.service rabbitmq-3:/etc/systemd/system/vmselect.service
root@rabbitmq-1:/apps# ssh rabbitmq-3 'systemctl enable --now vmselect.service&& ss -ntl|grep 8482'
Created symlink /etc/systemd/system/multi-user.target.wants/vmselect.service → /etc/systemd/system/vmselect.service.
LISTEN 0        20480                      0.0.0.0:8482           0.0.0.0:* 

2.2.5 确认服务端口都正常

确保这些ip上的端口监听都正常

# curl 192.168.31.51:8480/metrics
# curl 192.168.31.51:8481/metrics
# curl 192.168.31.51:8482/metrics

# curl 192.168.31.52:8480/metrics
# curl 192.168.31.52:8481/metrics
# curl 192.168.31.52:8482/metrics

# curl 192.168.31.53:8480/metrics
# curl 192.168.31.53:8481/metrics
# curl 192.168.31.53:8482/metrics

2.2.6 配置prometheus写victoriametrics

修改prometheus.yml配置

remote_write:
  - url: http://192.168.31.51:8480/insert/0/prometheus
  - url: http://192.168.31.52:8480/insert/0/prometheus
  - url: http://192.168.31.53:8480/insert/0/prometheus

重启prometheus

# systemctl restart prometheus

2.2.7 grafana导入

13824

请添加图片描述

2.2.8 将数据存储方式改为复制

默认情况下,数据被vminsert的组件基于hash算法分别持久化到不同的vmstorage上,可以使用vminsert组件支持的-replicationFactor=N复制功能,将数据分别在各个节点保存一份完整的副本,以实现数据高可用.