1

这是我下面的代码

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}")--> (('a', 'b', 'c'),) - ('a','b','c')

len(labelvalues)是 1 和labelvalues[1]3 和 len(self._labelnames)3。

并且断言失败:

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

如何解决这个问题?我应该以不同的格式传递它吗?

4

1 回答 1

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
于 2021-10-19T12:03:27.450 回答