云计算百科
云计算领域专业知识百科平台

【Prometheus 联邦集群与 VictoriaMetrics 远程存储实战】

提示:本文原创作品,良心制作,干货为主,简洁清晰,一看就会

文章目录

  • 前言
  • 一、Prometheus联邦(Federation)
    • 1.1 什么是Prometheus联邦
    • 1.2 Prometheus联邦实战
      • 联邦节点配置
      • 配置prometheus主节点
  • 二、Prometheus数据存储
    • 2.1 存储原理
    • 2.2 本地存储
    • 2.3 远程存储
      • 实验环境
      • 安装VictoriaMetrics
      • 配置Prometheus

前言

为解决多节点监控数据聚合汇总问题,Prometheus提供联邦集群架构,可实现多Prometheus节点数据统一采集、集中管理,适配分布式监控场景。同时,Prometheus原生本地存储存在容量受限,通过部署VictoriaMetrics高性能时序数据库,完成Prometheus远程持久化存储改造,解决传统监控系统的数据存储痛点,搭建一套聚合能力强、存储时效久、性能稳定的监控架构。

一、Prometheus联邦(Federation)

1.1 什么是Prometheus联邦

Prometheus联邦采用分层架构,下级Prometheus分片采集各类节点监控指标,上级总Prometheus统一拉取汇总,既能分散采集压力、避免单实例负载过高,实现多机房、多集群运维隔离,还可适配网络隔离环境、按需分层筛选指标,减轻顶层存储与查询开销,适合大规模多集群监控场景 在这里插入图片描述

1.2 Prometheus联邦实战

主机名IP作用
prometheus-master 192.168.13.141 联邦顶层主节点,汇总拉取所有子联邦节点指标,统一查询与告警
prometheus-federation1 192.168.13.138 联邦子节点 1,采集 ubuntu1 的 Node Exporter 指标并向上汇聚
prometheus-federation2 192.168.13.139 联邦子节点 2,采集 ubuntu2 的 Node Exporter 指标并向上汇聚
ubuntu1 192.168.13.140 被监控业务主机,运行 Node Exporter 暴露系统指标
ubuntu2 192.168.13.142 被监控业务主机,运行 Node Exporter 暴露系统指标

我已经在 prometheus-master、prometheus-federation1、prometheus-federation2 节点部署 Prometheus 服务;并在各被监控主机部署了 Exporter(本次采用 node-exporter)。部署步骤可参考这篇文章,本文重点讲解 Prometheus 联邦集群搭建流程 Prometheus,node exporter安装:https://blog.csdn.net/m0_63756214/article/details/161196428

联邦节点配置

root@prometheusfederation1:~# vim /opt/prometheus/prometheus/prometheus.yml
scrape_configs:

job_name: "node-exporter"
static_configs:
targets: ["192.168.13.140:9100"]
labels:
instance: "ubuntu1"
root@prometheusfederation1:~# curl -X POST http://localhost:9090/-/reload

在这里插入图片描述

浏览器访问prometheus-federation1 ip:9090 在这里插入图片描述

root@prometheusfederation2:~# vim /opt/prometheus/prometheus/prometheus.yml
scrape_configs:

job_name: "node-exporter"
static_configs:
targets: ["192.168.13.142:9100"]
labels:
instance: "ubuntu2"
root@prometheusfederation2:~# curl -X POST http://localhost:9090/-/reload

浏览器访问prometheus-federation2 ip:9090 在这里插入图片描述

配置prometheus主节点

配置prometheus主节点管理prometheus 联邦节点

scrape_configs:

job_name: 'federate'
scrape_interval: 15s
honor_labels: true
metrics_path: '/federate' # 指定采集端点路径,默认为/federate
static_configs:
targets: ['192.168.13.138:9090'] # 指定联邦节点Prometheus节点地址,如果在k8s集群内,需要指定k8s的svc nodeport
targets: ['192.168.13.139:9090']
params:
'match[]':
'{job=~"prometheus|node-exporter"}' # 指定采集联邦节点的job名称,如果不匹配则不会采集

