简体   繁体   English

integer 与 prometheus/grafana 中向量集的区别

[英]Difference between integer and set of vectors in prometheus/grafana

I can't realize how to figure out with metrics nss_chan_last_seq and nss_chan_subs_last_sent .我不知道如何用指标nss_chan_last_seqnss_chan_subs_last_sent I need to get difference between max(last_seq) and min(last_sent) for every durable_name So i have metric last_seq:我需要得到每个durable_namemax(last_seq)min(last_sent)之间的差异所以我有度量 last_seq:

max(nss_chan_last_seq{channel="some-channel", instance=~"some-cluster-cl.*"}) by (channel)

And last_sent:最后发送:

min(nss_chan_subs_last_sent{channel="some-channel", durable_name=~"durable-name-s.*", durable_name!~".*test"}) by (channel, durable_name)

And when I put something like this:当我放这样的东西时:

max(nss_chan_last_seq{channel="some-channel", instance=~"some-cluster-cl.*"}) by (channel) - on (channel) min(nss_chan_subs_last_sent{channel="some-channel", durable_name=~"durable-name-s-.*", durable_name!~".*test"}) by (channel, durable_name) 

I got this error:我收到此错误:

execution: found duplicate series for the match group {channel="some-channel"} on the right hand-side of the operation: [{channel="some-channel", durable_name="durable-name-s16"}, {channel="some-channel", durable_name="durable-name-s14"}];many-to-many matching not allowed: matching labels must be unique on one side

Can someone please explain me, how to figure out with this?有人可以向我解释一下,如何解决这个问题?

I tried to play with on(), group_left(), and group_left() ok with one vector in nss_chan_last_seq , but i have several durable_names for one channel我尝试在 nss_chan_last_seq 中使用 on()、group_left() 和nss_chan_last_seq () 确定一个向量,但我有一个通道的多个 durable_names

The problem with the query is that the instant vector from the left-hand side operand has multiple matches on the right-hand side instant vector operand.查询的问题是来自左侧操作数的即时向量在右侧即时向量操作数上有多个匹配项。

In such cases, you must explicitly tell Prometheus how do you want to match the time series.在这种情况下,您必须明确告诉 Prometheus 您希望如何匹配时间序列。

Group Modifiers (group_left, group_right)组修饰符(group_left,group_right)

Group modifiers enable many-to-one (group_left) / one-to-many (group_right) vector matching. 组修饰符启用多对一 (group_left) /一对多 (group_right)向量匹配。

To make sure all the "many side" labels are preserved, the result has all the labels from samples on the operand on this "many side", which is the left side for group_left and the right side for group_right .为了确保保留所有“多边”标签,结果包含来自该“多边”操作数上样本的所有标签,这是group_left的左侧和group_right的右侧。

So:所以:

  • if the "many side" is a left-hand side operand --> use group_left .如果“多边”是左侧操作数 --> 使用group_left

  • if the "many side" is a right-hand side operand --> use group_right .如果“多边”是右侧操作数 --> 使用group_right


Let's take your operands.让我们把你的操作数。

Left -hand side operand:左侧操作数:

max(nss_chan_last_seq{channel="some-channel", instance=~"some-cluster-cl.*"}) by (channel)

{channel="fizz"} 1
{channel="bazz"} 2

Right -hand side operand:右侧操作数:

min(nss_chan_subs_last_sent{channel="some-channel", durable_name=~".*"}) by (channel, durable_name)

{channel="fizz", durable_name="foo"} 10
{channel="bazz", durable_name="foo"} 20

{channel="fizz", durable_name="bar"} 30
{channel="bazz", durable_name="bar"} 40

The "many side" is the right -hand side operand, so group_right should be used: “多边”是右侧操作数,因此应使用group_right

max(nss_chan_last_seq{channel="some-channel", instance=~"some-cluster-cl.*"}) by (channel)
- on (channel)
min(nss_chan_subs_last_sent{channel="some-channel", durable_name=~".*"}) by (channel, durable_name)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM