如何从Prometheus单独提取个别数据持久化到InfluxDB

news2024/11/17 11:43:29

背景

首先解释一个问题,为什么会选择让InfluxDB来持久化Prometheus的数据,直接存在Prometheus中不行吗?下面是Claude的回答,我来总结一下:
1)InfluxDB提供了更强大的Flux查询语言,比如提供了复杂的聚合和函数等,要强于Prometheus提供的PromQL语言;
2)Prometheus没有接口对存储的数据进行管理,只能按存储块删除,查询。而InfluxDB可以可以完全自由的实现增删改查的功能,而且它支持更多种标签和字段,数据可以呈现更丰富。也就是说Prometheus无法纯粹的作为一个TSDB,它更多的是为了满足实时采集监控数据;
3)InfluxDB的各方面性能更好,适合存储大量的数据。而Prometheus数据只能存在本地磁盘中,还是呢句话Prometheus并不是一个纯粹的TSDB,更多的是为了满足实时采集监控数据。

有几个主要的原因会选择让InfluxDB来持久化Prometheus的数据:
1.性能和容量:InfluxDB专注于时序列数据,性能更好,容量更大。而Prometheus主要用于 scraping 和 querying,不适合作为长期存储。
2.查询能力:InfluxDB提供了强大的Flux查询语言,提供复杂的聚合和函数,比Prometheus的PromQL更强大。
3.多维分析:InfluxDB支持多种标签和字段,可以进行多维分析,而Prometheus只支持少量标签。
4.数据可以共享:将数据发送到InfluxDB后,其他系统也可以查询和使用这些数据。
5.自动化:可以使用Telegraf或Prometheus Exporter自动向InfluxDB输送数据。
直接使用Prometheus存储的数据有几个缺点:
1.Prometheus通常只用于短期存储,2-3周,磁盘空间有限。
2.PromQL查询能力相对有限。
3.Prometheus不易扩展到PB级别的数据量。
4.数据只能在Prometheus里使用,没有共享。
所以总的来说,使用InfluxDB的优势主要在于:
1.专注于长期时序数据存储,性能和容量更好。
2.提供更强大的多维查询和分析能力。
3.易于与其他系统集成,可以共享查询的数据。
直接在Prometheus存储数据的优势在于部署简单,但是限制也很多,所以一般都通过Prometheus Exporter的方式将数据导出到InfluxDB来进行存储和分析。

Prometheus直接对接InfluxDB网上有很多,但是我觉得应该不是每个数据需要持久化吧,但网络上并没有这样的文章,我也不知道为什么,可能全部存下也不会占用多少空间?或者不在Prometheus处过滤?这篇文章就介绍一下如何从Prometheus单独提取个别数据持久化到InfluxDB,当然可能这样是没有意义的,但也在这个过程中学到了Prometheus的一些高级用法,也算开阔一下思路吧。

解决方式

首先需要注意的是InfluxDB分为1代和2代,1代是可以直接通过在prometheus.yaml配置remote_write标签,直接从Prometheus传给InfluxDB的。而2代需要通过Telegraf(InfluxDB他们家的产品)进行一个中转。Telegraf与Prometheus功能类似,也是采集指标的,一些不同之处在于Prometheus只能采集指标,而Telegraf什么也能采集,比如你想采集日志,就安装上对应插件,就可以采集日志了;Prometheus自身也是数据库,而Telegraf不是,等。
在这里插入图片描述
为了方便我就使用一代产品了,只需要在prometheus.xml文件加入下面的语句即可成功,主要就是write_relabel_configs:这里的内容。下面是官网对这个字段的解释,简单来说就是采集到数据,在发送到InfluxDB时可以改变原始数据,可能就像流处理一样。关于这个标签的更详细内容可以去relabel_config查看,还是挺复杂的,这里只展示如何解决本文的问题。

write_relabel_configs is relabeling applied to samples before sending them to the remote endpoint. Write relabeling is applied after external labels. This could be used to limit which samples are sent.

上面是官方对这个字段的说明,如何解决我的问题,我是在这个网站发现了解决方式,原文如下:
在这里插入图片描述

remote_write:
  - url: "http://47.115.226.81:8086/api/v1/prom/write?db=prometheus"
    write_relabel_configs:
      - source_labels: [__name__]
        regex: "go_memstats_mcache_inuse_bytes"
        action: keep 

