PromQL, если условие и или оператор

#operators #prometheus #promql

#операторы #prometheus #promql

Вопрос:

в PromQL я хочу написать

 If metric_a>=bool 3:
  return metric_b
else:
  return 1
 

Я думаю написать как

 (metric_b and metric_a>=3) or metric_a<bool 3
 

но я обнаружил, что при переключении порядка метрик, например, A или B, B или A, результат запроса изменится, также я не уверен, означает ли то, что у меня есть, мое if-иначе
почему оператор or / and даст несоответствующий результат? кроме того, каков наилучший способ представления оператора if-else здесь?

Ответ №1:

Я проверил предложенное вами решение:

 (metric_b and metric_a>=3) or metric_a<bool 3
 

и это сработало, как и ожидалось, возвращая значение metric_b, когда metric_a равно>= 3, и 1 в противном случае.

Важно отметить, что «VECTOR1 и VECTOR2» не обязательно равно «VECTOR2 и VECTOR1». Взгляните на документацию Prometheus об этом:

vector1 и vector2 приводят к вектору, состоящему из элементов vector1, для которых в vector2 есть элементы с точно совпадающими наборами меток. Другие элементы отбрасываются.

Результаты всегда берутся из первого вектора предложения «и».

Например, следующий запрос:

введите описание изображения здесь

Дает другой результат следующего:

введите описание изображения здесь

Комментарии:

1. Спасибо! но почему ситуация изменится, если я скажу «(metric_a> = 3 и metric_b) или metric_a<bool 3» или скажу «metric_a<bool 3 или (metric_a> = 3 и metric_b)», все изменится?

2. Я только что добавил больше информации.