Prometheus本地存储和VictoriaMetrics远端存储

news2024/11/14 3:18:49

文章目录

      • Prometheus本地存储简介
        • block
        • WAL
        • 本地存储配置参数
      • VictoriaMetrics
        • 简介
        • 单机版部署使用
          • 安装VictoriaMetrics
          • 配置Prometheus使用Victoriametrics
          • 配置Grafana以Victoriametrics作为数据源
        • 集群版部署使用
          • 部署vmstorage
          • 部署vmselect
          • 部署vminsert
          • 配置Prometheus使用vminsert
          • 配置Grafana以vmselect为数据源
          • 开启数据复制

Prometheus提供了两种存储方式,分别是本地存储和远端存储

Prometheus本地存储简介

Prometheus的本地存储被称为Prometheus TSDB,目前是V3版本,根据官方介绍其有着非常高效的时间序列数据存储方法,每个采样数据仅占3.5byte左右空间,上百万条时间序列,30s间隔,保存60天,仅占200多G空间

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

这里涉及到两个组成部分:block和wal

block

Prometheus TSD将存储的监控数据按时间分割为block,block的大小并不固定,默认最小的block保存2h的数据,随着数据量的不断增加,TSDB会将小的block合并为大的block,例如将3个2h的block合并为一个6h的block,这样不仅可以减少数据存储,还可以减少block个数,便于对数据进行检索。

在实际存储中,block就是Prometheus TSDB数据目录下那些以01开头的存储目录,如下图:
在这里插入图片描述

block主要包含4个部分:chunks、index、meta.josn、tombstones,如下图:

在这里插入图片描述

1. chunks
chunks主要用于保存压缩后的时序数据。每个chunk的大小为512M,如果超过,则会被分割为多个chunk保存,且以数字编号命名

2. index
index是为了对时序数据进行快速检索和查询而设计,主要用来记录chunk中时序的偏移位置

3. meta.json
meta.json记录block的元数据信息,主要包括一个数据块记录样本的起始时间、截至时间、样本数、时序数和数据源等信息,这些元数据信息在后期对block进行维护(删除过期block、合并block等)时会用到。

下面是一个meta.json文件示例

{
        "ulid": "01GT3F29KBPHPJRDSF5Z38MCRZ",	#blcok的Id
        "minTime": 1677290405717,	#block的起始时间
        "maxTime": 1677297600000,	#block的截至时间
        "stats": {
                "numSamples": 1374480,	#样本数量
                "numSeries": 2573,	#时序数量
                "numChunks": 11454	#chunk数量
        },
        "compaction": {
                "level": 1,	#压缩级别
                "sources": [
                        "01GT3F29KBPHPJRDSF5Z38MCRZ"	#此block由哪些block压缩合并而来
                ]
        },
        "version": 1
}

4. tombstones
tombstones用于对数据进行软删除。TSDB在删除block数据块时会将整个目录删除,但如果只删除一部分数据块的内容,则可以通过 tombstones进行软删除

这些block按照时间顺序被分割为一个个block,其中第一个block被称为head-block,它被存储在内存中并且允许修改,而后面的block以只读的方式存储在硬盘中。如下图:
在这里插入图片描述

head-block和后面的block都被初始设定为保存2h的数据,当head-block超过1.5倍大小(3h)的时候,它将被重新分割成2h和1h两部分,前面一部分变为只读块被保存到硬盘中。

WAL

WAL(write-ahead logging,预写日志)是关系型数据库中利用日志来实现事务性和持久性的一种技术,即在进行某个操作之前先将这件事情记录下来,以便之后对数据进行回滚、重试等操作并保证数据可靠性。

Prometheus为了防止丢失暂存在内存中的还未被写入磁盘的监控数据’、引入了WAL机制。WAL被分割为默认大小为128M的文件段,文件段以数字命名,例如00000001、00000002等,以此类推。

在这里插入图片描述

按照每种对象设定的采集周期,Prometheus会将周期性采集的监控数据先写入head-block中,但这些数据没有被持久化,TSDB通过WAL将提交的数据先保存到磁盘中,在TSDB宕机重启后,会首先启动多协程读取WAL,从而恢复之前的状态。

