Объедините разные метрики Prometheus на одном графике

У меня есть приложение, показывающее различные метрики Prometheus. Вначале это приложение было очень специфичным, поэтому оно предоставляло очень специфические метрики, такие как service_name_especific_event_processed{event_type="(type1|type2)", result="(acked|discarded)"}, но затем мы сделали его более универсальным в нашей экосистеме и начали предоставлять более общие метрики, такие как service_name_event_processed{event_type="one_of_a_range_of_types", result="(acked|discarded)"}.

Как видите, несмотря на то, что это разные метрики, они имеют один и тот же набор меток [event_type, result], и мы хотели бы создать панель в Grafana, которая показывала бы их оба агрегированные, как если бы они были одними и теми же метриками, просто сгруппировав их по event_type и result, поэтому у нас будет выпадающий селектор, заполненный всеми различными типами событий, что позволит нам отображать метрики для определенного типа события. Тем не менее, наша панель только для одной из метрик будет заполнена запросом promql, например sum(rate(service_name_event_processed{event_type=~"$event_type"}[1m])) by (result). И чтобы обе метрики были агрегированы и отображены на одной панели, и чтобы их можно было разделить по event_type, мне приходит в голову запрос примерно типа sum(rate(service_name_specific_event_processed{event_type=~"$event_type"}[1d])) by (result) + sum(rate(service_name_event_processed{event_type=~"$event_type"}[1d])) by (result). Этот запрос делает уловку, но у него есть проблема: если нет значений для какой-либо метрики, он возвращает пустой результат и поэтому ничего не показывает на графике.

При этом знаете ли вы какой-либо альтернативный способ достижения результата, который я ищу? (конечно, я знаю, что могу изменить имя конкретной метрики, имея только одну метрику, отличающуюся ее event_type и метками результата, но на данный момент это не вариант)


person beni0888    schedule 18.12.2020    source источник
comment
Попробуйте использовать оператор or вместо оператора +   -  person valyala    schedule 25.12.2020
comment
Большое спасибо @valyala! Работает как часы :-)   -  person beni0888    schedule 11.01.2021


Ответы (1)


Как предложила @valyala в комментариях, для достижения того, что я искал, мне просто пришлось заменить + оператором or. Итак, итоговый запрос выглядит следующим образом

sum(rate(specific_event_processed{event_type=~"$event_type"}[1d])) by (result) or sum(rate(event_processed{event_type=~"$event_type"}[1d])) by (result)
person beni0888    schedule 11.01.2021