pushgateway — Ошибка значения: Неверное количество меток

#python #python-3.x #prometheus #prometheus-pushgateway

Вопрос:

Это мой код ниже

 def pushgateway(ip_addr, hostname, env_name, services, type):
"""Notify prometheus alerts via pushgateway"""
registry = CollectorRegistry()
label_keys=['ip','hostname','env_name']
label_values=[ip_addr, hostname, env_name]
for key, value in services.items():
   label_keys.append(key)
   label_values.append(value)
assert len(label_keys) == len(label_values).  # this is through
g = Gauge(type[0], f'process status for {type[0]}', label_keys)
g.labels(label_values).set(int(type[1]))
push_to_gateway('localhost:9091',job=f"{service}_{env_name}",registry=registry)
 

При выполнении я получаю эту ошибку, что я делаю не так?

 File "/home/username/.local/lib/python3.6/site-packages/prometheus_client/metrics.py", line 164, in labels
    raise ValueError('Incorrect label count') ValueError: Incorrect label count
 

Печать значений из metrics.py — Я получаю нижеприведенное:

print(f"{labelvalues} - {self._labelnames}") —> ((«а», «в», «с»),) — («а»,»в»,»с»)

len(labelvalues) равно 1 и labelvalues[1] равно 3 и len(self._labelnames) равно 3.

и утверждение терпит неудачу:

 if len(labelvalues) != len(self._labelnames):
   raise ValueError('Incorrect label count')
 

Как это исправить ? должен ли я передать его в другом формате ?

Ответ №1:

Вы забыли развернуть массив label_values . Добавить * перед label_values в этой строке:

 g.labels(*label_values).set(int(type[1]))
 

Также обратите внимание, что Gauge созданные вами файлы не будут отображаться в реестре, в который вы отправляете pushgateway . Вам нужно перейти registry к Gauge созданию экземпляра класса:

 g = Gauge(type[0], f'process status for {type[0]}', label_keys, registry=registry)
 

Если вы этого не сделаете, метрика попадет в реестр по умолчанию:

 from prometheus_client import REGISTRY
 

Комментарии:

1. Да, это действительно работает, я решил развернуть список позже в тот же день. Спасибо, что указали на часть реестра !!