另外从Prometheus v2.19.0开始,Prometheus引入了内存映射,将head-block中已填充的完整的chunk,刷新到磁盘(即保存在chunks_head目录下的数据)并从磁盘进行内存映射,同时仅将引用存储在内存中。通过内存映射,可以在需要时使用该引用将chunk动态加载到内存中。这是操作系统提供的功能。通过引入内存映射,减少了Prometheus的内存消耗,虽然填充完毕的chunk会被刷到磁盘上,但是对于该部分的操作预写入日志不会被删除,直到该chunk所属的block完整落盘

本地存储配置参数

--storage.tsdb.path		#指定数据保存位置
--storage.tsdb.retention.time	#指定数据保存时间,默认15d
--storage.tsdb.retention.size 	#指定block可以保存的数据大小
--query.timeout	#最大查询超时时间,默认2m
--query.max-concurrency		#最大查询并发数,默认20

VictoriaMetrics

简介

VictoriaMetrics是一个快速、支持高可用且可扩展的开源时序数据库和监控解决方案。可用做Promethazine的远端存储。

VictoriaMetrics官网:https://victoriametrics.com/
官方文档:https://docs.victoriametrics.com/
项目地址:https://github.com/VictoriaMetrics

VictoriaMetrics的优点:

  • 兼容Prometheus相关API,可以直接用作Grafana的数据源
  • 内存占用率低
  • 查询速度快
  • 设置和操作简单
  • 支持水平扩容和HA(集群版)
  • 高压缩比等等

VictoriaMetrics分为集群版和单机版,根据实际需求选择即可。

  • 单机版:直接通过二进制文件运行即可,官方建议采集数据点(data points)低于100w/s,推荐VM单节点版,简单好维护,但不支持告警。
  • 集群版:支持数据水平拆分,根据功能拆分为不同的组件vmselect、vminsert、vmstorage,如果替换Prometheus还可以加上vmagent和vmalert

下图是集群版的架构图:

在这里插入图片描述

相关组件作用如下:

  • vmstorage:数据存储即查询结果返回,默认端口8482
  • vminsert:写入组件,vminsert负责接收数据写入请求并根据对数据的hash结果将数据写入到后端不同的vmstorage之上,实现数据分片。默认端口8480,属于无状态服务可水平扩展
  • vmselect:查询组件,负责接收查询请求,并连接到vmstorage查询数据。默认端口8481,属于无状态服务可水平扩展

另外还有一些可选组件:

  • vmagent:类似于Prometheus,负责从各种数据来源收集指标数据
  • vmalert:类似于Alertmanager,负责实现告警功能
  • vmctl:命令行工具

单机版部署使用

安装VictoriaMetrics

下载单机版安装包

在这里插入图片描述

wget https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v1.87.2/victoria-metrics-linux-amd64-v1.87.2.tar.gz
tar xf victoria-metrics-linux-amd64-v1.87.2.tar.gz
mv victoria-metrics-prod /usr/bin/
victoria-metrics-prod -h	#查看参数

准备service文件

root@vm-node-01:~# cat /lib/systemd/system/victoria-metrics.service
[Unit]
Description=For Victoria-metrics-prod single service
After=network.target

[Service]
ExecStart=/usr/bin/victoria-metrics-prod -httpListenAddr=0.0.0.0:8428 -storageDataPath=/data/victoria-metrics
-retentionPeriod=3

[Install]
WantedBy=multi-user.target

启动服务

mkdir  -p /data/victoria-metrics
systemctl daemon-reload
systemctl start victoria-metrics.service
systemctl status victoria-metrics.service
systemctl enable victoria-metrics.service

服务启动后可以访问VictoriaMetrics的默认界面,从这里可以选择跳转到其他界面,例如数据查询界面、targets页面等

在这里插入图片描述

配置Prometheus使用Victoriametrics

修改Prometheus配置,添加remote_write配置

global:
..........

remote_write:
  - url: http://192.168.122.24:8428/api/v1/write

