Mam dwa zapytania promowe w Grafanie.

Query 1: max_over_time(counter{label="label1"}[5m])

Query 2: max_over_time(counter{label="label1"}[5m] offset 10m)

Istnieje dokładny mecz między etykietami w obu zapytaniach, więc nie wierzę, że muszę użyć funkcji on(). Chciałbym obliczyć różnicę między tymi zapytaniami ...

Query 3: max_over_time(counter{label="label1"}[5m]) - max_over_time(counter{label="label1"}[5m] offset 10m)

Zapytanie 3 zwraca wynikowy wektor, który jest najbardziej poprawny. Jeśli na przykład wynikowy wektor zapytania 1 ma wpis, przy pozycji I'TH, z wartością 1500, a wynikowy wektor Query 2 ma wpis w pozycji I'TH z wartością 1000. Następnie I'th Pozycja wynikowego wektora w zapytaniu 3 staje się 1500-1000 = 500.

Ale gdy zapytanie 1 ma wartość 1000 i zapytania 2 wartość null (która jest sformatowana jako 0), wynik staje się 1000 - Null = NULL.

Chciałbym, aby wynik wynosił 1000 w tym przypadku. Próbowałem przekonwertować wszystkie wartości zerowe do zera, ale w oparciu o to, co przeczytałem, Prometheus wydaje się już traktować null jako zer. Próbowałem również użyć wektora (0):

(max_over_time(counter{label="label1"}[5m]) or vector(0)) - (max_over_time(counter{label="label1"}[5m] offset 10m) or vector(0))

Ale to nie zmienia wyniku.

Oto podzbiór wyników uzyskanych z inspektora zapytania Grafana dla wszystkich trzech zapytań.

Poprawne wyniki dla zapytania różnicy

Uzupełnij poprawne wyniki dla zapytania różnicowego, gdy istnieją wartości null. Jednak tak szybko, jak pojawią się wartości NULL, różnica nie może być już obliczona.

Nieprawidłowe wartości różnicowe, gdy są wartości zerowe. 1000-null powinien wynosić 1000, nie null.

Naprawdę doceniłbym pomocne wskazówki. Z góry dziękuję.

1
ah2kmoada 19 marzec 2021, 16:16

1 odpowiedź

Najlepsza odpowiedź

Spróbuj tego zapytania:

sum(max_over_time(counter{label="label1"[5m]) or vector(0)) - sum(max_over_time(counter{label="label1"[5m] offset 10m) or vector(0))
0
Marcelo Ávila de Oliveira 19 marzec 2021, 17:39