在多进程模式下将Sanic与Prometheus一起使用:FileNotFoundError

2024-04-29 20:14:00 发布

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

我正在尝试为我的Sanic Web服务器设置普罗米修斯指标。我正在使用PyCharm,在配置中我添加了环境变量:

PROMETHEUS_MULTIPROC_DIR=/home/PycharmProjects/image-processor/multiprocess-prometheus-dir/

此外,在启动应用程序之前,我会执行以下bash脚本,以确保正确设置工作目录:

rm -rf multiprocess-prometheus-dir;
mkdir multiprocess-prometheus-dir;

我有一个度量文件:prometheus_metrics_client.py:

from prometheus_client import Counter

NUM_REQUEST = Counter("num_requests", "Number of request handled by Image Processor")

在我的控制器image_processing.py中,我有一个端点来处理图像,并希望使用如下计数器:

from dev.client.prometheus_metrics_client import NUM_REQUEST


@v2.route('/images/v2/<digital_id:int>')
async def process_image_v2(request, digital_id):
    NUM_REQUEST.inc()
    #process image and send response

我想在我的admin_控制器中导出具有端点的指标:

from prometheus_client import multiprocess, CollectorRegistry, generate_latest, CONTENT_TYPE_LATEST


@ac.route('/admin/metrics')
async def metrics(request):
    registry = CollectorRegistry()
    multiprocess.MultiProcessCollector(registry)
    data = generate_latest(registry)
    return response.raw(data, content_type=CONTENT_TYPE_LATEST)

但当我尝试运行服务器时,它会引发FileNotFoundError:

  File "/home/neverovskii/PycharmProjects/image-processor/src/run.py", line 1, in <module>
    from dev.server_instance import app
  File "/home/neverovskii/PycharmProjects/image-processor/src/dev/server_instance.py", line 4, in <module>
    from dev.controller import statistic_controller, image_processing, image_processing_v2, admin_controller
  File "/home/neverovskii/PycharmProjects/image-processor/src/dev/controller/image_processing_v2.py", line 16, in <module>
    from dev.client.prometheus_metrics_client import NUM_REQUEST
  File "/home/neverovskii/PycharmProjects/image-processor/src/dev/client/prometheus_metrics_client.py", line 3, in <module>
    NUM_REQUEST = Counter("num_requests", "Number of request handled by Image Processor")
    FileNotFoundError: [Errno 2] No such file or directory: '/home/PycharmProjects/image-processor/multiprocess-prometheus-dir/counter_18319.db'

这里有什么问题?文档中说我应该在每台服务器启动之前清理工作目录,但是普罗米修斯希望一些文件已经存在。服务器甚至没有开始在该文件夹中放入一些值

我使用的是Python 3.9.5、Sanic 21.3.4、prometheus客户端0.11.0


Tags: frompydevimageimportclienthomerequest