Prometheus: Sum by 2 metrics?

I need a query to summarise data from two different metrics, both of the same field type, with the following rules:

  • If a type does not exist in metric_a, return metric_b’s result
  • If a type does not exist in metric_b, return metric_a’s result

Problem Statement

I need a query to summarise data from two different metrics, metric_a and metric_b, both of which have the same field type. The query should adhere to the following rules:

  • If a type does not exist in metric_a, return metric_b’s result
  • If a type does not exist in metric_b, return metric_a’s result

Examples

Scenario 1

metric_a :

  • type = type_1, sum = 5
  • type = type_2, sum = 2

metric_b :

  • type = type_1, sum = 4
  • type = type_3, sum = 3

Expected result:

  • type = type_1, sum = 9
  • type = type_2, sum = 2
  • type = type_3, sum = 3

Attempted Solutions

  • sum by (type)(metric_a{job=~"provision-dev"}) or vector(0) + sum by(type)(metric_b{job=~"provision-dev"}) or vector(0): returns only the values from metric_a, and doesn’t calculate metric_b’s results.
  • sum by (type)(metric_a{job=~"provision-dev"}) + sum by(type)(metric_b{job=~"provision-dev"}): returns only the values from metric_b, and doesn’t calculate metric_a’s results.
  • sum by (cluster_id)(provision_scale_out_failures{job=~"provision-dev"} + provision_scale_out_success{job=~"provision-dev"}): this isn’t a valid query.
sum by(type)(
  metric_a{job="provision-dev"} 
  or on(type) vector(0)
  + 
  metric_b{job="provision-dev"} 
  or on(type) vector(0)
)