简体   繁体   中英

Prometheus query to count unique labels over a timeframe

I need to count the number of unique labelsets for a prometheus metric over a given timeframe. For example, "How many unique labelsets have a value of 1 at some point during the past 7 days."

I've investigated using count and count_over_time but count only operates on instant vectors meaning I can get the number of unique labelsets for an instance in time, but not in aggregate over a timeframe. count_over_time returns the number of values which isn't useful since I need to know the number of labelsets and not how many values each has.

Basically I want something like count((metric_name >= 1)[7d]) . This is a very easy problem to solve outside of PromQL by just making the range query metric_name >= 1 over 7 days and then counting the number of series in the result field of the response, but I want to perform this query in PromQL if possible.

If you know the interval between samples (aka scrape_interval in Prometheus ecosystem), then the following query should return the number of unique labelsets (aka unique time series - see this article for more details about commonly used technical terms in Prometheus) with values >=1 over the last 7 days if scrape_interval=30s :

count(count_over_time((metric >= 1)[7d:30s])

This query uses subquery feature from PromQL.

If scrape_interval is unknown beforehand, then the task cannot be solved with PromQL. But it can be solved with count_gt_over_time and count_eq_over_time functions in MetricsQL :

count(count_gt_over_time(metric[7d], 1) or count_eq_over_time(metric[7d], 1))

Figured it out. count(count_over_time(metric[range])) gives the value I want.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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