我在kubernetes上运行一个带有gunicorn和多个worker进程的小flask应用程序。我想用prometheus从这个应用程序中收集度量,但是这些度量只能在一个单独的端口上进行内部访问(正如我们当前设置中所要求的那样)。在
对于一个gunicorn worker进程,我可以使用python客户机库中的start_http_server
函数,在与flask应用程序不同的端口上公开度量。在
最简单的例子如下:
from flask import Flask
from prometheus_client import start_http_server, Counter
NUM_REQUESTS = Counter("num_requests", "Example counter")
app = Flask(__name__)
@app.route('/')
def hello_world():
NUM_REQUESTS.inc()
return 'Hello, World!'
start_http_server(9001)
要启动应用程序,请执行以下操作:
^{pr2}$但是,这只适用于一个辅助进程。在
在客户端库的文档中,还介绍了如何将prometheus和gunicorn用于多个工作进程,方法是将工作进程的共享目录指定为写入度量的环境变量(prometheus_multiproc_dir
)。在
因此,根据文档,上面针对多个工人的示例是:
gunicorn配置文件:
from prometheus_client import multiprocess
def worker_exit(server, worker):
multiprocess.mark_process_dead(worker.pid)
应用程序文件:
import os
from flask import Flask
from prometheus_client import Counter
NUM_REQUESTS = Counter("num_requests", "Example counter")
app = Flask(__name__)
@app.route('/')
def hello_world():
NUM_REQUESTS.inc()
return "[PID {}]: Hello World".format(os.getpid())
要启动应用程序,请执行以下操作:
rm -rf flask-metrics/
mkdir flask-metrics
export prometheus_multiproc_dir=flask-metrics
gunicorn --bind 127.0.0.1:8082 -c gunicorn_conf.py -w 3 app:app
然而,在这种情况下,我不知道如何在单独的端口上访问存储在flask metrics中的度量。有办法把这件事办好吗?在
我对这些事情有点陌生,所以如果我处理问题的方式不对,我也很乐意得到建议,什么是解决我的案件的最佳方法。在
在这里,您需要做的是启动一个单独的过程来服务于度量。将}对它和主应用程序都是相同的。在
app
函数放在自己的应用程序中的https://github.com/prometheus/client_python#multiprocess-mode-gunicorn中,并确保{相关问题 更多 >
编程相关推荐