'Prometheus - Match all metrics but one
How can I match all Prometheus metrics except some?
E.g: {__name__!~"metric_to_discard"}
Does not work, it returns Error executing query: parse error at char 35: vector selector must contain at least one non-empty matcher.
Thanks
Solution 1:[1]
This is some kind of safety mechanism to avoid heavy load on Prometheus by accidentally using too wide selectors. Usually you shouldn't have a need for such a query that matches (almost) every metric with all label dimensions.
There is some hacky solution to workaround this safety check by adding another dimension with a ..* or .+ match-all selector. (The safety check also forbids using .*)
{job=~"..*", __name__!~"metric_to_discard"}
Caution: Be aware that this query will probably hit your Prometheus instance pretty hard and this should not be used on a production system.
As already said, there is probably a better way to get the result you like without querying for almost each and every metric. Please consider posting a new question describing what result you really want to achieve.
Solution 2:[2]
Prometheus supports {__name__!=""} query, which returns all the time series. E.g. this query is equivalent to the following SQL query: SELECT * FROM metrics (note that this query may crash Prometheus if Prometheus contains many time series). Prometheus allows using multiple filters against the same label (including __name__ label, which maps to metric name). So the following query would return all the time series except the metric_to_discard metric:
{__name__!="",__name__!~"metric_to_discard"}
P.S. The __name__!="" hack isn't needed in VictoriaMetrics. It just returns the expected results from {__name__!~"metric_to_discard"} query.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Andreas Jägle |
| Solution 2 | valyala |
