prometheus - 在 Grafana 中合并多个 Prometheus 查询
问题描述
我有一个 PostgreSQL 集群,我将使用 Grafana 7.2.0 和 Prometheus 进行监控。特别是,我想在同一仪表板的三个 SingleStat(一个用于节点)上显示谁是 master、replica-sync 和 replica-potential。
我有以下指标来了解谁是主服务器和副本(注意字段角色)。
patroni_patroni_info{group="testdb",instance="host0:9547",job="db-test",name="my-node-0",role="master",scope="main",state="running",version="2000.0.1"} 1
patroni_patroni_info{group="testdb",instance="host1:9547",job="db-test",name="my-node-1",role="replica",scope="main",state="running",version="2000.0.1"} 1
patroni_patroni_info{group="testdb",instance="host2:9547",job="db-test",name="my-node-2",role="replica",scope="main",state="running",version="2000.0.1"} 1
问题是关于谁是副本同步的信息在另一个普罗米修斯指标中(注意字段sync_state):
patroni_replication_info{application_name="patroni1", client_addr="10.0.0.1", group="testdb", instance="host0:9547",job="db-test",name="cfdb-node-0",state="streaming",sync_priority="1",sync_state="potential",usename="backup_user"} 1
patroni_replication_info{application_name="patroni2", client_addr="192.10.9.1", group="testdb",instance="host0:9547", job="db-test",name="cfdb-node-0",state="streaming",sync_priority="1",sync_state="sync",usename="backup_user"}
如您所见,node0 是主节点,node1 是潜在副本,node2 是副本同步。我的问题是我不知道如何在 Grafana SingleStat 中组合这些指标以显示:
- 掌握
- 副本同步
- 副本异步
Grafana 7.2.0 中的 SingleStat 使用转换来组合查询,但似乎它们不符合我的需求。此外,由于没有公共字段,因此无法进行连接。有人可以帮我弄这个吗?
解决方案
我将使用的策略是“计算”查询中的角色,例如 1 用于主服务器,2 用于 Replica-Sync,3 用于 Replica-Async,然后使用价值指标功能将这些数字映射到相应的字符串(或者如果您发现更好的可视化,也可以是颜色)
您可以将指标相乘并相加
# only one of these sub queries should return a result per node
# this will return 1 if the node is the master
patroni_patroni_info{role="master"}
or
# this will return 2 if the node is an async replica
2 * patroni_patroni_info{role="replica"} * patroni_replication_info{sync_state="potential"}
or
# this will return 3 if the node is a sync replica
3 * patroni_patroni_info{role="replica"} * patroni_replication_info{sync_state="sync"}
不幸的是,如果没有包含数据的普罗米修斯,我就无法测试查询。因此,如果它不起作用,请分别尝试 3 个子查询,然后将它们相加,这样它就会为每个节点提供一个数字。也许你需要摆弄on
,ignoring
和group_left
(group_right
见这里)
推荐阅读
- ios - 如何在没有分段的情况下获得文件上传的进度?
- cassandra - 如果 Cassandra 数据库中的某个节点在向客户端传输数据时发生故障会怎样?
- ruby-on-rails - 如何在 before_update 上反映过程?
- wordpress - 嵌套表格、重力表格之间的计算
- node.js - 在保持文件大小不变的情况下附加到文件的方法
- reactjs - 如何在 Typescript 中定义 React Navigation navigationOptions 参数
- c# - RadGridView 按钮列内容绑定到 DataMember
- wordpress - Woocommerce“新订单”电子邮件未发送
- java - 将 PHP 服务器套接字连接到 Android 客户端套接字
- mysql - 是否可以跨多种语言设置 ASP Classic 和 MYSQL 的数字格式?