如何在Prometheus PromQL中划分2个指标

问题描述

我正在使用Prometheus在Graphana中构建仪表板。 我有2个指标(对服务的呼叫总数和总超时错误

1是服务的总通话 PromQL-(增加(Fetching_RESPONSE_TIME_seconds_count {instance =“ $ {server}:8080”} [1h])

其他是总超时 PromQl-(增加(dp_errors_total {code =〜“ 12345”,instance =“ $ {server}:8080”} [1h]))

我想在我的仪表板中再增加一列,以显示超时百分比(总超时* 100 /服务呼叫总数)。

当我执行此PromQL-(增加(dp_errors_total {code =〜“ 12345”,instance =“ $ {server}:8080”} [1h])* 100 /(增加(Fetching_RESPONSE_TIME_seconds_count {instance =“ $ {server }:8080“} [1h])

它没有显示任何信息给我的仪表板。

如何在仪表板上再添加一列,以显示超时百分比?

解决方法

当您尝试执行算术表达式时,Prometheus将尝试匹配左侧和右侧的时间序列。它通过他们拥有的标签来完成。双方必须具有相同的标签(名称和值)。 我不知道您的时间序列具有的所有标签,但我可以猜测,例如code标签仅出现在dp_errors_total上,而没有出现在第二个标签上。 通常,我通常会首先聚合两个操作数(根据需要),例如:

sum by (server) ( ... dp_errors_total query ) 
/
sum by (server) ( ... Fetching_RESPONSE_TIME_seconds_count query ...)

或者如果$server中只有一台服务器,则删除by (server) 部分。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...