问题背景

多个 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 测试,分别查询这俩数据源,得到预期结果。

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

方案一: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

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

完犊子了,这个 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 再次查询:

竟然就行了,哈哈。好吧,群里的朋友也反馈,之前他们没有踩到这个坑,是因为他们默认就给附加了标签。也不知道是 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 中,查询这个数据源的数据做测试。

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

方案对比

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

而 promxy 方案有提示:

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

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

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

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

https://flashcat.cloud/contact/

Prometheus 聚合查询的两个方案的更多相关文章

  1. MongoDB的使用学习之(七)MongoDB的聚合查询(两种方式)附项目源码

    先来张在路上…… 铛铛铛……项目源码下载地址:http://files.cnblogs.com/ontheroad_lee/MongoDBDemo.rar 此项目是用Maven创建的,没有使用Mave ...

  2. 3W字干货深入分析基于Micrometer和Prometheus实现度量和监控的方案

    前提 最近线上的项目使用了spring-actuator做度量统计收集,使用Prometheus进行数据收集,Grafana进行数据展示,用于监控生成环境机器的性能指标和业务数据指标.一般,我们叫这样 ...

  3. 7.prometheus之查询API

    一.格式概述 二.表达式查询 2.1 Instant queries(即时查询) 2.2 范围查询 三.查询元数据 3.1 通过标签匹配器找到度量指标列表 3.2 获取标签名 3.3 查询标签值 四. ...

  4. ElasticSearch(ES)使用Nested结构存储KV及聚合查询

    自建博客地址:https://www.bytelife.net,欢迎访问! 本文为博客同步发表文章,为了更好的阅读体验,建议您移步至我的博客 本文作者: Jeffrey 本文链接: https://w ...

  5. mongodb高级聚合查询

    在工作中会经常遇到一些mongodb的聚合操作,特此总结下.mongo存储的可以是复杂类型,比如数组.对象等mysql不善于处理的文档型结构,并且聚合的操作也比mysql复杂很多. 注:本文基于 mo ...

  6. ThinkPHP 数据库操作(四) : 聚合查询、时间查询、高级查询

    聚合查询 在应用中我们经常会用到一些统计数据,例如当前所有(或者满足某些条件)的用户数.所有用户的最大积分.用户的平均成绩等等,ThinkPHP为这些统计操作提供了一系列的内置方法,包括: 用法示例: ...

  7. Django-model聚合查询与分组查询

    Django-model聚合查询与分组查询 聚合函数包含:SUM AVG MIN MAX COUNT 聚合函数可以单独使用,不一定要和分组配合使用:不过聚合函数一般和group by 搭配使用 agg ...

  8. python全栈开发day68-ORM操作:一般操作、ForeignKey操作、ManyToManyField、聚合查询和分组查询、F查询和Q查询等

    ORM操作 https://www.cnblogs.com/maple-shaw/articles/9403501.html 一.一般操作 1. 必知必会13条 <1> all(): 查询 ...

  9. django聚合查询

    聚合¶ Django 数据库抽象API 描述了使用Django 查询来增删查改单个对象的方法.然而,有时候你需要获取的值需要根据一组对象聚合后才能得到.这份指南描述通过Django 查询来生成和返回聚 ...

  10. python 全栈开发,Day74(基于双下划线的跨表查询,聚合查询,分组查询,F查询,Q查询)

    昨日内容回顾 # 一对多的添加方式1(推荐) # book=Book.objects.create(title="水浒传",price=100,pub_date="164 ...

随机推荐

  1. 3分钟创建Serverless Job 定时获取新闻热搜

    简介: 7月25号-8月2号工作日期间,完成场景搭建,即可获得夏日清凉小风扇(每日限量)和阿里云代金券! 云起实验室,由阿里云提供的零门槛云上实践平台.一键预置实验环境,提供详细的实验手册指导,快速体 ...

  2. bilibili 实时平台的架构与实践

    摘要:本文由 bilibili 大数据实时平台负责人郑志升分享,基于对 bilibili 实时计算的痛点分析,详细介绍了 bilibili Saber 实时计算平台架构与实践.本次分享主要围绕以下四个 ...

  3. 连续两年入选Gartner公共云容器,阿里云在边缘容器方面做了什么?

    最近,Gartner发布了2020年公共云容器报告,阿里云连续两年成为唯一入选的中国企业.报告显示,阿里云容器服务在中国市场表现强劲,产品形态丰富,在 Serverless 容器.服务网格.安全沙箱容 ...

  4. KubeDL HostNetwork:加速分布式训练通信效率

    ​简介:ubeDL 为分布式训练作业带来了 HostNetwork 网络模式,支持计算节点之间通过宿主机网络相互通信以提升网络性能,同时适应 RDMA/SCC 等新型高性能数据中心架构的网络环境,此外 ...

  5. KubeVela v1.2 发布:你要的图形化操作控制台 VelaUX 终于来了!

    ​简介:时间来到 2022 年,KubeVela 也正式进入了第四个阶段,在原先核心控制器 API 基本稳定的基础上,我们以插件的形式增加了一系列开箱即用的功能.让开发者可以通过 UI 控制台的方式, ...

  6. 贾扬清演讲实录:一个AI开发者的奇幻漂流

    ​简介:2021阿里灵杰AI工程化峰会,贾扬清深度解读阿里灵杰大数据和AI一体化平台. 演讲人:贾扬清 演讲主题:一个AI开发者的奇幻漂流 活动:2021阿里灵杰AI工程化峰会 对于绝大多数人来说,这 ...

  7. 阿里云 Serverless 助力企业全面拥抱云原生

    ​简介:相信随着云计算的发展,Serverless 将成为云时代默认的计算范式,越来越多的企业客户将会采用这个技术. 作者:洛浩 Serverless 应用引擎的组件架构 最早的时候,大家设计软件一般 ...

  8. 技术干货| 阿里云基于Hudi构建Lakehouse实践探索「内附干货PPT下载渠道」

    ​简介: 阿里云高级技术专家王烨(萌豆)在Apache Hudi 与 Apache Pulsar 联合 Meetup 杭州站上的演讲整理稿件,本议题介绍了阿里云如何使用 Hudi 和 OSS 对象存储 ...

  9. Linux下ffmpeg库的编译链接

    /usr/bin/ld: /usr/local/ffmpeg/lib/libavformat.a(aviobuf.o): in function `ff_crc04C11DB7_update':/ho ...

  10. fastposter v2.7.1 紧急发布 电商海报编辑器

    fastposter v2.7.1 紧急发布 电商海报编辑器 fastposter海报生成器,电商海报编辑器,电商海报设计器,fast快速生成海报 海报制作 海报开发.二维码海报,图片海报,分享海报, ...