Запрос Прометея и чувствительность к регистру
У меня есть один запрос, где я пытаюсь объединить две метрики на этикетке. 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")