Prometheus 聚合查询的两个方案

news2025/1/12 1:38:53

问题背景

多个 Prometheus 集群或者多个 VictoriaMetrics 集群,在 Grafana 和夜莺里通常需要创建多个不同的数据源,这也就意味着,数据没法聚合查询,比如统一做一下 sum 之类的运算会比较麻烦,本文讲述两种 Prometheus 生态的聚合查询方案,以供参考。

场景模拟

我在本地模拟一个这样的场景:两套时序库,比如一套采集的 tomcat 相关机器的指标,一套采集的 oracle 相关机器的指标,相当于按业务切分的两套时序库。这里涉及三个组件:

  • node_exporter:仅用于模拟提供监控指标
  • prometheus9090:监听在 9090 端口的 prometheus,用于采集 node_exporter 的监控指标,会为数据附加上 service="tomcat" 的标签,表示这是 tomcat 业务的监控指标
  • prometheus9091:监听在 9091 端口的 prometheus,用于采集 node_exporter 的监控指标,会为数据附加上 service="oracle" 的标签,表示这是 oracle 业务的监控指标

prometheus9090 的配置文件 prometheus.9090.yml 如下:

global:
  scrape_interval: 15s
  evaluation_interval: 15s

scrape_configs:
  - job_name: "node_exporter"
    static_configs:
      - targets: ["localhost:9100"]
        labels:
          service: tomcat

prometheus9091 的配置文件 prometheus.9091.yml 如下:

global:
  scrape_interval: 15s
  evaluation_interval: 15s

scrape_configs:
  - job_name: "node_exporter"
    static_configs:
      - targets: ["localhost:9100"]
        labels:
          service: oracle

最后,我把这俩时序库作为数据源配置到夜莺中,你也可以使用 Grafana 测试,分别查询这俩数据源,得到预期结果。

20240522103352

下面我们来看看如何聚合查询这两个数据源。

方案一:promxy

看这个名字就知道了,定位就是 prometheus 的 proxy,promxy 的 Github 地址是:https://github.com/jacksontj/promxy。按照 README 去安装就可以了,我的 promxy 的配置文件内容如下:

global:
  evaluation_interval: 5s

promxy:
  server_groups:
    - static_configs:
        - targets:
          - localhost:9090

    - static_configs:
        - targets:
          - localhost:9091

然后,把 promxy 作为数据源配置到夜莺或者 Grafana 中,注意 promxy 默认监听的端口是 8082,之后,就可以查询这个数据源的数据做测试了。

先查个简单的:node_load1

20240522105008

同时查到了两个时序库的数据,挺好的。然后做个聚合查询测试:

20240522105120

完犊子了,这个 sum 并未生效,看起来像是只查询了一个时序库的数据。这是个很基本的场景,不应该有 bug 才对,为啥会如此呢?我尝试两个解决办法:

  • 在夜莺资深用户群扔了这个问题,资深群都是监控重度用户,可能有用过 promxy 的
  • 下载了 promxy 的代码,准备从代码找找线索

资深群里确实有人用,有朋友提醒,promxy 中有个 server_group 的概念,是否应该为不同的 server_group 附加不同的标签呢?我直观感觉,应该是不需要的,因为这已经是多个 server_group 了,已经可以区分了才对,而且 TSDB 里已经有 service 标签做区分了。但是,我还是尝试了一下,修改 promxy 的配置文件如下:

global:
  evaluation_interval: 5s

promxy:
  server_groups:
    - static_configs:
        - targets:
          - localhost:9090
          labels:
            region: a

    - static_configs:
        - targets:
          - localhost:9091
          labels:
            region: b

额外附加了 region 的标签。然后重启 promxy 再次查询:

20240522111051

竟然就行了,哈哈。好吧,群里的朋友也反馈,之前他们没有踩到这个坑,是因为他们默认就给附加了标签。也不知道是 promxy 的 bug 还是有意为之。反正大家注意就好了。

方案二:Prometheus remote read

实际上,Prometheus 自身提供 remote read 能力,可以使用这个能力做聚合。我继续启动了一个 Prometheus 进程,监听在 9092 端口,配置文件 prometheus.9092.yml 如下:

global:
  scrape_interval: 15s
  evaluation_interval: 15s

remote_read:
  - url: http://localhost:9090/api/v1/read
  - url: http://localhost:9091/api/v1/read

把 9090 和 9091 作为 remote read 后端配上即可。然后把 9092 这个 Prometheus 作为数据源配置到夜莺或者 Grafana 中,查询这个数据源的数据做测试。

20240522114310

