Prometheus 存储的是时序数据,而它的时序是由名字和一组标签构成的。时序的标签可以使 Prometheus 的数据更加丰富,能够区分具体不同的实例,例如 http_requests_total{method="POST"}
可以表示所有 http 中的 POST 请求。
一个简单的查询相当于是对各种标签的筛选,例如:
http_requests_total{code="200"} // 表示查询名字为 http_requests_total,code 为 "200" 的数据
在上一节中,我们在python程序中暴露了最简单的Counter数据类型。这一节,我们将基于原来的代码,向Counter数据类型中添加标签,以统计不同URL路径访问的次数。
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/hello
和http://0.0.0.0:8080/world
, 并分别刷新几次页面:
此时访问metrics数据,可以统计不同URL的访问次数: