#node.js #express #prometheus #metrics #prom-client
#node.js #экспресс #prometheus #метрики #prom-клиент
Вопрос:
У меня есть приложение Node JS с таким URL-адресом:
/app/:vehicleNumber/details
Он динамически принимает номера транспортных средств в URL.
API метрик на основе prom-client для HTTP-вызовов возвращает все URL-адреса как отдельные URL-адреса вместо того, чтобы объединять их в один URL-адрес с vehicleNumber в качестве переменной.
http_request_duration_seconds_bucket{le="0.003",status_code="200",method="GET",path="/app/GJ98T0006/details"}
http_request_duration_seconds_bucket{le="0.003",status_code="200",method="GET",path="/app/KA28T6511/details"}
.....
Я хочу, чтобы количество основывалось на одном URL.
например
http_request_duration_seconds_bucket{le="0.003",status_code="200",method="GET",path="/app/{var}/details"}
Это происходит, когда UUID присутствует в URL, но не для номеров транспортных средств, присутствующих в URL.
Комментарии:
1. Что вы используете для получения метрики для каждого маршрута? Это логика сбора метрик в комплекте или вы создали свою собственную?
2. Он входит в комплект. Я пытаюсь получить количество времени, когда вызывается API сведений о транспортном средстве. Но я получаю количество для каждого URL-адреса транспортного средства отдельно
3. Пожалуйста, укажите используемый вами модуль. В нем должна быть какая-то конфигурация «нормализации URL», которую вы можете использовать, чтобы получить то, что вы хотите.
Ответ №1:
Предполагая, что вы используете Express, вы, вероятно, хотите что-то вроде:
let path = null;
if (req.route amp;amp; req.route.path) {
path = req.baseUrl req.route.path;
} else if (req.baseUrl) {
path = req.baseUrl;
} else {
/*
* This request probably matched no routes. The
* cardinality of the set of URLs that will match no
* routes is infinite, so we'll just use a static value.
*/
path = '(no match)';
}
path
будет /app/:vehicleNumber/details
. Эта req.route
часть может быть не нужна для вашего варианта использования, но это не повредит — она пригодится, если вы используете express.Router({ mergeParams: true })
ее для составления своих маршрутов.