来总结一下这几个标签分别是啥:
url: InfluxDB的地址(这是InfluxDB提供的8086写入接口,官方文档在https://docs.influxdata.com/influxdb/v1.8/supported_protocols/prometheus/;Prometheus也有自己的接口为9090,和InfluxDB长的挺像的,别搞混了,官方文档在https://prometheus.io/docs/prometheus/latest/querying/api/)。
write_relabel_configs: 写入时需要进行标签重写的配置项。
source_labels:表示根据什么匹配,在这个例子中,待重写的内容为根据指标名称进行匹配。
regex:表示匹配规则,也就是正则表达式,这里会匹配go_memstats_mcache_inuse_bytes这个标签。
action:表示匹配上后要执行的操作,这里keep就是要留下这个数据,如果是drop就是删除这个数据。

结果

在这里插入图片描述

在这里插入图片描述

其它

另外简单说一些InfluxDB的内容:
InfluxDB是一个用Go语言编写的时序数据库,与传统关系型数据库相比,它对时序数据场景有专门的优化。主要用在运维和IOT(物联网)(比如每隔一段时间,监控一下一氧化碳浓度什么的),比起MySQL来说,它取决于业务,比如发起个什么请求,然后才会对数据库有什么操作;而InfluxDB可以是取决于设备的。
为什么InfluxDB适合这种场景呢,因为MySQL底层是B+树,而InfluxDB是LSM(日志结构合并树)。并且为了性能,也不支持事务,不能删除某条数据,很多更新也不行

我们之前说,时序数据库一般用于指标监控场景。这个场景的数据有一个非常明显的特点就是冷热差别明显。通常,指标监控值会使用近期一段时间的数据,比如我只查询某个设备近10分钟的记录,10分钟前的数据我就不再用了。那么这10分钟前的数据,对我们来说就是冷数据,应该被压缩放到磁盘里去来节省空间。而热数据因为经常要用,数据库就应该让它留在内存里,等待查询。

关系型数据库也是支持时间戳的,也能基于时间进行查询。但是,从我们的使用场景出发,需要注意数据库的写入性能,通常,关系型数据库会采用B+数据结构,在数据写入时,有可能会触发叶裂变,从而产生了对磁盘的随机独写,降低写入速度。
当前市面上的时序数据库通常都是采用LSM Tree的变种,顺序写磁盘来增强数据的写入能力。网上有不少关于性能测试的文章,通常时序数据库都会保证在单点每秒数十万的写入能力。

下面时InfluxDB行协议,也就是数据格式。InfluxDB是没有表的,它有一个叫bucket,这就相当于数据库,数据库里存放这些数据,第一个measurement其实就是代表了表;tag set相当于是一个索引;field set也就是存储的值;timestamp就是时间戳。总的来说measurement和tag set组成了一个索引,timestamp也是一个索引,组成了双索引的结构。
在这里插入图片描述
例子:

home,room=Living\ Room temp=21.1,hum=35.9,co=0i 1641024000
home,room=Kitchen temp=21.0,hum=35.9,co=0i 1641024000
home,room=Living\ Room temp=21.4,hum=35.9,co=0i 1641027600
home,room=Kitchen temp=23.0,hum=36.2,co=0i 1641027600

在这里插入图片描述
在这里插入图片描述
这里另外提一下Prometheus的数据格式<metric name>{<label name>=<label value>, ...},但其实可以由四部分组成,首先就是指标名称;tag标签,可选;值,只能是一个,不像InfluxDB;时间戳,这个可选,不写,就是默认进入的那一刻。

例子:

node_cpu_seconds_total {cpu="0",mode="iowait"} 455.09

Prometheus和InfluxDB格式不一样,是怎么传的?Prometheus在根据Remote Write API传到InfluxDB时,会将标签labels编码为InfluxDB中的tag键值对,将测量值(value)编码为field。

最后说一下,InfluxDB对应的查询语言为Flux,功能就是像SQL一样,查东西,大概长下面这样:

from(bucket: "get-started")
    |> range(start: 2022-01-01T08:00:00Z, stop: 2022-01-01T20:00:01Z)
    |> filter(fn: (r) => r._measurement == "home")
    |> filter(fn: (r) => r._field== "co" or r._field == "hum" or r._field == "temp")

而Prometheus的PromQL长下面这样,查询功能比较简单:

prometheus_http_requests_total{}[5m]

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

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

相关文章

长鑫存储面试(部分)

你平时写代码时&#xff0c;如何保证代码可靠、可复用、可扩展、可维护&#xff1f;有总结经验吗&#xff0c;请举例说明。参考答案 by newBing&#xff1a; 编写文档&#xff1a;编写文档是保证代码可维护性的重要手段。文档应该包括代码的设计思路、实现细节、使用方法等。 遵…

NeRF系列(2):NeRF in the wild : Neural Radiance Fields for Unconstrained Photo Collections论文解读与公式推导

NeRF in the Wild: Neural Radiance Fields for Unconstrained Photo Collections 论文&#xff1a;https://openaccess.thecvf.com/content/CVPR2021/papers/Martin-Brualla_NeRF_in_the_Wild_Neural_Radiance_Fields_for_Unconstrained_Photo_CVPR_2021_paper.pdfhttps://op…

pyspark安装教程

pyspark安装教程 一、Windows下配置pyspark环境1.1 JDK下载安装1.2 Scala下载安装1.3 spark下载安装1.4 Hadoop下载安装1.5 pyspark下载安装 二、pyspark原理简介 一、Windows下配置pyspark环境 在python中使用pyspark并不是单纯的导入pyspark包就可以实现的&#xff0c;而是需…

从0到字节跳动30W年薪,我在测试行业“混”的第5个年头····

一些碎碎念 什么都做了&#xff0c;和什么都没做其实是一样的&#xff0c;走出“瞎忙活”的安乐窝&#xff0c;才是避开弯路的最佳路径。希望我的经历能帮助到有需要的朋友。 在测试行业已经混了5个年头了&#xff0c;以前经常听到开发对我说&#xff0c;天天的点点点有意思没…

使用Jmeter读取和使用Redis数据

目录 前言 缓存 Redis服务和客户端安装 Jmeter使用Redis 总结&#xff1a; 前言 消息队列和缓存是目前主流的中间件&#xff0c;我们在日常测试过程中&#xff0c;无论是接口还是压力测试&#xff0c;都会遇到需要处理这些中间件数据的情况。本文以Redis对缓存做一个简单…

精选博客系列|vSphere 8 Update 1 介绍

去年&#xff0c;我们推出了 vSphere 8&#xff0c;这是传统和下一代应用程序的企业工作负载平台&#xff0c;该产品于 2022 年 11 月正式推出。今天&#xff0c;我们很高兴地宣布 vSphere 8 Update 1 版本。通过这个版本&#xff0c;客户可以获得增强的管理员操作效率&#xf…

【QT】QGridLayout的基础使用(添加控件、布局、间距)

目录 0.环境介绍 1.QGridLayout简介&#xff1a; 2.QGridLayout参数介绍 1&#xff09;添加控件方式 2&#xff09;添加布局方式 3.例子及代码 1&#xff09;三行三列 2&#xff09;有占多行多列的控件 0.环境介绍 windows vscode qt 我使用网格布局的情景是&#x…

深入理解侵入式容器与非侵入式容器(intrusive containers)

再传统的数据结构的实现中&#xff0c;分为侵入式容器和非侵入式容器两种 侵入式容器 这也是教材喜欢使用的数据结构的实现方式 &#xff0c;将数据结构放入类中&#xff0c;所以先讲这个 非侵入式容器&#xff1a; struct ListNode {ListNode *prev, *next;int value; }; …

五分钟搞懂分布式流控算法

流控是任何一个复杂系统都必须考虑的问题&#xff0c;本文介绍并比较了不同的流控算法&#xff0c;从而帮助我们可以基于系统需求和架构选择合适的方案。原文&#xff1a;Distributed Rate-Limiting Algorithms[1] 当我们设计分布式流控系统&#xff08;distributed rate-limit…

华硕TUF GAMING B460M i5-10500 电脑 Hackintosh 黑苹果efi引导文件

原文来源于黑果魏叔官网&#xff0c;转载需注明出处。&#xff08;下载请直接百度黑果魏叔&#xff09; 硬件配置 硬件型号驱动情况 主板华硕TUF GAMING B460M-PLUS (LPC Controller B460芯片组 处理器特尔 Core i5-10500 3.10GHz六核已驱动 内存16 GB (IstRI DDR4 2666MH…

在字节划水的4年,很真实...

先简单交代一下&#xff0c;我是某不知名211的计算机本硕&#xff0c;18年毕业加入滴滴&#xff0c;之后跳槽到了头条&#xff0c;一直从事测试开发相关的工作。之前没有实习经历&#xff0c;算是四年半的工作经验吧。 这四年半之间完成了一次晋升&#xff0c;换了一家公司&am…

微信可以聚合聊天吗?如何同时管理多个微信?

现在很多企业用微信做私域流量运营&#xff0c;在里面搭建自己的私域流量。随着客户资源逐渐增多&#xff0c;需求增加&#xff0c;不仅需要联系客户&#xff0c;还要联系各大代理&#xff0c;开通多个微信号无疑是最佳方案。 但是不少做电商的朋友表示&#xff0c;微信号越来…

代理ip数据采集的优缺点

随着互联网时代的到来&#xff0c;数据已经成为企业发展和决策的关键。但是&#xff0c;不同的网站它对于数据访问的限制和反爬虫措施却是给企业的数据采集带来了挑战。针对这一问题&#xff0c;代理IP数据采集技术应运而生。但是使用代理ip来进行数据采集也有优缺点。 一、代理…

JS WEB框架Express日志模块winston和express-winston以及winston-daily-rotate-file优化

1.前言 1.Express的日志模块winston和express-winston已经提供了开箱即用的大多数功能&#xff0c;但是和其他语言相比&#xff0c;还缺失对日志记录的当前文件和行号的支持&#xff0c;需要自己实现&#xff0c;以此记录一下。 2.express-winston主要用于记录请求进入和结束时…

【运筹优化】ALNS自适应大领域搜索算法求解TSP问题 + Java代码实现

文章目录 一、TSP问题简介二、数学建模三、实现细节四、案例实战4.1 测试案例说明4.2 Java 完整代码4.2.1 TSP_Instance 实例类4.2.2 TSP_Solution 结果类4.2.3 TSP_Util 工具类4.2.4 TSP_Solver_ALNS 算法类4.2.5 RunAndPlot 运行类 4.3 运行结果展示 一、TSP问题简介 旅行推…

MySQL登录时报错:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘解决办法

问题描述 在云服务器使用 docker安装的Mysql5.7数据库&#xff0c;刚开始的时候使用正常&#xff0c;后面突然有一天就连接不上了&#xff0c;报错为: ERROR 1045 (28000): Access denied for user root1xxx(using password:YES)&#xff0c; 当登录MySQL数据库出现 Error 1045…

python套接字(三):结合pyside2实现多人聊天室

文章目录 前言一、准备1、安装pyside22、设计界面 二、代码实现1、服务器端2、客户端 三、运行 前言 上一章python套接字(二)&#xff1a;实现一个服务器和多客户端连接&#xff0c;大概实现了多人聊天室功能&#xff0c;但是比较简陋&#xff0c;本篇内容将结合pyside2做一个…

车间主任、班组长必读:生产车间的现场管理

与工厂车间操作层&#xff08;一线员工&#xff09;接触最多的基层管理者&#xff0c;即我们通常所说的班组长、车间主任等&#xff0c;他们是将企业战略规划落实到具体工作当中的终端管理者。 一线班组长的“角色” 1、责任者 对企业来说&#xff0c;班组长是基层的治理员&am…

MySQL高级篇第二天

文章目录 一、Mysql的体系结构概览 二、 存储引擎 三、优化SQL步骤 一、Mysql的体系结构概览 整个MySQL Server由以下组成 Connection Pool : 连接池组件 Management Services & Utilities : 管理服务和工具组件 SQL Interface : SQL接口组件 Parser : 查询分析器组件 O…

游戏测试与一般的软件测试的区别在哪里?

有很多同学进入测试行业之后&#xff0c;一直从事的是软件测试的工作&#xff0c;然后跳槽时遇到一些游戏的公司的面试&#xff0c;就会有点慌&#xff0c;我做的都是软件测试&#xff0c;能胜任游戏测试么&#xff1f; 所以&#xff0c;今天我们需要先来了解一下&#xff0c;…