Ответ
Мониторинг нагрузки на Go-приложение — это процесс сбора, анализа и визуализации ключевых метрик производительности. Это позволяет выявлять узкие места и обеспечивать стабильность работы сервиса.
1. Ключевые метрики для отслеживания
- CPU Usage: Загрузка процессора. Высокое значение может указывать на "тяжелые" вычисления.
- Memory Usage: Потребление оперативной памяти. Важно следить за утечками (
runtime.MemStats
). - Goroutine Count: Количество активных горутин (
runtime.NumGoroutine()
). Резкий рост может сигнализировать о зависших горутинах. - Latency: Время ответа на запрос. Одна из важнейших бизнес-метрик.
- RPS (Requests Per Second): Количество запросов в секунду. Показывает текущую нагрузку.
2. Встроенные инструменты Go
Go предоставляет мощные встроенные пакеты для профилирования и мониторинга:
net/http/pprof
: Самый важный инструмент. Позволяет получить детальный профиль приложения (CPU, heap, goroutines) через HTTP-эндпоинты. Достаточно добавить одну строку в код:import _ "net/http/pprof"
expvar
: Позволяет публиковать произвольные метрики (например, кастомные счетчики) в формате JSON по эндпоинту/debug/vars
.runtime.MemStats
: Позволяет программно получить детальную статистику по использованию памяти.var m runtime.MemStats runtime.ReadMemStats(&m) // m.Alloc - байт выделено и не освобождено // m.Sys - всего байт получено от ОС fmt.Printf("Alloc = %v MiB", m.Alloc / 1024 / 1024)
3. Внешние системы мониторинга (Промышленный стандарт)
Для долгосрочного мониторинга и алертинга используется связка Prometheus + Grafana:
- Инструментация приложения: Вы добавляете в свое Go-приложение клиентскую библиотеку Prometheus (например,
prometheus/client_golang
). - Экспорт метрик: Ваше приложение начинает отдавать метрики в специальном формате по HTTP-эндпоинту (обычно
/metrics
). - Сбор данных: Сервер Prometheus периодически опрашивает (
scrape
) этот эндпоинт и сохраняет метрики в свою базу данных временных рядов. - Визуализация: Grafana подключается к Prometheus как к источнику данных и позволяет строить наглядные дашборды и настраивать алерты.