Using Prometheus with Connexion - ValueError: Duplicated timeseries in CollectorRegistry
Using Prometheus with Connexion - ValueError: Duplicated timeseries in CollectorRegistry
我在使用 python3.6/3.7 连接 prometheus 时收到以下错误消息:
ValueError: Duplicated timeseries in CollectorRegistry: {'app_request_processing_seconds_sum', 'app_request_processing_seconds_count', 'app_request_processing_seconds_created', 'app_request_processing_seconds'}
#!/usr/bin/env python3
from gevent import monkey # noqa
# monkey.patch_all() # noqa
import json
import os
import connexion
import datetime
import logging
from connexion import NoContent
from prometheus_client import Summary, Counter
logger = logging.getLogger(__name__)
REQUEST_TIME = Summary('app_request_processing_seconds', 'time spent processing')
REQUEST_COUNTER = Counter('app_request_count', 'number of requests')
@REQUEST_TIME.time()
def get_health():
try:
'Hello'
except Exception:
return connexion.problem(503, "Service Unavailable", "Unhealthy")
else:
return "Healthy"
logging.basicConfig(level=logging.INFO)
app = connexion.App(__name__)
app.add_api("swagger.yaml")
if __name__ == "__main__":
# run our standalone gevent server
app.run(port=8080, server="gevent")
有一个 swagger.yaml 等同于:
https://github.com/hjacobs/connexion-example-redis-kubernetes/blob/master/swagger.yaml
任何帮助都会很棒
作为猜测,您已将文件命名为 app.py
。当加载 swagger 时会发生什么,处理被指定为 app.get_health
:
paths:
/health:
get:
operationId: app.get_health
然后加载(第二次)app.py 以导入 get_health()
函数。
主文件作为 __main__
模块加载并因此被第二次加载的原因;有关详细信息,请参阅 this other question。
因此,您最终定义了两次 Prometheus 指标,这对收集器来说并不合适。
最简单的解决方案是重命名您的文件并在另一个名为 app.py
.
的文件中实施您的应用程序
我在使用 python3.6/3.7 连接 prometheus 时收到以下错误消息:
ValueError: Duplicated timeseries in CollectorRegistry: {'app_request_processing_seconds_sum', 'app_request_processing_seconds_count', 'app_request_processing_seconds_created', 'app_request_processing_seconds'}
#!/usr/bin/env python3
from gevent import monkey # noqa
# monkey.patch_all() # noqa
import json
import os
import connexion
import datetime
import logging
from connexion import NoContent
from prometheus_client import Summary, Counter
logger = logging.getLogger(__name__)
REQUEST_TIME = Summary('app_request_processing_seconds', 'time spent processing')
REQUEST_COUNTER = Counter('app_request_count', 'number of requests')
@REQUEST_TIME.time()
def get_health():
try:
'Hello'
except Exception:
return connexion.problem(503, "Service Unavailable", "Unhealthy")
else:
return "Healthy"
logging.basicConfig(level=logging.INFO)
app = connexion.App(__name__)
app.add_api("swagger.yaml")
if __name__ == "__main__":
# run our standalone gevent server
app.run(port=8080, server="gevent")
有一个 swagger.yaml 等同于: https://github.com/hjacobs/connexion-example-redis-kubernetes/blob/master/swagger.yaml
任何帮助都会很棒
作为猜测,您已将文件命名为 app.py
。当加载 swagger 时会发生什么,处理被指定为 app.get_health
:
paths:
/health:
get:
operationId: app.get_health
然后加载(第二次)app.py 以导入 get_health()
函数。
主文件作为 __main__
模块加载并因此被第二次加载的原因;有关详细信息,请参阅 this other question。
因此,您最终定义了两次 Prometheus 指标,这对收集器来说并不合适。
最简单的解决方案是重命名您的文件并在另一个名为 app.py
.