У меня есть приложение, показывающее различные метрики 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 и метками результата, но на данный момент это не вариант)
or
вместо оператора+
- person valyala   schedule 25.12.2020