Назад к вопросам
Senior
4
Как измерить время выполнения HTTP-ручки используя только counters (без histogram)?
Компании, где спрашивали
Не указано
Ответ от нейросети
sobes.tech AI
Если нельзя использовать гистограммы, а есть только счётчики (counters), можно приблизительно оценить время выполнения HTTP-ручки, используя два счётчика:
- Счётчик общего количества вызовов ручки (например,
requests_total). - Счётчик суммарного времени выполнения всех вызовов (например,
requests_duration_seconds_total).
В каждом обработчике HTTP нужно:
- Засечь время начала и конца обработки запроса.
- Добавить 1 к счётчику вызовов.
- Добавить разницу времени (продолжительность) к счётчику суммарного времени.
Среднее время выполнения можно получить как отношение суммарного времени к количеству вызовов:
var (
requestsTotal = prometheus.NewCounter(prometheus.CounterOpts{Name: "requests_total"})
requestsDuration = prometheus.NewCounter(prometheus.CounterOpts{Name: "requests_duration_seconds_total"})
)
func handler(w http.ResponseWriter, r *http.Request) {
start := time.Now()
// обработка запроса
// ...
duration := time.Since(start).Seconds()
requestsTotal.Inc()
requestsDuration.Add(duration)
}
Таким образом, хотя мы не получаем распределение времени, можно вычислить среднее время выполнения: requests_duration_seconds_total / requests_total. Это простой и эффективный способ при ограничениях на использование гистограмм.