Чтобы ответить на ответ @David Maze, обработчик по умолчанию promhttp.Handler
предназначен для представления метрик. (собирает из всех зарегистрированных обработчиков и сообщает о них по запросу).
К сожалению, это не универсальное промежуточное ПО http, которое дает вам какие-либо метрики из коробки.
Я видел, что многие из веб-фреймворков Go имеют какое-то промежуточное программное обеспечение Prometheus сообщества ( gin's ), которое выдает метрики «из коробки» (задержка, код ответа, количество запросов и т. Д.).
В клиентской библиотеке go prometheus есть примеры того, как добавить метрики в ваше приложение.
var (
httpRequests = prometheus.NewCounter(
prometheus.CounterOpts{
Name: "http_requests_total",
Help: "Number of http requests.",
},
)
)
func init() {
// Metrics have to be registered to be exposed:
prometheus.MustRegister(httpRequests)
}
func myHandler(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
httpRequests.Inc()
fmt.Fprintf(w, "hello, you've hit %s\n", r.URL.Path)
next.ServeHTTP(w, r)
})
}
Что касается вашего второго вопроса лотов :) Google поддерживает мониторинг 4 золотых сигналов:
https://landing.google.com/sre/book/chapters/monitoring-distributed-systems.html#xref_monitoring_golden-signals
Это
- Трафик - Пропускная способность - Счетчик / Время
- Латентность - распределение / гистограмма
- Ошибки - HTTP-коды ответов / явное количество ошибок
- Насыщенность - очереди ресурсов, т. Е. При наличии пула подпрограмм, сколько подпрограмм активно в данный момент времени
В моем опыте также было полезно иметь представление обо всех взаимодействиях между вашей прикладной программой и вашей базой данных (т.е. 4 золотых сигнала, примененных к вашей базе данных):
- количество звонков в дБ из приложения
- задержки звонков
- Результаты (ошибка / успех) ваших звонков для определения доступности (успех / итог)
- насыщенность доступна от вашего драйвера БД (https://golang.org/pkg/database/sql/#DBStats)