Próbuję wykonać kompleksowe zapytanie promowe. Zasadniczo chcę porównać średnią średnią 1 godzinę, do tej samej godziny w ciągu ostatnich 3 dni (średnia):

rate(processing_time_sum[1h]) / rate(processing_time_count[1h]) / (
rate(processing_time_sum[1h] offset 1d) / rate(processing_time_count[1h] offset 1d) +
rate(processing_time_sum[1h] offset 2d) / rate(processing_time_count[1h] offset 2d) +
rate(processing_time_sum[1h] offset 3d) / rate(processing_time_count[1h] offset 3d) +
)/3

Moim problemem jest, gdy nie ma danych w jednym (lub więcej) z poprzednich dni (sobotę, niedziele i święta), a następnie otrzymuję błąd "Nie znaleziono punktów danych" na całym zapytaniu. Chciałbym być w stanie zignorować brakujące dni lub użyć ostatniego dnia, które miały punkty danych.

0
Yuval Kobel 28 listopad 2019, 12:29

1 odpowiedź

Najlepsza odpowiedź

Ogólnie, gdy robiąc coś takiego jak a + b w Promql, gdzie b może brakować niektórych kombinacji etykiet a, można napisać to jako:

a + (b or a * 0)

Lub, w sprawie, ponieważ używasz podziału i wielu metryk {X0}} (jak było):

a / ((b1 or a) + (b2 or a) + (b3 or a)) * 3

Ale brakuje więcej metryk b, tym bardziej "normalne" Twoje {X1}} metryczne będzie wyglądać. (Np. Jeśli nie masz żadnych wartości dla żadnego z poprzednich 3 dni, wynik będzie 1.)

Lub, jeśli po prostu chcesz ostatniego dnia z punktami danych (ponownie, spada z powrotem do a, jeśli brakuje wszystkich b s):

a / (b1 or b2 or b3 or a)
0
Alin Sînpălean 29 listopad 2019, 11:17