#prometheus #promql
#prometheus #promql
Вопрос:
Мне нужно суммировать мои виртуальные машины по префиксу имени виртуальной машины. Все мои виртуальные машины имеют префиксы типа «customername_IIS01», «customername_IIS02», «customernameN_SQL». Мне нужно написать запрос PromQL для суммирования всех показателей клиента по имени пользователя. Но, конечно, когда приходит новый клиент, ему нужно получить его имя с помощью запроса.
Пример: это метрика, которую мне нужно собрать. Я могу получить его с помощью «vmware_vm_cpu_usagemhz_average{vm_name = ~»customer01. «}» Клиент может перейти на 100 или более, и он динамично меняется. Каков правильный способ получения этой информации с помощью PromQL?
Ответ №1:
Вы можете проанализировать метку, чтобы создать дополнительную метку customer
, содержащую имя клиента, выведенное из префикса.
Это можно сделать в конфигурации Prometheus, используя #metric_relabel_configs:
metric_relabel_configs:
- source_labels: [vm_name]
regex: ^([^.] )..*$
target_label: customer
replacement: $1
Если у вас нет доступа к конфигурации promteheus или по какой-либо причине вы предпочитаете делать это во время запроса, вы можете использовать label_replace для создания метки в запросе. Если ваш запрос становится более сложным, он быстро становится неудобным и нечитаемым.
label_replace({__name__=~"vmware_vm_.*"}, "customer", "$1", "vm_name", "^([^.] )..*$")
Комментарии:
1. Я попытался добавить metric_label_configs в соответствующее определение задания. Ваше регулярное выражение не смогло вернуть необходимые данные, но я изменил его на ^([^_t] ).* затем я получил «customer» по соответствующей метрике (vmware_vm_cpu_usagemhz_average). Но не все значения имеют поле «клиент», это нормально?
2. Спасибо @Michael Dubez, к сожалению, Prometheus не принял его регулярное выражение и выдал ошибку. Ссылка
3. Вам не хватает «. Я исправлю выражение. Я не смог доказать выражение, это пример :). Если значения не имеют метки
vm_name
или если шаблон неправильный, вы получите пустое значение. Вам придется адаптировать шаблон.