label_replace()
Тема дорожной карты · Prometheus
Функция label_replace() в PromQL позволяет создавать или изменять метку временного ряда с помощью регулярного выражения, применяемого к существующему значению метки. Это особенно полезно для нормализации значений меток при федерации метрик из нескольких источников Prometheus или при объединении метрик, использующих различные соглашения об именовании меток. Сигнатура функции: label_replace(v instant-vector, dst_label string, replacement string, src_label string, regex string), где regex сопоставляется со значением src_label, а replacement (в котором могут присутствовать ссылки на группы захвата, например $1) записывается в dst_label. Например, label_replace(up, "host", "$1", "instance", "([^:]+):.*") извлекает только имя хоста из метки instance, включающей номер порта. В отличие от relabel_configs, работающих во время опроса, label_replace() преобразует метки динамически во время выполнения запроса, не изменяя хранящиеся ряды.
Как это работает
Функция label_replace() позволяет динамически изменять метки временных рядов при выполнении запроса. Это делает её отличным инструментом для манипуляции метками в реальном времени, без необходимости изменения конфигурации или данных, хранящихся в Prometheus. Она может быть использована для извлечения определённых частей из меток, таких как имя хоста из метки instance, которая может содержать дополнительную информацию, например, номер порта.
Когда применять
label_replace() особенно полезна при федерации метрик из нескольких источников Prometheus или при объединении метрик, использующих различные соглашения об именовании меток. Например, если у вас есть несколько источников данных, каждый из которых использует свои собственные соглашения об именовании меток, вы можете использовать label_replace() для нормализации этих меток, чтобы они были согласованы и могли быть легко объединены для анализа или отображения.
Типичные ошибки
Одной из распространённых ошибок при использовании label_replace() является неправильное использование регулярных выражений. Например, если вы пытаетесь извлечь только имя хоста из метки instance, но ваше регулярное выражение не верно, вы можете получить неверные результаты. Кроме того, важно помнить, что label_replace() не изменяет исходные данные, хранящиеся в Prometheus, поэтому если вы хотите изменить метки на постоянной основе, вам потребуется использовать relabel_configs в конфигурации Prometheus.