如何解决普罗米修斯计数器在自定义收集器中不屈服
#!/usr/bin/env python3
import sys
import time
from prometheus_client import start_http_server
from prometheus_client.core import CollectorRegistry,Counter
class MyCollector():
def __init__(self):
self.mymetrics_counter = Counter('observability_total','Status of My Services',['app','test'])
def describe(self):
print("Started: Metrics Collector!")
return list()
def collect(self):
self.mymetrics_counter.labels('observability','test').inc()
yield self.mymetrics_counter
if __name__ == '__main__':
try:
myregistry = CollectorRegistry()
myregistry.register(MyCollector())
start_http_server(port=9100,registry=myregistry)
while True:
time.sleep(10)
except KeyboardInterrupt:
print("Ended: Metrics Collector!")
sys.exit(0)
但是我在 yield 时遇到以下错误
(venv) test_collector % python mycollector.py
Started: Metrics Collector!
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/wsgiref/handlers.py",line 137,in run
self.result = application(self.environ,self.start_response)
File "/Users/myid/Documents/myproj/workspace/test_collector/venv/lib/python3.9/site-packages/prometheus_client/exposition.py",line 123,in prometheus_app
status,header,output = _bake_output(registry,accept_header,params)
File "/Users/myid/Documents/myproj/workspace/test_collector/venv/lib/python3.9/site-packages/prometheus_client/exposition.py",line 105,in _bake_output
output = encoder(registry)
File "/Users/myid/Documents/myproj/workspace/test_collector/venv/lib/python3.9/site-packages/prometheus_client/exposition.py",line 179,in generate_latest
mname = metric.name
AttributeError: ("'Counter' object has no attribute 'name'",prometheus_client.metrics.Counter(observability))
解决方法
collect
返回指标系列,而不是指标。如果您产生 mymetrics_counter.collect()
的每个结果,它就会起作用。
此外,当您创建 Counter
时,它会注册到默认注册表,您不希望在这种软使用中使用它,因为它最终会返回两次,这是无效的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。