如何获取普罗米修斯中某个标签的不同值的数量?

How to get the count of distinct values for a certain label in prometheus?

我们正在使用 prometheus 和 grafana 通过绘制每个主题和分区的消费率曲线来监控 kafka 消费者。我们注意到某些分区的消费者可能会因为某些错误而停止工作。如果有一些函数可以计算正在使用的不同分区的数量(作为标签值),那么添加警报会很方便。

更新:

我们有这样一个时间序列:

consume_rate_count{topic="my-kafka-topic",partition="0"} 320 1495164869031
consume_rate_count{topic="my-kafka-topic",partition="1"} 316 1495164869031
consume_rate_count{topic="my-kafka-topic",partition="2"} 331 1495164869031
consume_rate_count{topic="my-kafka-topic",partition="3"} 322 1495164869031

我们正在寻找方法来获取具有正消耗率的不同分区的数量。所以如果我们得到以下数据,就会触发警报,因为我们总共有 4 个分区,但只有 3 个正在被消耗。

consume_rate_count{topic="my-kafka-topic",partition="0"} 320 1495164869031
consume_rate_count{topic="my-kafka-topic",partition="1"} 316 1495164869031
consume_rate_count{topic="my-kafka-topic",partition="2"} 0   1495164869031
consume_rate_count{topic="my-kafka-topic",partition="3"} 322 1495164869031

consume_rate_count == 0 会做的。

以下查询 returns 消耗率 non-zero 的 per-topic 分区数:

count(consume_rate_count > 0) without (partition)

查询使用>运算符和count() aggregate function for counting the number of non-zero time series and grouping them by all the labels except partition. See these docs关于>运算符。

以下查询 returns 消耗率为零的 per-topic 分区的数量:

count(consume_rate_count == 0) without (partition)

如果该主题至少包含一个分区且 non-zero 消费率:

count(consume_rate_count == 0) without (partition) > 0
  and
count(consume_rate_count > 0) without (partition) > 0

此查询使用 and 运算符,仅当右侧存在具有相同标签集的时间序列时,左侧 returns 时间序列 - 参见 these docs有关此运算符的详细信息。