сумма динамических полей

#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 или если шаблон неправильный, вы получите пустое значение. Вам придется адаптировать шаблон.