#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. Я только что добавил больше информации.