向metrics中增加标签

Prometheus 存储的是时序数据,而它的时序是由名字和一组标签构成的。时序的标签可以使 Prometheus 的数据更加丰富,能够区分具体不同的实例,例如 http_requests_total{method="POST"} 可以表示所有 http 中的 POST 请求。

一个简单的查询相当于是对各种标签的筛选,例如:

http_requests_total{code="200"} // 表示查询名字为 http_requests_total,code 为 "200" 的数据

在上一节中,我们在python程序中暴露了最简单的Counter数据类型。这一节,我们将基于原来的代码,向Counter数据类型中添加标签,以统计不同URL路径访问的次数

向metrics中增加标签

variables.py内容更新如下:

import prometheus_client

REQUESTS = prometheus_client.Counter('total_requests', "Total requests for all page view", ['app_name', 'endpoint'])  # 增加两个标签 app_name和endpoint

main.py内容更新如下:

import prometheus_client
import web
import variable  # 引用

urls = (
    '/hello', 'Hello',
    '/world', 'World',
)


class Hello:

    def GET(self):
        variable.REQUESTS.labels("my_python_app", "hello").inc()  # 标签:app_name=my_python_app, endpoint=hello
        web.header('Access-Control-Allow-Origin', '*')
        web.header('Content-Type', 'text/json; charset=utf-8', unique=True)
        web.header('Access-Control-Allow-Credentials', 'true')
        return "hello"


class World:

    def GET(self):
        variable.REQUESTS.labels("my_python_app", "world").inc()  # 标签:app_name=my_python_app, endpoint=world
        web.header('Access-Control-Allow-Origin', '*')
        web.header('Content-Type', 'text/json; charset=utf-8', unique=True)
        web.header('Access-Control-Allow-Credentials', 'true')
        return "world"


if __name__ == "__main__":
    client = prometheus_client.start_http_server(5001)
    app = web.application(urls, globals())
    app.run()

重新运行程序:python main.py

访问http://0.0.0.0:8080/hellohttp://0.0.0.0:8080/world, 并分别刷新几次页面:

image-20210511214012644 此时访问metrics数据,可以统计不同URL的访问次数:

image-20210511214043972