配置修改完成后重启Prometheus

systemctl restart prometheus

然后可以在Victoriametrics的界面,查询是否已经有数据写入

在这里插入图片描述
如上图所示,可以看到node-exporter的数据指标已经写入到Victoriametrics

配置Grafana以Victoriametrics作为数据源

添加数据源,类型选择Prometheus

在这里插入图片描述
在这里插入图片描述
导入node-exporter模板验证数据,模板ID 11074
在这里插入图片描述

在这里插入图片描述
如上图所示,模板正常显示数据,表示可以从Victoriametrics单机获取数据

集群版部署使用

环境规划

192.168.122.24  vm-node-01	vmselect/vminsert/vmstorage
192.168.122.25  vm-node-02	vmselect/vminsert/vmstorage
192.168.122.26  vm-node-03	vmselect/vminsert/vmstorage
192.168.122.14	haproxy-node-01		haproxy/keepalived
192.168.122.15  haproxy-node-02 	haproxy/keepalived
192.168.122.19 	VIP

整体结构如下图:
在这里插入图片描述

分别在3个节点执行以下部署步骤

部署vmstorage

下载集群版的安装包
在这里插入图片描述

wget https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v1.87.2/victoria-metrics-linux-amd64-v1.87.2-cluster.tar.gz
tar xf victoria-metrics-linux-amd64-v1.87.2-cluster.tar.gz
mv vminsert-prod vmselect-prod vmstorage-prod /usr/bin/
vmstorage-prod -h	#查看运行参数

准备service文件

root@vm-node-01:~# cat /lib/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

vmstorage会监听3个端口,8482是自身API端口;8400提供给vminsert,负责处理数据写入;8401提供给vmselect,负责数据读取。

启动vmstorage服务

mkdir --p /data/vmstorage-data
systemctl daemon-reload
systemctl start vmstorage.service
systemctl status vmstorage.service
systemctl enable vmstorage.service
部署vmselect

准备service文件

vmselect自身监听8481端口对外提供服务,-storageNode用于指定vmstorage地址

root@vm-node-01:~# cat /lib/systemd/system/vmselect.service
[Unit]
Description=Vmselect Server
After=network.target

[Service]
Restart=on-failure
WorkingDirectory=/tmp
ExecStart=/usr/bin/vmselect-prod -httpListenAddr :8481 -storageNode=192.168.122.24:8401,192.168.122.25:8401,192.168.122.26:8401

[Install]
WantedBy=multi-user.target

启动vmstorage服务

systemctl daemon-reload
systemctl start vmselect.service
systemctl status vmselect.service
systemctl enable vmselect.service

在haproxy中添加vmselect后端配置

listen vmselect-8481
       bind 192.168.122.19:8481
       option  tcplog
       mode tcp
       balance source
       server vmselect-node1 192.168.122.24:8481 check inter 2000 fall 3 rise 5
       server vmselect-node2 192.168.122.25:8481 check inter 2000 fall 3 rise 5
       server vmselect-node3 192.168.122.26:8481 check inter 2000 fall 3 rise 5
部署vminsert

准备service文件

vminsert自身监听8480端口对外提供服务,-storageNode用于指定vmstorage地址

root@vm-node-01:~# cat /lib/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.122.24:8400,192.168.122.25:8400,192.168.122.26:8400

[Install]
WantedBy=multi-user.target

启动服务

systemctl daemon-reload
systemctl start vminsert.service
systemctl status vminsert.service
systemctl enable vminsert.service

在haproxy中添加vminsert后端配置

listen vminsert-8480
       bind 192.168.122.19:8480
       option  tcplog
       mode tcp
       balance source
       server vminsert-node1 192.168.122.24:8480 check inter 2000 fall 3 rise 5
       server vminsert-node2 192.168.122.25:8480 check inter 2000 fall 3 rise 5
       server vminsert-node3 192.168.122.26:8480 check inter 2000 fall 3 rise 5
配置Prometheus使用vminsert

修改Prometheus配置,添加remote_write配置

global:
..........

remote_write:
  - url: http://192.168.122.19:8480/insert/0/prometheus