看起来是没问题的,不管是直接查询简单的 selector,还是聚合查询,都没问题。挺好的。

方案对比

首先,Prometheus remote read 方案,在编写 promql 的时候没有提示:

20240522112244

而 promxy 方案有提示:

20240522112304

这个原因是 remote read 方案只能查监控数据,没法查索引,自然也就没法有 suggestion 了。

其次,Prometheus read remote 只能查询那些支持 remote read 的后端,比如 VictoriaMetrics 就不支持 remote read,如果你的后端是 VictoriaMetrics,就只能使用 promxy 了。

如上,希望可以帮到你 :)

另外,本人创业两年了,我们公司主要是做监控、可观测性。我们希望通过合作努力,让中小公司具备行业顶尖的监控/可观测性能力,如果你有这方面的需求,欢迎联系我们:

联系销售 - 快猫星云

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

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

相关文章

数字营销:以大数据作引擎,推动企业全面数字化升级

数字营销本质乃是以大数据为核之心,促使营销活动高效运作,消费者线上线下数据的无缝衔接、企业内外部数据的贯通、公域引流私域运营等,皆已成为企业运营的标准配置。 数据即等同于市场,市场即等同于用户,用户乃是企…

物联网网关在电梯按需维保方案中起到什么作用?梯联网网关

为减少电梯故障和预防电梯事故,保障人身和财产安全,基于物联网技术的电梯按需维保已在全国多地陆续推行,做到了电梯安全隐患预测式排查,处理问题更具科学性、针对性和精准性,有效提升了电梯运行的安全性。那么&#xf…

【Linux学习】进程地址空间与写时拷贝

文章目录 Linux进程内存布局图&#xff1a;内存布局的验证 进程地址空间写时拷贝 Linux进程内存布局图&#xff1a; 地址空间的范围&#xff0c;在32位机器上是2^32比特位,也就是[0,4G]。 内存布局的验证 代码验证内存布局&#xff1a; 验证代码&#xff1a; #include<s…

搭建第一个SpringBoot+Vue项目

Maven&#xff1a;项目管理工具&#xff0c;对Java项目进行自动化的构建和依赖管理 SpringBoot的特点 只需要很少的配置或者默认配置 能够使用内嵌的Tomcat、Jetty服务器&#xff0c;不需要部署war文件 提供定制化的启动器Starters&#xff0c;简化Maven配置&#xff0c;开…

【Qt】深入探索Qt主窗口与菜单栏:构建高效用户界面的实践指南

文章目录 前言1. 什么是Main Window?2. 详细了解一下其中的 菜单栏&#xff1a;2.1. 创建菜单栏2.2. 添加快捷键2.3. 添加子菜单2.4. 添加分割线2.5. 添加图标 3. 内存泄漏问题&#xff1a;总结 前言 在现代软件开发中&#xff0c;用户界面的设计对于提升用户体验至关重要。Q…

DELPHI通过WebService进行数据交互

WebService是一种可以跨语言和平台的数据交互模式&#xff0c;使用非常广泛&#xff0c;与JSon数据格式结合&#xff0c;更是当前非常流行的一种模式&#xff0c;本章针对DELPHI通过WebService进行数据的交互做一个相对简单例子应用。 本文使用的DELPHI 版本为&#xff1a;DEL…

Linux基础之程序地址空间

目录 一、程序地址空间的基本概念 二、程序地址空间的结构​编辑 三、虚拟地址和物理地址的关系 四、为什么要使用程序地址空间 一、程序地址空间的基本概念 要理解我们的程序地址空间&#xff0c;首先就要认识下面这张图&#xff1a; 这张图上所表示的内容&#xf…

java中写word换行符 poi 换行

省流&#xff1a; 表格外的文本&#xff0c;使用“\r”或者“(char)11”来换行&#xff0c;建议用"\r"。 表格内的文本&#xff0c;使用“(char)11”来换行。 正文&#xff1a; 测试用word文档&#xff1a; t1.doc内容如下&#xff1a; t2.doc内容如下&#xff…

基于xilinx fpga RFSOC系列的Ultrascale+ RF Data Converter ip详解说明

目录 1 概述2 IP功能2.1 ADC性能2.2 DAC性能3 IP端口4 代码框架4.1 ADC功能框图4.2 DAC功能框图5 收发数据时序5.1 ADC数据格式5.2 DAC数据格式6 时钟配置6.1 ADC/DAC参考时钟7 数据格式配置模式7.1 ADC的配置模式7.1.1 Real -> real;7.1.2 Real ->IQ;7.1.3 IQ -> IQ;…

