Как настроить отдельные метрики счетчиков для разных запросов на конечной точке?

#python #prometheus

Вопрос:

Я новичок в «Прометее». У меня есть базовая метрика счетчика, работающая для моей конечной точки. Но это совокупное количество всех запросов, сделанных к этой конечной точке. Я хочу иметь отдельный счетчик для каждого типа запроса. Поймите, что добавление меток в счетчик позаботится об этом, я добавил метки в счетчик, как показано ниже.

 basic_counter = Counter('basic_counter','A basic counter.', ['app_name', 'endpoint'])
def metrics():
    basic_counter.labels('prom-python-app', 'localhost:5000').inc() 
 

Например, конечная точка имеет страницу «/здоровье». При посещении его на странице показателей Prometheus должно быть значение счета для
localhost:5000 и localhost:5000/здоровье. Но приведенный выше код возвращает только значение basic_counter_total. Как я могу создать отдельное значение счетчика для разных страниц, посещенных в этой конечной точке?

Ответ №1:

Вы можете указать общий путь для всех видов запросов. Вы можете следовать приведенному ниже коду:

 basic_counter = Counter('basic_counter','A basic counter.', ['app_name', 'endpoint'])
def metrics(self):
    basic_counter.labels('prom-python-app', self.path).inc() 

 

Комментарии:

1. У меня нет занятий. Это всего лишь функция. На самом деле я перенаправляю приложение в конечную точку «/метрики». Затем соберите и предоставьте метрики здесь в формате, который может прочитать prometheus. Так что у меня действительно не может быть собственного пути.

2. from flask import Blueprint, Response, request import http.server from prometheus_client import start_http_server, Counter, generate_latest blueprint = Blueprint('metrics', __name__) CONTENT_TYPE_LATEST = str('text/plain; version=0.0.4; charset=utf-8') basic_counter = Counter('http_requests','Total number of requests to baseURL.', ['app_name', 'endpoint']) @blueprint.route('/', methods=['GET']) def metrics(): basic_counter.labels('pron-python-app', 'localhost:5000').inc() return Response(generate_latest(), mimetype=CONTENT_TYPE_LATEST)