配置修改完成后重启Prometheus

systemctl restart prometheus
配置Grafana以vmselect为数据源

Grafana添加数据源

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

导入模板查看数据,模板ID 11074
在这里插入图片描述

在这里插入图片描述
如上图所示,模板正常显示数据,表示可以从vmselect读取数据

开启数据复制

默认情况下,数据被vmselect组件基于hash算法分别写入到不同的vmstorage节点,数据只保存一份,如果有vmstorage节点宕机会造成部分数据丢失。可以启用vminsert组件的-replicationFactor=N参数启用复制功能,将数据分别在N个节点上都写入一份以实现数据的高可用。
但复制功能会增加vmselect和vminsert组件的资源使用率,因为vminsert需要写入多份数据,vmselect从多个vmstorage读取数据之后需要执行去重操作。官方建议还是将数据的高可用交给vmstorage数据存储路径的磁盘(例如使用ceph rbd),并定期备份数据

更多介绍可以参考官方文档: https://docs.victoriametrics.com/Cluster-VictoriaMetrics.html#replication-and-data-safety

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/372867.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LearnOpenGL-入门-你好,三角形

本人刚学OpenGL不久且自学,文中定有代码、术语等错误,欢迎指正 我写的项目地址:https://github.com/liujianjie/LearnOpenGLProject LearnOpenGL中文官网:https://learnopengl-cn.github.io/ 文章目录图形渲染管线基本介绍着色器…

文献计量三大定律之一---洛特卡定律及普赖斯定律

科学生产率是洛特卡定律的基础,科学生产率”(Scientific Productivity))是指科学家(科研人员)在科学上所表现出的能力和工作效率,通常用其生产的科学文献的数量来衡量。 1926年,洛特卡在一篇论文中提出了科…

Windows作为操作系统的典型特征和主要功能

我是荔园微风,作为一名在IT界整整25年的老兵,今天我们来重新审视一下Windows这个我们熟悉的不能再熟悉的系统。我们每天都在用Windows操作系统,但是其实我们每天直接在打交道的并不是Windows操作系统的内核,而是Windows操作系统的…

Docker部署Springboot项目(含MySQL+Redis)

使用Docker部署之前写的一个博客项目,主要用到了MySQL和Redis,Redis作网站访问量统计。下面会对具体的部署方式作详细讲解 一、服务器安装Docker 1、删除docker旧版本 sudo yum remove docker \docker-client \docker-client-latest \docker-common \…

(三十五)大白话MySQL一个事务多次查询一条数据读到的都是不同的值,这就是不可重复读?

上一讲我们说完了多个事务并发执行时候,对MySQL的缓存页里的同一行数据同时进行更新或者查询的时候,可能发生的脏写和脏读的问题 我们也都理解了,之所以会发生脏写和脏读,最关键的,其实是因为你一个事务写或者查的是人…

黑盒测试的常用方法

这里我们先设置一个示例,后面的文章中会根据示例来进行讲解 假设有一个程序是判断一个整形数字是否属于1-100 目录 1.等价类法 2.边界值法 3.判定表法 4.场景设计法 5.错误猜测法 6.正交法 1.等价类法 概念:系统性的确定要输入的测试条件的方法可以看出概念非常抽象,那…

命令执行漏洞 | iwebsec

文章目录1 靶场环境2 命令执行漏洞介绍3 靶场练习01-命令执行漏洞02-命令执行漏洞空格绕过03-命令执行漏洞关键命令绕过04-命令执行漏洞通配符绕过05-命令执行漏洞base64编码绕过4 命令执行漏洞危害01-读写系统文件02-执行系统命令03-种植恶意木马04-反弹shellpython反弹shellp…

Android 基础知识4-3.4 ImageView(图像视图)详解

一、ImageView简介 ImageView是Android开发中最常用的组件之一,主要用于显示图片,但是它不只是能显示图片,任何Drawable对象都可以使用它来显示。 二、ImageView 的继承关系 ImageView的继承关系 如下: java.lang.Object 《-- …

生成式语言大模型压缩技术思考——以ChatGPT为例