浏览器访问192.168.13.141:9090 在这里插入图片描述

查询指标,可以看到收集了两个联邦节点的数据 在这里插入图片描述 当前 Prometheus 联邦集群基础架构已部署完成!

如果发现 Master 依然因为数据量过大而卡顿,应该在联邦节点(138/139)上做“预聚合”,而不是在 Master 上直接拉原始数据 在 138 和 139 的 Prometheus 中配置 Recording Rules(记录规则),将 5 分钟的 CPU、内存等高频指标聚合成每分钟的均值。然后 Master 的 match[] 只拉取这些聚合后的新指标(如 job=“aggregated”)。此时 Master 的数据量将减少 90% 以上,这才是真正的压力卸载

二、Prometheus数据存储

2.1 存储原理

prometheus TSDB 写入存储原理 在这里插入图片描述 核心组件分工

  • Head(内存活跃块) 指标样本(t,v)先进Head内存,默认留存2小时;配套两套机制
    • M-map:内存映射,只存文件引用,按需把磁盘chunk载入内存,节省内存
    • WAL预写日志:保证写入可靠
  • Block(磁盘持久块) Head里的数据老化满2小时后,刷入磁盘生成只读Block;老Block会持续合并,超数据保留周期后自动删除
  • WAL预写日志机制

  • 写入规则:先写WAL日志,再操作磁盘Block,保障写入原子性、宕机可重试恢复
  • 文件结构:WAL切分单个最大128MB段文件,存于wal目录;checkpoint文件记录日志截断位置并同步落盘,保障可靠性
  • 完整写入流程 指标样本 → Head内存(同步写WAL防丢失)→ 留存2小时后刷盘生成Block → 老Block持续合并,过期删除

    2.2 本地存储

    我的prometheus是下载的tar包,然后安装在/opt/prometheus/下

    root@prometheus:~# ls /opt/prometheus/prometheus/
    alert.yml data LICENSE NOTICE prometheus prometheus.yml promtool
    root@prometheus:~# ls /opt/prometheus/prometheus/data/
    01KYHCV0DA2906BJWNS5M05Z1Y 01KZ5J98CPMFDRNRMG2J4R373Q chunks_head queries.active
    01KZ5C14G4REHBGBYCBRM8ANBA 01KZ5J98PVVEQVZ71T8DZ3X899 lock wal

    Prometheus TSDB本地数据默认存放于./data,在./data/目录下类似如01KYHCV0DA2…形式的目录为 2小时块Block目录 Block目录内包含4类核心文件:

    • chunks:存放时序原始数据,单个chunk上限512MB;
    • index:索引,根据指标名、标签定位时序数据;
    • tombstones:软删除标记,不直接清理数据,查询时过滤已删内容;
    • meta.json:Block元数据,支撑块合并、删除管理

    如下图 在这里插入图片描述

    2.3 远程存储

    Prometheus本地存储存在单点故障、性能瓶颈,可通过远程存储解决。VictoriaMetrics(VM)是 Go 语言开发的高性能时序数据库,主打 Prometheus 远程长期存储,专为海量监控时序数据设计

    VictoriaMetrics核心优势 1,兼容PromQL、Prometheus/Graphite API,可直接替代Prometheus、Graphite做Grafana数据源, 2,高性能:读写吞吐远超InfluxDB、TimescaleDB,适配云低IO/HDD存储 3,易扩展部署:单节点可替代中小型监控集群,提供开源集群版,适配K8s、工业、物联网等海量时序场景

    实验环境

    主机名IP用途
    prometheus 192.168.13.141 监控采集服务,定时抓取被监控主机系统指标;通过remote_write将采集到的指标远程推送至VictoriaMetrics做长期持久化存储
    victoriametrics 192.168.13.139 接收Prometheus远程上报的监控指标并长期存储;提供Prometheus兼容API,可对接Grafana可视化
    ubuntu1 192.168.13.140 被监控业务主机,部署Node Exporter
    ubuntu2 192.168.13.142 被监控业务主机,部署Node Exporter

    这是我目前Prometheus所监控的设备 在这里插入图片描述

    安装VictoriaMetrics

    Github下载VictoriaMetrics:https://github.com/VictoriaMetrics/VictoriaMetrics/releases

    注意:不要下载enterpise版本,此版本需要授权许可 我这里演示的是单机模式,victoriametrics还有集群模式,后期会出教程

    ## 1. 下载tar包
    root@victoriametrics:~# wget https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v1.145.0/victoria-metrics-linux-amd64-v1.145.0.tar.gz
    root@victoriametrics:~# ls
    victoriametricslinuxamd64v1.145.0.tar.gz
    root@victoriametrics:~# tar xf victoria-metrics-linux-amd64-v1.145.0.tar.gz
    root@victoriametrics:~# mv victoria-metrics-prod /usr/local/bin/

    ## 2. 创建系统后台用户
    root@victoriametrics:~# useradd -r -s /sbin/nologin victoriametrics

    ## 3. 创建数据持久化目录
    root@victoriametrics:~# mkdir -p /data/victoriametrics
    root@victoriametrics:~# chown victoriametrics:victoriametrics /data/victoriametrics

    ## 4. 创建service文件
    root@victoriametrics:~# cat > /lib/systemd/system/victoriametrics.service <<EOF
    [Unit]
    Description=VictoriaMetrics
    Documentation=https://docs.victoriametrics.com/SingleserverVictoriaMetrics.html
    After=network.target

    [Service]
    Restart=onfailure
    User=victoriametrics
    Group=victoriametrics
    ExecStart=/usr/local/bin/victoriametricsprod httpListenAddr=0.0.0.0:8428 storageDataPath=/data/victoriametrics retentionPeriod=12
    #ExecReload=/bin/kill -HUP \\$MAINPID
    LimitNOFILE=65535

    [Install]
    WantedBy=multiuser.target
    EOF
    root@victoriametrics:~# systemctl daemon-reload
    root@victoriametrics:~# systemctl enable –now victoriametrics.service

    -httpListenAddr=0.0.0.0:8428:VM 对外监听端口8428,允许任意IP访问 -storageDataPath=/data/victoriametrics:指标数据持久化存储目录 -retentionPeriod=12:数据保留时长12个月 LimitNOFILE=65535:调高进程最大文件句柄数,适配海量时序采集场景

    root@victoriametrics:~# ls /data/victoriametrics/
    data flock.lock metadata snapshots tmp
    root@victoriametrics:~# tree /data/victoriametrics/

    在这里插入图片描述

    配置Prometheus

    root@prometheus:~# vim /opt/prometheus/prometheus/prometheus.yml
    global:

    remote_write:
    url: http://192.168.13.139:8428/api/v1/write

    scrape_configs:

    job_name: "victoriametrics"
    static_configs:
    targets: ["192.168.13.139:8428"]
    root@prometheus:~# curl -X POST http://localhost:9090/-/reload

    浏览器访问可视化 Web 管理控制台http://192.168.13.139:8428/vmui可以查看监控指标 在这里插入图片描述

    登录grafana,添加victoriametrics数据源 在这里插入图片描述 在这里插入图片描述

    添加dashboard,可以看到数据从victoriametrics中来 在这里插入图片描述

    到此Prometheus远程存储数据就部署好了!

    注: 文中若有疏漏,欢迎大家指正赐教。 本文为100%原创,转载请务必标注原创作者,尊重劳动成果。 求赞、求关注、求评论!你的支持是我更新的最大动力,评论区等你~

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 【Prometheus 联邦集群与 VictoriaMetrics 远程存储实战】
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!