-1

我正在创建一个简单的 Flask webapp,它应该生成一个由 Prometheus 提取的随机指标。我正在使用 prometheus-flask-exporter 库,它使我能够设置指标。

简而言之,我想知道如何在烧瓶内部配置自定义指标,以便它们每隔一段时间从烧瓶应用程序的“/metrics”端点更新。

不是“我多久可以让 prometheus 获取特定指标”

目前我无法在我的烧瓶应用程序中运行循环,因为如果我有一个主类不会运行。

这只是为了概念证明,自定义指标可以是任何东西。

我的应用程序.py:

from flask import Flask, render_template, request
from prometheus_flask_exporter import PrometheusMetrics

app = Flask(__name__)
metrics = PrometheusMetrics(app)

#Example of exposing information as a Gague metric:
info = metrics.info('random_metric', 'This is a random metric')
info.set(1234)

if __name__ == '__main__':
    app.run(host='0.0.0.0')
4

2 回答 2

0

我不确定您是否了解 Prometheus 的工作原理。默认情况下,Prometheus 每 15 秒从目标中获取指标,但您可以设置不同的间隔。因此,除非您另有决定,否则它将每 15 秒调用一次端点以检索指标。您的端点纯粹是被动的,并在传入连接发生时对其进行响应。

如果您想要每 5 秒收集一次指标,那么您必须在 Prometheus 机器上编辑您的 YAML 配置文件。Flask 应用程序不需要更改。

于 2022-02-04T18:15:20.603 回答
0

我通过添加一个后台线程来解决这个问题。

from flask import Flask
import requests
import time
import threading

class HealthChecker():

    def __init__(self):
        self.app = Flask(__name__)

        @self.app.route('/', methods=['GET'])
        def hello_world():
            return "Hello world from Flask"

        self.metrics = PrometheusMetrics(self.app)
        threading.Thread(target = self.pull_metric).start()
   

if __name__ == '__main__':
    healthChecker = HealthChecker()
    self.app.run(host='0.0.0.0')
于 2022-02-07T16:31:29.147 回答