sum(deposit{token =~ ".*"}) by (token) - sum(withdraw{token=~".*"}) by (token)
I'm trying to do subtraction query in Prometheus but one of the metrics can return "Empty query result", so the whole answer will be "Empty query result" event if the other metric returns its own value.
Note: I want to do "group by" so vector(0) is not an option.
Note2: labels are not predefined, so absent() can't be an option either.
You can use or
over whole expression for this.
sum(deposit{token =~ ".*"}) by (token) - sum(withdraw{token=~".*"}) by (token)
or sum(deposit{token =~ ".*"}) by (token)
or - sum(withdraw{token=~".*"}) by (token)
Here, all parts of or
will be evaluated, and returned for unique sets of labels (in our case of a single label token
) in priority of order if according part of expression returned value.
Demo of similar query can be seen here.