如何获得2个不同的普罗米修斯指标之间的差异?

时间:2019-03-26 09:37:59

标签: apache-spark apache-kafka prometheus metrics prometheus-operator

考虑指标示例:

increase(application_executor_recordsWritten[20m])
increase(kafka_server_brokertopicmetrics_messagesin_total{topic="my_topic"}[20m])

如果我在普罗米修斯图中分别执行这些指标,则一切正常。但是当尝试类似的东西时:

increase(application_executor_recordsWritten[20m]) -  increase(kafka_server_brokertopicmetrics_messagesin_total{topic="my_topic"}[20m])

我得到了No datapoints error

  1. 可能是因为application_executor_recordsWritten收到了最近1个小时,而kafka_server_brokertopicmetrics_messagesin_total收到了6个小时以上。
  2. 可能会发生,因为那些度量标准具有不同的“收集设置”,请考虑prometheus控制台输出:

    application_executor_records书面

    {app_name =“ app-name”,exported_instance =“ application_111111111111111111”,exported_job =“ application_111111111111111111”,instance =“ XX.XXX.X.XX”,job =“ job_name”,number =“ 1”,角色= “执行者”}

    kafka_server_brokertopicmetrics_messagesin_total

    {instance =“ XX.XXX.X.XX”,job =“职位名称”,topic =“ my_topic”}

普罗米修斯使用ignore(???)之类的关键字,但我不知道它如何工作以及如何将其应用于这些指标。

任何想法如何执行指标差异?正确的语法是什么?

1 个答案:

答案 0 :(得分:0)

在PromQL中,两个度量范围(又称向量)之间的算术二进制运算符受vector matching的约束:该操作仅应用于具有相同确切标签集(名称和值)的条目。

如果存在差异并且没有任何值配对,则会出现臭名昭著的No data point错误。

如果要使它们匹配,则必须

  • 要么忽略一些不匹配的标签(metric1 - ignoring(a_lone_label) metric2
  • 或指示在哪个标签上进行匹配(metric1 - on(common_label_name_and_value) metric2

在您提供的示例中,尚不清楚应匹配什么。我会说instancejob;可能是:

increase(application_executor_recordsWritten[...]) - on (job,instance) increase(kafka_server_brokertopicmetrics_messagesin_total{topic="my_topic"}[...])

如果运算符的一侧包含应与另一侧的多个元素配对的元素(称为一对多匹配),则必须指明运算符的哪一侧(右侧或左侧)有更多条目:使用group_<side:rigth|left>