从一个单独的港口收集普罗米修斯指标使用Flask和古尼康与多个工人

2024-04-26 18:18:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我在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中的度量。有办法把这件事办好吗?在

我对这些事情有点陌生,所以如果我处理问题的方式不对,我也很乐意得到建议,什么是解决我的案件的最佳方法。在


Tags: fromimportapp应用程序flaskserver度量进程