如何使用 prometheus-flask-exporter 定期更新指标?

How to update metrics regularly using prometheus-flask-exporter?

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

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

不是'how often can I get prometheus to fetch a particular metric'

目前我无法在我的 Flask 应用程序中运行循环,因为主要的 class 没有 运行 如果我有的话。

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

我的app.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')

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

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

我通过添加后台线程来完成这项工作解决了这个问题。

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')