首页 > 解决方案 > 当工人重新启动时,是否可以让 gunicorn 重用 pid?

问题描述

我对 prometheus 的多进程模式 ( MultiProcessCollector) 有问题:每次 gunicron worker 重新启动时(例如超时),它都会以新的 pid 开始,因此 prometheus 会创建新文件来存储指标。但是当收集指标时,prometheus 客户端会检查所有文件。在生产一天后,我的/metrics/端点可以响应慢至 2 秒(甚至更多)。

Prometheus 文档说删除指标文件是不安全的,但我有一个想法,只有当它们没有更新一段时间(例如 2 分钟)时才删除这些文件,这意味着相关的工作人员已经死了。在child_exitgunicorn 的钩子上做这个。但是我担心prometheus在擦除后会丢失一些数据,但另一方面它仍然知道应用程序重启后的最新计数器,所以这部分是有问题的。

还有其他想法吗?

标签: gunicornprometheus

解决方案


这是 Python Prometheus 客户端库的一个已知问题。例如,请参阅此问题https://github.com/prometheus/client_python/issues/568。我会说去吧。还可以考虑完全放弃 Gunicorn,转而依赖 Uvicorn 和容器副本。


推荐阅读