ChatGPT引领了生成式语言大模型的应用与技术热潮,首先简单回顾ChatGPT应用范式:将其应用于指定的下游任务时(如知识问答、翻译、编码),ChatGPT需要经历三个阶段的训练(增强人类语境的猜想)&…

基于nodejs+vue的平面设计课程管理系统vscode

后台由管理员,教师和学生三个角色,其主要功能包括首页,个人中心,学生管理,教师管理,课程类型管理,课程学习管理,试题讲解管理,作业信息管理,作业提交管理&…

Flutter3引用原生播放器-IOS(Swift)篇

前言由于Flutter项目中需要使用到播放器功能,因此对flutter中各种播放器解决方案进行了一番研究和比对,最后决定还是自己通过Plugin的方法去引用原生播放器符合自己的需求,本篇文章会对各种解决方案做一个简单的比较,以及讲解一下…

STM32—DMA

什么是DMA? DMA(Direct Memory Access,直接存储器访问) 提供在外设与内存、存储器和存储器、外设与外设之间的高速数据传输使用。它允许不同速度的硬件装置来沟通,而不需要依赖于CPU,在这个时间中,CPU对于内存的工作来…

Leetcode 剑指 Offer II 016. 不含重复字符的最长子字符串

题目难度: 中等 原题链接 今天继续更新 Leetcode 的剑指 Offer(专项突击版)系列, 大家在公众号 算法精选 里回复 剑指offer2 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 给定一个字符串 s ,请你找出其中不含有重复字符的最长…

软考之操作系统知识

目录 1.进程管理-进程的概念 2.进程的三态图和五态图 3.进程的同步与互斥 4.PV操作应用 5.死锁问题 6.银行家算法 7.存储管理 8.段式存储组织 9.段页式存储组织 10.页面置换算法 11.磁盘管理 12.作业管理 13.索引文件结构 14.树型目录结构 15.空闲存储空间管理 …

第四届蓝桥杯省赛 C++ B组 - 翻硬币

✍个人博客:https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 📚专栏地址:蓝桥杯题解集合 📝原题地址:翻硬币 📣专栏定位:为想参加蓝桥杯的小伙伴整理常考算法题解,祝大家都…

人工智能学习07--pytorch09--LeNet

参考: 视频: https://www.bilibili.com/video/BV187411T7Ye/?spm_id_from333.999.0.0&vd_sourceb425cf6a88c74ab02b3939ca66be1c0d 博客:https://blog.csdn.net/STATEABC/article/details/123661612?utm_mediumdistribute.pc_feed_404.…

如何使用goquery进行HTML解析以及它的源码分析和实现原理

目录 goquery 是什么 goquery 能用来干什么 goquery quick start 玩转goquery.Find() 查找多个标签 Id 选择器 Class 选择器 属性选择器 子节点选择器 内容过滤器 goquery 源码分析 图解源码 总结 goquery 简介 goquery是一款基于Go语言的HTML解析库,…

聚类算法(上):8个常见的无监督聚类方法介绍和比较

无监督聚类方法的评价指标必须依赖于数据和聚类结果的内在属性,例如聚类的紧凑性和分离性,与外部知识的一致性,以及同一算法不同运行结果的稳定性。 本文将全面概述Scikit-Learn库中用于的聚类技术以及各种评估方法。 本文将分为2个部分&…

【Mac 教程系列】如何在 Mac 中用终端命令行方式打开 Sublime Text ?

如何在 Mac 中用终端命令行方式打开 Sublime Text ? 用 markdown 格式输出答案。 不少于1000字。细分到2级目录。 如何在 Mac 中用终端命令行方式打开 Sublime Text ? 一、首先确保已经安装 Sublime Text 前往官网https://www.sublimetext.com/下载 Sublime Text&#xff0c…

Bootstrap表单的使用

文章目录前言一、创建基础表单垂直表单(默认)内联表单(水平显示)表单控制尺寸大小给表单控件添加帮助文本禁用/只读表单无边框的控件取色器选择菜单(默认宽度100%)调整下拉菜单的大小表单开关滑块表单组多个…