掌握2个手机数据恢复软件,快速恢复丢失的数据!

我们使用手机存储了大量的个人和重要数据&#xff0c;包括照片、视频、联系人、短信等等。然而&#xff0c;数据丢失的风险也随之增加。不小心删除、手机损坏、系统崩溃等问题都可能导致宝贵的数据消失。 幸运的是&#xff0c;现在有许多强大而高效的手机数据恢复软件可以帮助…

CSS transform 三大属性 rotate、scale、translate

transform 浏览器支持定义和用法translate位移函数rotate旋转函数scale缩放函数 浏览器支持 表格中的数字表示支持该属性的第一个浏览器版本号。 紧跟在 -webkit-, -ms- 或 -moz- 前的数字为支持该前缀属性的第一个浏览器版本号。 定义和用法 transform 属性向元素应用 2D…

2024电工杯B题保姆级分析完整思路+代码+数据教学

2024电工杯B题保姆级分析完整思路代码数据教学 B题题目&#xff1a;大学生平衡膳食食谱的优化设计及评价 接下来我们将按照题目总体分析-背景分析-各小问分析的形式来 总体分析&#xff1a; 题目要求对两份一日膳食食谱进行营养分析和调整&#xff0c;然后设计优化的平衡膳…

Python 造数据神器Faker

大家好&#xff0c;在编写代码过程中&#xff0c;我们经常需要一些假数据来进行测试或者演示。手动创建这些数据不仅耗时&#xff0c;而且容易出错。幸运的是&#xff0c;Python有一个非常有用的库叫做Faker&#xff0c;它可以生成各种类型的假数据&#xff0c;从名字、地址到公…

ios 原生项目迁移flutter第一天环境

由于公司已经有第一个吃螃蟹的项目组&#xff0c;我在迁移的时候想着站在巨人的肩膀上&#xff0c;但是搭配环境一定要问清楚对方flutter版本&#xff0c;路径也要安排好&#xff0c;不然就不行。 对着自己的项目照着葫芦画瓢&#xff0c;我刚开始为了配置管理图个方便随便放&…

基于Python实现 HR 分析(逻辑回归和基于树的机器学习)【500010104】

介绍 数据集说明 此数据集包含与员工有关的综合属性集合&#xff0c;从人口统计细节到与工作相关的因素。该分析的主要目的是预测员工流动率并辨别导致员工流失的潜在因素。 在这个数据集中&#xff0c;有14,999行&#xff0c;10列&#xff0c;以及这些变量&#xff1a;满意度…

GPU集合通信库在B站的应用和改进

1. 背景 上篇文章 万字长文解析&#xff1a;大模型需要怎样的硬件算力 深入探讨了大型语言模型&#xff08;LLMs&#xff09;在硬件资源方面的需求和面临的挑战&#xff0c;详尽地阐述了如何进行大模型的硬件选型&#xff0c;以及在实际工作中如何根据模型的特定需求来优化硬件…

安装petalinux工具

petalinux 并不是一个特殊 Linux 内核&#xff0c;而是一套开发环境配置的工具&#xff0c;降低 uboot、内核、 根文件系统的配置的工作量&#xff0c;可以从 Vivado 的导出硬件信息自动完成相关软件的配置。 petalinux 是赛灵思基于 buildroot 工具链为自家处理器方便适配 Li…

每周刷题第三期

个人主页&#xff1a;星纭-CSDN博客 系列文章专栏&#xff1a;Python 踏上取经路&#xff0c;比抵达灵山更重要&#xff01;一起努力一起进步&#xff01; 目录 题目一&#xff1a;环形链表 题目二&#xff1a;删除有序数组中的重复项 题目三&#xff1a;有效的括号 题…

spring-boot-starter-mail 发送带附件的邮件信息

背景 项目使用的事ruoyi低代码开发平台ruoyi中有常见的web端下载excel的方式&#xff0c;但是这种方式是直接把输出流写到一个response中&#xff0c;而不是给一个outputstream&#xff0c;如果是给一个outputstream的话&#xff0c;就可以写入到一个固定的文件中去了 解决思路…

P2. 配置MySQL和用户注册登录模块

P2. 配置MySQL和用户注册登录模块 0 概述Tips1 预备知识1.1 SpringBoot 常用模块1.2 pojo层的实现1.3 mapper层的实现1.4 controller层调试CRUD 2 Spring Security2.1 Spring Security 介绍2.2 Spring Security 对接数据库2.3 密码的加密 3 Jwt验证3.1 传统Session验证方式3.2 …