Запрос Прометея и чувствительность к регистру

У меня есть один запрос, где я пытаюсь объединить две метрики на этикетке. K_Status_Value == 5 и ON(macAddr) state_details{live="True"}

Метка macAddr присутствует в обеих метриках. Значение метки отображается в "K_Status_Value" иногда в верхнем регистре (78:32:5A:29:2F:0D), а иногда в нижнем регистре (78:72:5d:39:2f:0a), но всегда появляется в верхнем регистре случай для 'state_details'. Можно ли как-нибудь сделать значение метки macAddr без учета регистра в запросе, чтобы не пропустить случаи, когда случаи не совпадают?

2 ответа

Я могу придумать два варианта

Использование модификатора соответствия регулярному выражению "i":

Чтобы процитировать Бена Кочи из списка рассылки пользователей Prometheus:

Сопоставление регулярных выражений в Prometheus основано на RE2, я думаю, вы можете установить флаги в совпадении, используя(?i(matchstring))

Это действительно работает: эта метрика up{instance="localhost:9090",job="prometheus"} соответствует этому выражению:

up{job=~"(?i:(ProMeTHeUs))"}

Эта подсказка не поможет в описанном выше случае. Это тоже не поможет присоединитьсяon (xx) или group_left.

Использование правила записи:

Изначально я надеялся использовать правило записи для уменьшения регистра во время приема (вprometheus.yml). Однако в настоящее время эта функция не реализована (проблема 1548).

Похоже, в Prometheus нет функций для сопоставления значений меток в разных случаях :( Но это можно решить с помощью функций label_uppercase и/или label_lowercase из MetricsQL . Например, следующий запрос должен правильно соответствовать macAddrзначения меток в разных случаях:

      (label_lowercase(K_Status_Value, "macAddr") == 5)
and ON(macAddr)
label_lowercase(state_details{live="True"}, "macAddr")
Другие вопросы по тегам