如何从flask端点返回纯文本?普罗米修斯需要

2024-09-30 08:36:35 发布

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

我需要设置一个/metrics端点,这样普罗米修斯就可以使用一个端点的统计信息。我该怎么做?在

我的烧瓶应用程序中有这个:

@app.route('/metrics')
def metrics():
    def generateMetrics():
        metrics = ""
        ... some string builder logic
        return metrics

    response = make_response(generateMetrics(), 200)
    response.mimetype = "text/plain"
    return response

这是最好的办法吗?返回字符串(这里只返回metrics)和返回纯文本有什么区别?我为什么需要这个模版?在


Tags: 信息app应用程序stringreturn烧瓶responsedef
1条回答
网友
1楼 · 发布于 2024-09-30 08:36:35

这是最好的方法吗?

有几种方法可以设置MIME类型,可以更好地解释和讨论in this StackOverflow question。你的方式很好,能完成任务。在

返回字符串和返回纯文本有什么区别?

如果返回字符串,烧瓶将自动handle some of the Response logic for you。这意味着使用一些默认值。如果设置了两个不同的端点,您将看到不同之处在于您的代码返回了以下标头:

Content-Type:"text/plain; charset=utf-8"

而只返回字符串(和默认的MIME类型)将返回以下标头:

^{pr2}$

为什么我需要缩印机?

您可能会说技术上更正确,因为您的响应只是纯文本,而不是HTML。然而,需要它的一个更强制的原因是,您正在使用的第三方系统(Prometheus)依赖或关心“Content Type”头的内容。如果他们这样做,那么你必须让他们接受它。在

示例代码

对于Content-Type报头演示,我使用了以下示例Python代码:

from flask import Flask, make_response
app = Flask(__name__)


def generateMetrics():
    return "hello world"


@app.route('/metrics')
def metrics():
    response = make_response(generateMetrics(), 200)
    response.mimetype = "text/plain"
    return response


@app.route('/metrics2')
def metrics2():
    return generateMetrics()

然后我用Postman查看了返回的正文和邮件头。在

相关问题 更多 >

    热门问题